Merged develop into branch
This commit is contained in:
commit
5f861e075c
@ -114,13 +114,13 @@ that the packages is installed:
|
|||||||
|
|
||||||
$ spack install mpileaks
|
$ spack install mpileaks
|
||||||
==> Installing mpileaks
|
==> Installing mpileaks
|
||||||
==> mpich is already installed in /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/mpich@3.0.4.
|
==> mpich is already installed in /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4.
|
||||||
==> callpath is already installed in /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/callpath@1.0.2-5dce4318.
|
==> callpath is already installed in /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318.
|
||||||
==> adept-utils is already installed in /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/adept-utils@1.0-5adef8da.
|
==> adept-utils is already installed in /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da.
|
||||||
==> Trying to fetch from https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
|
==> Trying to fetch from https://github.com/hpc/mpileaks/releases/download/v1.0/mpileaks-1.0.tar.gz
|
||||||
######################################################################## 100.0%
|
######################################################################## 100.0%
|
||||||
==> Staging archive: /home/gamblin2/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=chaos_5_x86_64_ib-59f6ad23/mpileaks-1.0.tar.gz
|
==> Staging archive: /home/gamblin2/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23/mpileaks-1.0.tar.gz
|
||||||
==> Created stage in /home/gamblin2/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=chaos_5_x86_64_ib-59f6ad23.
|
==> Created stage in /home/gamblin2/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=linux-debian7-x86_64-59f6ad23.
|
||||||
==> No patches needed for mpileaks.
|
==> No patches needed for mpileaks.
|
||||||
==> Building mpileaks.
|
==> Building mpileaks.
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ that the packages is installed:
|
|||||||
|
|
||||||
==> Successfully installed mpileaks.
|
==> Successfully installed mpileaks.
|
||||||
Fetch: 2.16s. Build: 9.82s. Total: 11.98s.
|
Fetch: 2.16s. Build: 9.82s. Total: 11.98s.
|
||||||
[+] /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/mpileaks@1.0-59f6ad23
|
[+] /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpileaks@1.0-59f6ad23
|
||||||
|
|
||||||
The last line, with the ``[+]``, indicates where the package is
|
The last line, with the ``[+]``, indicates where the package is
|
||||||
installed.
|
installed.
|
||||||
@ -230,7 +230,7 @@ Running ``spack find`` with no arguments lists installed packages:
|
|||||||
|
|
||||||
$ spack find
|
$ spack find
|
||||||
==> 74 installed packages.
|
==> 74 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
ImageMagick@6.8.9-10 libdwarf@20130729 py-dateutil@2.4.0
|
ImageMagick@6.8.9-10 libdwarf@20130729 py-dateutil@2.4.0
|
||||||
adept-utils@1.0 libdwarf@20130729 py-ipython@2.3.1
|
adept-utils@1.0 libdwarf@20130729 py-ipython@2.3.1
|
||||||
atk@2.14.0 libelf@0.8.12 py-matplotlib@1.4.2
|
atk@2.14.0 libelf@0.8.12 py-matplotlib@1.4.2
|
||||||
@ -256,7 +256,7 @@ Running ``spack find`` with no arguments lists installed packages:
|
|||||||
lcms@2.6 pixman@0.32.6 xz@5.2.0
|
lcms@2.6 pixman@0.32.6 xz@5.2.0
|
||||||
libdrm@2.4.33 py-dateutil@2.4.0 zlib@1.2.8
|
libdrm@2.4.33 py-dateutil@2.4.0 zlib@1.2.8
|
||||||
|
|
||||||
-- chaos_5_x86_64_ib / gcc@4.9.2 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.9.2 --------------------------------
|
||||||
libelf@0.8.10 mpich@3.0.4
|
libelf@0.8.10 mpich@3.0.4
|
||||||
|
|
||||||
Packages are divided into groups according to their architecture and
|
Packages are divided into groups according to their architecture and
|
||||||
@ -279,7 +279,7 @@ in more detail using ``spack find -d``, and by asking only to show
|
|||||||
|
|
||||||
$ spack find --deps libdwarf
|
$ spack find --deps libdwarf
|
||||||
==> 2 installed packages.
|
==> 2 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
libdwarf@20130729-d9b90962
|
libdwarf@20130729-d9b90962
|
||||||
^libelf@0.8.12
|
^libelf@0.8.12
|
||||||
libdwarf@20130729-b52fac98
|
libdwarf@20130729-b52fac98
|
||||||
@ -295,7 +295,7 @@ want to know whether two packages' dependencies differ, you can use
|
|||||||
|
|
||||||
$ spack find -l libdwarf
|
$ spack find -l libdwarf
|
||||||
==> 2 installed packages.
|
==> 2 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
libdwarf@20130729-d9b90962 libdwarf@20130729-b52fac98
|
libdwarf@20130729-d9b90962 libdwarf@20130729-b52fac98
|
||||||
|
|
||||||
Now the ``libwarf`` installs have hashes after their names. These are
|
Now the ``libwarf`` installs have hashes after their names. These are
|
||||||
@ -309,14 +309,14 @@ use ``spack find -p``:
|
|||||||
|
|
||||||
$ spack find -p
|
$ spack find -p
|
||||||
==> 74 installed packages.
|
==> 74 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
ImageMagick@6.8.9-10 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/ImageMagick@6.8.9-10-4df950dd
|
ImageMagick@6.8.9-10 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/ImageMagick@6.8.9-10-4df950dd
|
||||||
adept-utils@1.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/adept-utils@1.0-5adef8da
|
adept-utils@1.0 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da
|
||||||
atk@2.14.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/atk@2.14.0-3d09ac09
|
atk@2.14.0 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/atk@2.14.0-3d09ac09
|
||||||
boost@1.55.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/boost@1.55.0
|
boost@1.55.0 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/boost@1.55.0
|
||||||
bzip2@1.0.6 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/bzip2@1.0.6
|
bzip2@1.0.6 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/bzip2@1.0.6
|
||||||
cairo@1.14.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/cairo@1.14.0-fcc2ab44
|
cairo@1.14.0 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/cairo@1.14.0-fcc2ab44
|
||||||
callpath@1.0.2 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/callpath@1.0.2-5dce4318
|
callpath@1.0.2 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318
|
||||||
...
|
...
|
||||||
|
|
||||||
And, finally, you can restrict your search to a particular package
|
And, finally, you can restrict your search to a particular package
|
||||||
@ -325,10 +325,10 @@ by supplying its name:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack find -p libelf
|
$ spack find -p libelf
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
libelf@0.8.11 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/libelf@0.8.11
|
libelf@0.8.11 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.11
|
||||||
libelf@0.8.12 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/libelf@0.8.12
|
libelf@0.8.12 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.12
|
||||||
libelf@0.8.13 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/libelf@0.8.13
|
libelf@0.8.13 /home/gamblin2/spack/opt/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.13
|
||||||
|
|
||||||
``spack find`` actually does a lot more than this. You can use
|
``spack find`` actually does a lot more than this. You can use
|
||||||
*specs* to query for specific configurations and builds of each
|
*specs* to query for specific configurations and builds of each
|
||||||
@ -338,7 +338,7 @@ package. If you want to find only libelf versions greater than version
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack find libelf@0.8.12:
|
$ spack find libelf@0.8.12:
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
libelf@0.8.12 libelf@0.8.13
|
libelf@0.8.12 libelf@0.8.13
|
||||||
|
|
||||||
Finding just the versions of libdwarf built with a particular version
|
Finding just the versions of libdwarf built with a particular version
|
||||||
@ -348,7 +348,7 @@ of libelf would look like this:
|
|||||||
|
|
||||||
$ spack find -l libdwarf ^libelf@0.8.12
|
$ spack find -l libdwarf ^libelf@0.8.12
|
||||||
==> 1 installed packages.
|
==> 1 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
libdwarf@20130729-d9b90962
|
libdwarf@20130729-d9b90962
|
||||||
|
|
||||||
We can also search for packages that have a certain attribute. For example,
|
We can also search for packages that have a certain attribute. For example,
|
||||||
@ -359,6 +359,7 @@ will find every installed package with a 'debug' compile-time option enabled.
|
|||||||
The full spec syntax is discussed in detail in :ref:`sec-specs`.
|
The full spec syntax is discussed in detail in :ref:`sec-specs`.
|
||||||
|
|
||||||
|
|
||||||
|
.. _compiler-config:
|
||||||
|
|
||||||
Compiler configuration
|
Compiler configuration
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
@ -445,7 +446,7 @@ If you want to see specifics on a particular compiler, you can run
|
|||||||
fc = /usr/local/bin/ifort-15.0.090
|
fc = /usr/local/bin/ifort-15.0.090
|
||||||
|
|
||||||
This shows which C, C++, and Fortran compilers were detected by Spack.
|
This shows which C, C++, and Fortran compilers were detected by Spack.
|
||||||
Notice also that we didn't have to be too specific about the
|
Notice also that we didn\'t have to be too specific about the
|
||||||
version. We just said ``intel@15``, and information about the only
|
version. We just said ``intel@15``, and information about the only
|
||||||
matching Intel compiler was displayed.
|
matching Intel compiler was displayed.
|
||||||
|
|
||||||
@ -460,19 +461,17 @@ editing your ``~/.spack/compilers.yaml`` file. You can do this by running
|
|||||||
Each compiler configuration in the file looks like this::
|
Each compiler configuration in the file looks like this::
|
||||||
|
|
||||||
...
|
...
|
||||||
chaos_5_x86_64_ib:
|
compilers:
|
||||||
...
|
- compiler:
|
||||||
intel@15.0.0:
|
modules = []
|
||||||
|
operating_system: OS
|
||||||
|
paths:
|
||||||
cc: /usr/local/bin/icc-15.0.024-beta
|
cc: /usr/local/bin/icc-15.0.024-beta
|
||||||
cxx: /usr/local/bin/icpc-15.0.024-beta
|
cxx: /usr/local/bin/icpc-15.0.024-beta
|
||||||
f77: /usr/local/bin/ifort-15.0.024-beta
|
f77: /usr/local/bin/ifort-15.0.024-beta
|
||||||
fc: /usr/local/bin/ifort-15.0.024-beta
|
fc: /usr/local/bin/ifort-15.0.024-beta
|
||||||
...
|
|
||||||
|
|
||||||
The chaos_5_x86_64_ib string is an architecture string, and multiple
|
spec: intel@15.0.0:
|
||||||
compilers can be listed underneath an architecture. The architecture
|
|
||||||
string may be replaced with the string 'all' to signify compilers that
|
|
||||||
work on all architectures.
|
|
||||||
|
|
||||||
For compilers, like ``clang``, that do not support Fortran, put
|
For compilers, like ``clang``, that do not support Fortran, put
|
||||||
``None`` for ``f77`` and ``fc``::
|
``None`` for ``f77`` and ``fc``::
|
||||||
@ -488,10 +487,11 @@ list displayed by ``spack compilers``.
|
|||||||
|
|
||||||
You can also add compiler flags to manually configured compilers. The
|
You can also add compiler flags to manually configured compilers. The
|
||||||
valid flags are ``cflags``, ``cxxflags``, ``fflags``, ``cppflags``,
|
valid flags are ``cflags``, ``cxxflags``, ``fflags``, ``cppflags``,
|
||||||
``ldflags``, and ``ldlibs``. For example,::
|
``ldflags``, and ``ldlibs``. For example::
|
||||||
|
|
||||||
...
|
...
|
||||||
chaos_5_x86_64_ib:
|
compilers:
|
||||||
|
- compiler:
|
||||||
...
|
...
|
||||||
intel@15.0.0:
|
intel@15.0.0:
|
||||||
cc: /usr/local/bin/icc-15.0.024-beta
|
cc: /usr/local/bin/icc-15.0.024-beta
|
||||||
@ -518,10 +518,10 @@ Spack, that descriptor is called a *spec*. Spack uses specs to refer
|
|||||||
to a particular build configuration (or configurations) of a package.
|
to a particular build configuration (or configurations) of a package.
|
||||||
Specs are more than a package name and a version; you can use them to
|
Specs are more than a package name and a version; you can use them to
|
||||||
specify the compiler, compiler version, architecture, compile options,
|
specify the compiler, compiler version, architecture, compile options,
|
||||||
and dependency options for a build. In this section, we'll go over
|
and dependency options for a build. In this section, we\'ll go over
|
||||||
the full syntax of specs.
|
the full syntax of specs.
|
||||||
|
|
||||||
Here is an example of a much longer spec than we've seen thus far::
|
Here is an example of a much longer spec than we\'ve seen thus far::
|
||||||
|
|
||||||
mpileaks @1.2:1.4 %gcc@4.7.5 +debug -qt arch=bgq_os ^callpath @1.1 %gcc@4.7.2
|
mpileaks @1.2:1.4 %gcc@4.7.5 +debug -qt arch=bgq_os ^callpath @1.1 %gcc@4.7.2
|
||||||
|
|
||||||
@ -546,8 +546,8 @@ More formally, a spec consists of the following pieces:
|
|||||||
boolean variants
|
boolean variants
|
||||||
* ``name=<value>`` Optional compiler flag specifiers. Valid flag names are
|
* ``name=<value>`` Optional compiler flag specifiers. Valid flag names are
|
||||||
``cflags``, ``cxxflags``, ``fflags``, ``cppflags``, ``ldflags``, and ``ldlibs``.
|
``cflags``, ``cxxflags``, ``fflags``, ``cppflags``, ``ldflags``, and ``ldlibs``.
|
||||||
* ``arch=<value>`` Optional architecture specifier (``arch=bgq_os``)
|
* ``target=<value> os=<value>`` Optional architecture specifier
|
||||||
* ``^`` Dependency specs (``^callpath@1.1``)
|
(``target=haswell os=CNL10``) * ``^`` Dependency specs (``^callpath@1.1``)
|
||||||
|
|
||||||
There are two things to notice here. The first is that specs are
|
There are two things to notice here. The first is that specs are
|
||||||
recursively defined. That is, each dependency after ``^`` is a spec
|
recursively defined. That is, each dependency after ``^`` is a spec
|
||||||
@ -626,7 +626,7 @@ compilers, variants, and architectures just like any other spec.
|
|||||||
Specifiers are associated with the nearest package name to their left.
|
Specifiers are associated with the nearest package name to their left.
|
||||||
For example, above, ``@1.1`` and ``%gcc@4.7.2`` associates with the
|
For example, above, ``@1.1`` and ``%gcc@4.7.2`` associates with the
|
||||||
``callpath`` package, while ``@1.2:1.4``, ``%gcc@4.7.5``, ``+debug``,
|
``callpath`` package, while ``@1.2:1.4``, ``%gcc@4.7.5``, ``+debug``,
|
||||||
``-qt``, and ``arch=bgq_os`` all associate with the ``mpileaks`` package.
|
``-qt``, and ``target=haswell os=CNL10`` all associate with the ``mpileaks`` package.
|
||||||
|
|
||||||
In the diagram above, ``mpileaks`` depends on ``mpich`` with an
|
In the diagram above, ``mpileaks`` depends on ``mpich`` with an
|
||||||
unspecified version, but packages can depend on other packages with
|
unspecified version, but packages can depend on other packages with
|
||||||
@ -758,14 +758,18 @@ in gnu autotools. If all flags are set, the order is
|
|||||||
Architecture specifiers
|
Architecture specifiers
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. Note::
|
The architecture can be specified by using the reserved
|
||||||
|
words ``target`` and/or ``os`` (``target=x86-64 os=debian7``). You can also
|
||||||
|
use the triplet form of platform, operating system and processor.
|
||||||
|
|
||||||
Architecture specifiers are part of specs but are not yet
|
.. code-block:: sh
|
||||||
functional. They will be in Spack version 1.0, due in Q3 2015.
|
|
||||||
|
|
||||||
The architecture specifier looks identical to a variant specifier for a
|
spack install libelf arch=cray_xc-CNL10-haswell
|
||||||
non-boolean variant. The architecture can be specified only using the
|
|
||||||
reserved name ``arch`` (``arch=bgq_os``).
|
Users on non-Cray systems won't have to worry about specifying the architecture.
|
||||||
|
Spack will autodetect what kind of operating system is on your machine as well
|
||||||
|
as the processor. For more information on how the architecture can be
|
||||||
|
used on Cray machines, check here :ref:`spack-cray`
|
||||||
|
|
||||||
|
|
||||||
.. _sec-virtual-dependencies:
|
.. _sec-virtual-dependencies:
|
||||||
@ -985,7 +989,7 @@ of installed packages.
|
|||||||
|
|
||||||
$ module avail
|
$ module avail
|
||||||
|
|
||||||
------- /home/gamblin2/spack/share/spack/modules/chaos_5_x86_64_ib --------
|
------- /home/gamblin2/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
|
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
|
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
|
boost@1.55.0%gcc@4.4.7 mpc@1.0.2%gcc@4.4.7-559607f5
|
||||||
@ -1056,7 +1060,7 @@ Spack. For example, this will add the ``mpich`` package built with
|
|||||||
$ spack use mpich %gcc@4.4.7
|
$ spack use mpich %gcc@4.4.7
|
||||||
Prepending: mpich@3.0.4%gcc@4.4.7 (ok)
|
Prepending: mpich@3.0.4%gcc@4.4.7 (ok)
|
||||||
$ which mpicc
|
$ which mpicc
|
||||||
~/src/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/mpich@3.0.4/bin/mpicc
|
~/src/spack/opt/linux-debian7-x86_64/gcc@4.4.7/mpich@3.0.4/bin/mpicc
|
||||||
|
|
||||||
Or, similarly with modules, you could type:
|
Or, similarly with modules, you could type:
|
||||||
|
|
||||||
@ -1089,8 +1093,8 @@ than one installed package matches it), then Spack will warn you:
|
|||||||
|
|
||||||
$ spack load libelf
|
$ spack load libelf
|
||||||
==> Error: Multiple matches for spec libelf. Choose one:
|
==> Error: Multiple matches for spec libelf. Choose one:
|
||||||
libelf@0.8.13%gcc@4.4.7 arch=chaos_5_x86_64_ib
|
libelf@0.8.13%gcc@4.4.7 arch=linux-debian7-x86_64
|
||||||
libelf@0.8.13%intel@15.0.0 arch=chaos_5_x86_64_ib
|
libelf@0.8.13%intel@15.0.0 arch=linux-debian7-x86_64
|
||||||
|
|
||||||
You can either type the ``spack load`` command again with a fully
|
You can either type the ``spack load`` command again with a fully
|
||||||
qualified argument, or you can add just enough extra constraints to
|
qualified argument, or you can add just enough extra constraints to
|
||||||
@ -1150,7 +1154,7 @@ Modules may be loaded recursively with the command:
|
|||||||
|
|
||||||
More than one spec may be placed on the command line here.
|
More than one spec may be placed on the command line here.
|
||||||
|
|
||||||
Module Comamnds for Shell Scripts
|
Module Commands for Shell Scripts
|
||||||
``````````````````````````````````
|
``````````````````````````````````
|
||||||
|
|
||||||
Although Spack is flexbile, the ``module`` command is much faster.
|
Although Spack is flexbile, the ``module`` command is much faster.
|
||||||
@ -1543,7 +1547,7 @@ an *extension*. Suppose you have Python installed like so:
|
|||||||
|
|
||||||
$ spack find python
|
$ spack find python
|
||||||
==> 1 installed packages.
|
==> 1 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
python@2.7.8
|
python@2.7.8
|
||||||
|
|
||||||
.. _spack-extensions:
|
.. _spack-extensions:
|
||||||
@ -1556,7 +1560,7 @@ You can find extensions for your Python installation like this:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack extensions python
|
$ spack extensions python
|
||||||
==> python@2.7.8%gcc@4.4.7 arch=chaos_5_x86_64_ib-703c7a96
|
==> python@2.7.8%gcc@4.4.7 arch=linux-debian7-x86_64-703c7a96
|
||||||
==> 36 extensions:
|
==> 36 extensions:
|
||||||
geos py-ipython py-pexpect py-pyside py-sip
|
geos py-ipython py-pexpect py-pyside py-sip
|
||||||
py-basemap py-libxml2 py-pil py-pytz py-six
|
py-basemap py-libxml2 py-pil py-pytz py-six
|
||||||
@ -1568,7 +1572,7 @@ You can find extensions for your Python installation like this:
|
|||||||
py-h5py py-numpy py-pyqt py-shiboken
|
py-h5py py-numpy py-pyqt py-shiboken
|
||||||
|
|
||||||
==> 12 installed:
|
==> 12 installed:
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
py-dateutil@2.4.0 py-nose@1.3.4 py-pyside@1.2.2
|
py-dateutil@2.4.0 py-nose@1.3.4 py-pyside@1.2.2
|
||||||
py-dateutil@2.4.0 py-numpy@1.9.1 py-pytz@2014.10
|
py-dateutil@2.4.0 py-numpy@1.9.1 py-pytz@2014.10
|
||||||
py-ipython@2.3.1 py-pygments@2.0.1 py-setuptools@11.3.1
|
py-ipython@2.3.1 py-pygments@2.0.1 py-setuptools@11.3.1
|
||||||
@ -1584,8 +1588,8 @@ prefixes, and you can see this with ``spack find -p``:
|
|||||||
|
|
||||||
$ spack find -p py-numpy
|
$ spack find -p py-numpy
|
||||||
==> 1 installed packages.
|
==> 1 installed packages.
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
py-numpy@1.9.1 /g/g21/gamblin2/src/spack/opt/chaos_5_x86_64_ib/gcc@4.4.7/py-numpy@1.9.1-66733244
|
py-numpy@1.9.1 /g/g21/gamblin2/src/spack/opt/linux-debian7-x86_64/gcc@4.4.7/py-numpy@1.9.1-66733244
|
||||||
|
|
||||||
However, even though this package is installed, you cannot use it
|
However, even though this package is installed, you cannot use it
|
||||||
directly when you run ``python``:
|
directly when you run ``python``:
|
||||||
@ -1646,9 +1650,9 @@ installation:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack activate py-numpy
|
$ spack activate py-numpy
|
||||||
==> Activated extension py-setuptools@11.3.1%gcc@4.4.7 arch=chaos_5_x86_64_ib-3c74eb69 for python@2.7.8%gcc@4.4.7.
|
==> Activated extension py-setuptools@11.3.1%gcc@4.4.7 arch=linux-debian7-x86_64-3c74eb69 for python@2.7.8%gcc@4.4.7.
|
||||||
==> Activated extension py-nose@1.3.4%gcc@4.4.7 arch=chaos_5_x86_64_ib-5f70f816 for python@2.7.8%gcc@4.4.7.
|
==> Activated extension py-nose@1.3.4%gcc@4.4.7 arch=linux-debian7-x86_64-5f70f816 for python@2.7.8%gcc@4.4.7.
|
||||||
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=chaos_5_x86_64_ib-66733244 for python@2.7.8%gcc@4.4.7.
|
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.
|
||||||
|
|
||||||
Several things have happened here. The user requested that
|
Several things have happened here. The user requested that
|
||||||
``py-numpy`` be activated in the ``python`` installation it was built
|
``py-numpy`` be activated in the ``python`` installation it was built
|
||||||
@ -1663,7 +1667,7 @@ packages listed as activated:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack extensions python
|
$ spack extensions python
|
||||||
==> python@2.7.8%gcc@4.4.7 arch=chaos_5_x86_64_ib-703c7a96
|
==> python@2.7.8%gcc@4.4.7 arch=linux-debian7-x86_64-703c7a96
|
||||||
==> 36 extensions:
|
==> 36 extensions:
|
||||||
geos py-ipython py-pexpect py-pyside py-sip
|
geos py-ipython py-pexpect py-pyside py-sip
|
||||||
py-basemap py-libxml2 py-pil py-pytz py-six
|
py-basemap py-libxml2 py-pil py-pytz py-six
|
||||||
@ -1675,14 +1679,14 @@ packages listed as activated:
|
|||||||
py-h5py py-numpy py-pyqt py-shiboken
|
py-h5py py-numpy py-pyqt py-shiboken
|
||||||
|
|
||||||
==> 12 installed:
|
==> 12 installed:
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
py-dateutil@2.4.0 py-nose@1.3.4 py-pyside@1.2.2
|
py-dateutil@2.4.0 py-nose@1.3.4 py-pyside@1.2.2
|
||||||
py-dateutil@2.4.0 py-numpy@1.9.1 py-pytz@2014.10
|
py-dateutil@2.4.0 py-numpy@1.9.1 py-pytz@2014.10
|
||||||
py-ipython@2.3.1 py-pygments@2.0.1 py-setuptools@11.3.1
|
py-ipython@2.3.1 py-pygments@2.0.1 py-setuptools@11.3.1
|
||||||
py-matplotlib@1.4.2 py-pyparsing@2.0.3 py-six@1.9.0
|
py-matplotlib@1.4.2 py-pyparsing@2.0.3 py-six@1.9.0
|
||||||
|
|
||||||
==> 3 currently activated:
|
==> 3 currently activated:
|
||||||
-- chaos_5_x86_64_ib / gcc@4.4.7 --------------------------------
|
-- linux-debian7-x86_64 / gcc@4.4.7 --------------------------------
|
||||||
py-nose@1.3.4 py-numpy@1.9.1 py-setuptools@11.3.1
|
py-nose@1.3.4 py-numpy@1.9.1 py-setuptools@11.3.1
|
||||||
|
|
||||||
|
|
||||||
@ -1711,7 +1715,7 @@ dependencies, you can use ``spack activate -f``:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
$ spack activate -f py-numpy
|
$ spack activate -f py-numpy
|
||||||
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=chaos_5_x86_64_ib-66733244 for python@2.7.8%gcc@4.4.7.
|
==> Activated extension py-numpy@1.9.1%gcc@4.4.7 arch=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7.
|
||||||
|
|
||||||
.. _spack-deactivate:
|
.. _spack-deactivate:
|
||||||
|
|
||||||
@ -1743,7 +1747,7 @@ Spack currently needs to be run from a filesystem that supports
|
|||||||
``flock`` locking semantics. Nearly all local filesystems and recent
|
``flock`` locking semantics. Nearly all local filesystems and recent
|
||||||
versions of NFS support this, but parallel filesystems may be mounted
|
versions of NFS support this, but parallel filesystems may be mounted
|
||||||
without ``flock`` support enabled. You can determine how your
|
without ``flock`` support enabled. You can determine how your
|
||||||
filesystems are mounted with ``mount -p``. The output for a Lustre
|
filesystems are mounted with ``mount -p``. The output for a Lustre
|
||||||
filesystem might look like this:
|
filesystem might look like this:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
@ -1764,7 +1768,7 @@ This issue typically manifests with the error below:
|
|||||||
Traceback (most recent call last):
|
Traceback (most recent call last):
|
||||||
File "./spack", line 176, in <module>
|
File "./spack", line 176, in <module>
|
||||||
main()
|
main()
|
||||||
File "./spack", line 154, in main
|
File "./spack", line 154,' in main
|
||||||
return_val = command(parser, args)
|
return_val = command(parser, args)
|
||||||
File "./spack/lib/spack/spack/cmd/find.py", line 170, in find
|
File "./spack/lib/spack/spack/cmd/find.py", line 170, in find
|
||||||
specs = set(spack.installed_db.query(**q_args))
|
specs = set(spack.installed_db.query(**q_args))
|
||||||
@ -1782,6 +1786,142 @@ This issue typically manifests with the error below:
|
|||||||
|
|
||||||
A nicer error message is TBD in future versions of Spack.
|
A nicer error message is TBD in future versions of Spack.
|
||||||
|
|
||||||
|
|
||||||
|
.. _spack-cray:
|
||||||
|
|
||||||
|
Spack on Cray
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
Spack differs slightly when used on a Cray system. The architecture spec
|
||||||
|
can differentiate between the front-end and back-end processor and operating system.
|
||||||
|
For example, on Edison at NERSC, the back-end target processor
|
||||||
|
is \"Ivy Bridge\", so you can specify to use the back-end this way:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack install zlib target=ivybridge
|
||||||
|
|
||||||
|
You can also use the operating system to build against the back-end:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack install zlib os=CNL10
|
||||||
|
|
||||||
|
Notice that the name includes both the operating system name and the major
|
||||||
|
version number concatenated together.
|
||||||
|
|
||||||
|
Alternatively, if you want to build something for the front-end,
|
||||||
|
you can specify the front-end target processor. The processor for a login node
|
||||||
|
on Edison is \"Sandy bridge\" so we specify on the command line like so:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack install zlib target=sandybridge
|
||||||
|
|
||||||
|
And the front-end operating system is:
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
spack install zlib os=SuSE11
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Cray compiler detection
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Spack can detect compilers using two methods. For the front-end, we treat
|
||||||
|
everything the same. The difference lies in back-end compiler detection.
|
||||||
|
Back-end compiler detection is made via the Tcl module avail command.
|
||||||
|
Once it detects the compiler it writes the appropriate PrgEnv and compiler
|
||||||
|
module name to compilers.yaml and sets the paths to each compiler with Cray\'s
|
||||||
|
compiler wrapper names (i.e. cc, CC, ftn). During build time, Spack will load
|
||||||
|
the correct PrgEnv and compiler module and will call appropriate wrapper.
|
||||||
|
|
||||||
|
The compilers.yaml config file will also differ. There is a
|
||||||
|
modules section that is filled with the compiler\'s Programming Environment
|
||||||
|
and module name. On other systems, this field is empty []::
|
||||||
|
|
||||||
|
...
|
||||||
|
- compiler:
|
||||||
|
modules:
|
||||||
|
- PrgEnv-intel
|
||||||
|
- intel/15.0.109
|
||||||
|
...
|
||||||
|
|
||||||
|
As mentioned earlier, the compiler paths will look different on a Cray system.
|
||||||
|
Since most compilers are invoked using cc, CC and ftn, the paths for each
|
||||||
|
compiler are replaced with their respective Cray compiler wrapper names::
|
||||||
|
|
||||||
|
...
|
||||||
|
paths:
|
||||||
|
cc: cc
|
||||||
|
cxx: CC
|
||||||
|
f77: ftn
|
||||||
|
fc: ftn
|
||||||
|
...
|
||||||
|
|
||||||
|
As opposed to an explicit path to the compiler executable. This allows Spack
|
||||||
|
to call the Cray compiler wrappers during build time.
|
||||||
|
|
||||||
|
For more on compiler configuration, check out :ref:`compiler-config`.
|
||||||
|
|
||||||
|
Setting defaults and using Cray modules
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you want to use default compilers for each PrgEnv and also be able
|
||||||
|
to load cray external modules, you will need to set up a packages.yaml.
|
||||||
|
|
||||||
|
Here\'s an example of an external configuration for cray modules:
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
packages:
|
||||||
|
mpi:
|
||||||
|
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
|
||||||
|
|
||||||
|
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
|
||||||
|
environment variables, libraries, etc, that are brought into the environment
|
||||||
|
via module load.
|
||||||
|
|
||||||
|
You can set the default compiler that Spack can use for each compiler type.
|
||||||
|
If you want to use the Cray defaults, then set them under *all:* in packages.yaml.
|
||||||
|
In the compiler field, set the compiler specs in your order of preference.
|
||||||
|
Whenever you build with that compiler type, Spack will concretize to that version.
|
||||||
|
|
||||||
|
Here is an example of a full packages.yaml used at NERSC
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
|
||||||
|
packages:
|
||||||
|
mpi:
|
||||||
|
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
|
||||||
|
buildable: False
|
||||||
|
netcdf:
|
||||||
|
modules:
|
||||||
|
netcdf@4.3.3.1%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-netcdf
|
||||||
|
netcdf@4.3.3.1%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge: cray-netcdf
|
||||||
|
buildable: False
|
||||||
|
hdf5:
|
||||||
|
modules:
|
||||||
|
hdf5@1.8.14%gcc@5.2.0 arch=cray_xc-CNL10-ivybridge: cray-hdf5
|
||||||
|
hdf5@1.8.14%intel@16.0.0.109 arch=cray_xc-CNL10-ivybridge: cray-hdf5
|
||||||
|
buildable: False
|
||||||
|
all:
|
||||||
|
compiler: [gcc@5.2.0, intel@16.0.0.109]
|
||||||
|
|
||||||
|
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
|
||||||
|
for each compiler type for each cray modules. This ensures that for each
|
||||||
|
compiler on our system we can use that external module.
|
||||||
|
|
||||||
|
|
||||||
|
For more on external packages check out the section :ref:`sec-external_packages`.
|
||||||
|
|
||||||
Getting Help
|
Getting Help
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
@ -53,6 +53,7 @@ in the first directory it finds to which it has write access. Add
|
|||||||
more elements to the list to indicate where your own site's temporary
|
more elements to the list to indicate where your own site's temporary
|
||||||
directory is.
|
directory is.
|
||||||
|
|
||||||
|
.. _sec-external_packages:
|
||||||
|
|
||||||
External Packages
|
External Packages
|
||||||
----------------------------
|
----------------------------
|
||||||
@ -70,20 +71,20 @@ directory. Here's an example of an external configuration:
|
|||||||
packages:
|
packages:
|
||||||
openmpi:
|
openmpi:
|
||||||
paths:
|
paths:
|
||||||
openmpi@1.4.3%gcc@4.4.7 arch=chaos_5_x86_64_ib: /opt/openmpi-1.4.3
|
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
|
||||||
openmpi@1.4.3%gcc@4.4.7 arch=chaos_5_x86_64_ib+debug: /opt/openmpi-1.4.3-debug
|
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
|
||||||
openmpi@1.6.5%intel@10.1 arch=chaos_5_x86_64_ib: /opt/openmpi-1.6.5-intel
|
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
|
||||||
|
|
||||||
This example lists three installations of OpenMPI, one built with gcc,
|
This example lists three installations of OpenMPI, one built with gcc,
|
||||||
one built with gcc and debug information, and another built with Intel.
|
one built with gcc and debug information, and another built with Intel.
|
||||||
If Spack is asked to build a package that uses one of these MPIs as a
|
If Spack is asked to build a package that uses one of these MPIs as a
|
||||||
dependency, it will use the the pre-installed OpenMPI in
|
dependency, it will use the the pre-installed OpenMPI in
|
||||||
the given directory.
|
the given directory. Packages.yaml can also be used to specify modules
|
||||||
|
|
||||||
Each ``packages.yaml`` begins with a ``packages:`` token, followed
|
Each ``packages.yaml`` begins with a ``packages:`` token, followed
|
||||||
by a list of package names. To specify externals, add a ``paths``
|
by a list of package names. To specify externals, add a ``paths`` or ``modules``
|
||||||
token under the package name, which lists externals in a
|
token under the package name, which lists externals in a
|
||||||
``spec : /path`` format. Each spec should be as
|
``spec: /path`` or ``spec: module-name`` format. Each spec should be as
|
||||||
well-defined as reasonably possible. If a
|
well-defined as reasonably possible. If a
|
||||||
package lacks a spec component, such as missing a compiler or
|
package lacks a spec component, such as missing a compiler or
|
||||||
package version, then Spack will guess the missing component based
|
package version, then Spack will guess the missing component based
|
||||||
@ -108,9 +109,9 @@ be:
|
|||||||
packages:
|
packages:
|
||||||
openmpi:
|
openmpi:
|
||||||
paths:
|
paths:
|
||||||
openmpi@1.4.3%gcc@4.4.7 arch=chaos_5_x86_64_ib: /opt/openmpi-1.4.3
|
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7: /opt/openmpi-1.4.3
|
||||||
openmpi@1.4.3%gcc@4.4.7 arch=chaos_5_x86_64_ib+debug: /opt/openmpi-1.4.3-debug
|
openmpi@1.4.3%gcc@4.4.7 arch=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug
|
||||||
openmpi@1.6.5%intel@10.1 arch=chaos_5_x86_64_ib: /opt/openmpi-1.6.5-intel
|
openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel
|
||||||
buildable: False
|
buildable: False
|
||||||
|
|
||||||
The addition of the ``buildable`` flag tells Spack that it should never build
|
The addition of the ``buildable`` flag tells Spack that it should never build
|
||||||
@ -118,6 +119,9 @@ its own version of OpenMPI, and it will instead always rely on a pre-built
|
|||||||
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
|
OpenMPI. Similar to ``paths``, ``buildable`` is specified as a property under
|
||||||
a package name.
|
a package name.
|
||||||
|
|
||||||
|
If an external module is specified as not buildable, then Spack will load the
|
||||||
|
external module into the build environment which can be used for linking.
|
||||||
|
|
||||||
The ``buildable`` does not need to be paired with external packages.
|
The ``buildable`` does not need to be paired with external packages.
|
||||||
It could also be used alone to forbid packages that may be
|
It could also be used alone to forbid packages that may be
|
||||||
buggy or otherwise undesirable.
|
buggy or otherwise undesirable.
|
||||||
@ -181,7 +185,6 @@ concretization rules. A provider lists a value that packages may
|
|||||||
dependency.
|
dependency.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Profiling
|
Profiling
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@ -36,10 +36,11 @@ Creating & editing packages
|
|||||||
``spack create``
|
``spack create``
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The ``spack create`` command generates a boilerplate package template
|
The ``spack create`` command creates a directory with the package name and
|
||||||
from a URL. The URL should point to a tarball or other software
|
generates a ``package.py`` file with a boilerplate package template from a URL.
|
||||||
archive. In most cases, ``spack create`` plus a few modifications is
|
The URL should point to a tarball or other software archive. In most cases,
|
||||||
all you need to get a package working.
|
``spack create`` plus a few modifications is all you need to get a package
|
||||||
|
working.
|
||||||
|
|
||||||
Here's an example:
|
Here's an example:
|
||||||
|
|
||||||
@ -47,12 +48,16 @@ Here's an example:
|
|||||||
|
|
||||||
$ spack create http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz
|
$ spack create http://www.cmake.org/files/v2.8/cmake-2.8.12.1.tar.gz
|
||||||
|
|
||||||
Spack examines the tarball URL and tries to figure out the name of the
|
Spack examines the tarball URL and tries to figure out the name of the package
|
||||||
package to be created. It also tries to determine what version strings
|
to be created. Once the name is determined a directory in the appropriate
|
||||||
look like for this package. Using this information, it will try to
|
repository is created with that name. Spack prefers, but does not require, that
|
||||||
find *additional* versions by spidering the package's webpage. If it
|
names be lower case so the directory name will be lower case when ``spack
|
||||||
finds multiple versions, Spack prompts you to tell it how many
|
create`` generates it. In cases where it is desired to have mixed case or upper
|
||||||
versions you want to download and checksum:
|
case simply rename the directory. Spack also tries to determine what version
|
||||||
|
strings look like for this package. Using this information, it will try to find
|
||||||
|
*additional* versions by spidering the package's webpage. If it finds multiple
|
||||||
|
versions, Spack prompts you to tell it how many versions you want to download
|
||||||
|
and checksum:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
@ -297,9 +302,10 @@ directories or files (like patches) that it needs to build.
|
|||||||
Package Names
|
Package Names
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Packages are named after the directory containing ``package.py``. So,
|
Packages are named after the directory containing ``package.py``. It is
|
||||||
``libelf``'s ``package.py`` lives in a directory called ``libelf``.
|
preferred, but not required, that the directory, and thus the package name, are
|
||||||
The ``package.py`` file defines a class called ``Libelf``, which
|
lower case. So, ``libelf``'s ``package.py`` lives in a directory called
|
||||||
|
``libelf``. The ``package.py`` file defines a class called ``Libelf``, which
|
||||||
extends Spack's ``Package`` class. for example, here is
|
extends Spack's ``Package`` class. for example, here is
|
||||||
``$SPACK_ROOT/var/spack/repos/builtin/packages/libelf/package.py``:
|
``$SPACK_ROOT/var/spack/repos/builtin/packages/libelf/package.py``:
|
||||||
|
|
||||||
@ -377,6 +383,8 @@ add a line like this in the package class:
|
|||||||
version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
|
version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
|
||||||
...
|
...
|
||||||
|
|
||||||
|
Versions should be listed with the newest version first.
|
||||||
|
|
||||||
Version URLs
|
Version URLs
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -385,8 +393,21 @@ in the package. For example, Spack is smart enough to download
|
|||||||
version ``8.2.1.`` of the ``Foo`` package above from
|
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 spack *cannot* extrapolate the URL from the ``url`` field, or if
|
If spack *cannot* extrapolate the URL from the ``url`` field by
|
||||||
the package doesn't have a ``url`` field, you can add a URL explicitly
|
default, you can write your own URL generation algorithm in place of
|
||||||
|
the ``url`` declaration. For example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
class Foo(Package):
|
||||||
|
def url_for_version(self, version):
|
||||||
|
return 'http://example.com/version_%s/foo-%s.tar.gz' \
|
||||||
|
% (version, version)
|
||||||
|
version('8.2.1', '4136d7b4c04df68b686570afa26988ac')
|
||||||
|
...
|
||||||
|
|
||||||
|
If a URL cannot be derived systematically, you can add an explicit URL
|
||||||
for a particular version:
|
for a particular version:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
@ -547,7 +568,7 @@ The package author is responsible for coming up with a sensible name
|
|||||||
for each version to be fetched from a repository. For example, if
|
for each version to be fetched from a repository. For example, if
|
||||||
you're fetching from a tag like ``v1.0``, you might call that ``1.0``.
|
you're fetching from a tag like ``v1.0``, you might call that ``1.0``.
|
||||||
If you're fetching a nameless git commit or an older subversion
|
If you're fetching a nameless git commit or an older subversion
|
||||||
revision, you might give the commit an intuitive name, like ``dev``
|
revision, you might give the commit an intuitive name, like ``develop``
|
||||||
for a development version, or ``some-fancy-new-feature`` if you want
|
for a development version, or ``some-fancy-new-feature`` if you want
|
||||||
to be more specific.
|
to be more specific.
|
||||||
|
|
||||||
@ -557,6 +578,17 @@ branches move forward over time and you aren't guaranteed to get the
|
|||||||
same thing every time you fetch a particular version. Life isn't
|
same thing every time you fetch a particular version. Life isn't
|
||||||
always simple, though, so this is not strictly enforced.
|
always simple, though, so this is not strictly enforced.
|
||||||
|
|
||||||
|
When fetching from from the branch corresponding to the development version
|
||||||
|
(often called ``master``,``trunk`` or ``dev``), it is recommended to
|
||||||
|
call this version ``develop``. Spack has special treatment for this version so
|
||||||
|
that ``@develop`` will satisfy dependencies like
|
||||||
|
``depends_on(abc, when="@x.y.z:")``. In other words, ``@develop`` is
|
||||||
|
greater than any other version. The rationale is that certain features or
|
||||||
|
options first appear in the development branch. Therefore if a package author
|
||||||
|
wants to keep the package on the bleeding edge and provide support for new
|
||||||
|
features, it is advised to use ``develop`` for such a version which will
|
||||||
|
greatly simplify writing dependencies and version-related conditionals.
|
||||||
|
|
||||||
In some future release, Spack may support extrapolating repository
|
In some future release, Spack may support extrapolating repository
|
||||||
versions as it does for tarball URLs, but currently this is not
|
versions as it does for tarball URLs, but currently this is not
|
||||||
supported.
|
supported.
|
||||||
@ -582,7 +614,7 @@ Default branch
|
|||||||
|
|
||||||
class Example(Package):
|
class Example(Package):
|
||||||
...
|
...
|
||||||
version('dev', git='https://github.com/example-project/example.git')
|
version('develop', git='https://github.com/example-project/example.git')
|
||||||
|
|
||||||
This is not recommended, as the contents of the default branch
|
This is not recommended, as the contents of the default branch
|
||||||
change over time.
|
change over time.
|
||||||
@ -655,7 +687,7 @@ Default
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
version('hg-head', hg='https://jay.grs.rwth-aachen.de/hg/example')
|
version('develop', hg='https://jay.grs.rwth-aachen.de/hg/example')
|
||||||
|
|
||||||
Note that this is not recommended; try to fetch a particular
|
Note that this is not recommended; try to fetch a particular
|
||||||
revision instead.
|
revision instead.
|
||||||
@ -687,7 +719,7 @@ Fetching the head
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
version('svn-head', svn='https://outreach.scidac.gov/svn/libmonitor/trunk')
|
version('develop', svn='https://outreach.scidac.gov/svn/libmonitor/trunk')
|
||||||
|
|
||||||
This is not recommended, as the head will move forward over time.
|
This is not recommended, as the head will move forward over time.
|
||||||
|
|
||||||
@ -697,7 +729,7 @@ Fetching a revision
|
|||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
version('svn-head', svn='https://outreach.scidac.gov/svn/libmonitor/trunk',
|
version('develop', svn='https://outreach.scidac.gov/svn/libmonitor/trunk',
|
||||||
revision=128)
|
revision=128)
|
||||||
|
|
||||||
Subversion branches are handled as part of the directory structure, so
|
Subversion branches are handled as part of the directory structure, so
|
||||||
@ -1346,6 +1378,19 @@ Now, the ``py-numpy`` package can be used as an argument to ``spack
|
|||||||
activate``. When it is activated, all the files in its prefix will be
|
activate``. When it is activated, all the files in its prefix will be
|
||||||
symbolically linked into the prefix of the python package.
|
symbolically linked into the prefix of the python package.
|
||||||
|
|
||||||
|
Many packages produce Python extensions for *some* variants, but not
|
||||||
|
others: they should extend ``python`` only if the apropriate
|
||||||
|
variant(s) are selected. This may be accomplished with conditional
|
||||||
|
``extends()`` declarations:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
class FooLib(Package):
|
||||||
|
variant('python', default=True, description= \
|
||||||
|
'Build the Python extension Module')
|
||||||
|
extends('python', when='+python')
|
||||||
|
...
|
||||||
|
|
||||||
Sometimes, certain files in one package will conflict with those in
|
Sometimes, certain files in one package will conflict with those in
|
||||||
another, which means they cannot both be activated (symlinked) at the
|
another, which means they cannot both be activated (symlinked) at the
|
||||||
same time. In this case, you can tell Spack to ignore those files
|
same time. In this case, you can tell Spack to ignore those files
|
||||||
@ -1632,21 +1677,21 @@ the user runs ``spack install`` and the time the ``install()`` method
|
|||||||
is called. The concretized version of the spec above might look like
|
is called. The concretized version of the spec above might look like
|
||||||
this::
|
this::
|
||||||
|
|
||||||
mpileaks@2.3%gcc@4.7.3 arch=linux-ppc64
|
mpileaks@2.3%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^callpath@1.0%gcc@4.7.3+debug arch=linux-ppc64
|
^callpath@1.0%gcc@4.7.3+debug arch=linux-debian7-x86_64
|
||||||
^dyninst@8.1.2%gcc@4.7.3 arch=linux-ppc64
|
^dyninst@8.1.2%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^libdwarf@20130729%gcc@4.7.3 arch=linux-ppc64
|
^libdwarf@20130729%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^libelf@0.8.11%gcc@4.7.3 arch=linux-ppc64
|
^libelf@0.8.11%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^mpich@3.0.4%gcc@4.7.3 arch=linux-ppc64
|
^mpich@3.0.4%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
|
|
||||||
.. graphviz::
|
.. graphviz::
|
||||||
|
|
||||||
digraph {
|
digraph {
|
||||||
"mpileaks@2.3\n%gcc@4.7.3\n arch=linux-ppc64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-ppc64"
|
"mpileaks@2.3\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-debian7-x86_64"
|
||||||
"mpileaks@2.3\n%gcc@4.7.3\n arch=linux-ppc64" -> "callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-ppc64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-ppc64"
|
"mpileaks@2.3\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-debian7-x86_64" -> "mpich@3.0.4\n%gcc@4.7.3\n arch=linux-debian7-x86_64"
|
||||||
"callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-ppc64" -> "dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-ppc64"
|
"callpath@1.0\n%gcc@4.7.3+debug\n arch=linux-debian7-x86_64" -> "dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64"
|
||||||
"dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-ppc64" -> "libdwarf@20130729\n%gcc@4.7.3\n arch=linux-ppc64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-ppc64"
|
"dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libdwarf@20130729\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-debian7-x86_64"
|
||||||
"dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-ppc64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-ppc64"
|
"dyninst@8.1.2\n%gcc@4.7.3\n arch=linux-debian7-x86_64" -> "libelf@0.8.11\n%gcc@4.7.3\n arch=linux-debian7-x86_64"
|
||||||
}
|
}
|
||||||
|
|
||||||
Here, all versions, compilers, and platforms are filled in, and there
|
Here, all versions, compilers, and platforms are filled in, and there
|
||||||
@ -1675,9 +1720,9 @@ running ``spack spec``. For example:
|
|||||||
^libdwarf
|
^libdwarf
|
||||||
^libelf
|
^libelf
|
||||||
|
|
||||||
dyninst@8.0.1%gcc@4.7.3 arch=linux-ppc64
|
dyninst@8.0.1%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^libdwarf@20130729%gcc@4.7.3 arch=linux-ppc64
|
^libdwarf@20130729%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
^libelf@0.8.13%gcc@4.7.3 arch=linux-ppc64
|
^libelf@0.8.13%gcc@4.7.3 arch=linux-debian7-x86_64
|
||||||
|
|
||||||
This is useful when you want to know exactly what Spack will do when
|
This is useful when you want to know exactly what Spack will do when
|
||||||
you ask for a particular spec.
|
you ask for a particular spec.
|
||||||
@ -1851,7 +1896,7 @@ discover its dependencies.
|
|||||||
|
|
||||||
If you want to see the environment that a package will build with, or
|
If you want to see the environment that a package will build with, or
|
||||||
if you want to run commands in that environment to test them out, you
|
if you want to run commands in that environment to test them out, you
|
||||||
can use the :ref:```spack env`` <spack-env>` command, documented
|
can use the :ref:`spack env <spack-env>` command, documented
|
||||||
below.
|
below.
|
||||||
|
|
||||||
.. _compiler-wrappers:
|
.. _compiler-wrappers:
|
||||||
@ -2182,12 +2227,12 @@ example:
|
|||||||
def install(self, prefix):
|
def install(self, prefix):
|
||||||
# Do default install
|
# Do default install
|
||||||
|
|
||||||
@when('arch=chaos_5_x86_64_ib')
|
@when('arch=linux-debian7-x86_64')
|
||||||
def install(self, prefix):
|
def install(self, prefix):
|
||||||
# This will be executed instead of the default install if
|
# This will be executed instead of the default install if
|
||||||
# the package's sys_type() is chaos_5_x86_64_ib.
|
# the package's sys_type() is chaos_5_x86_64_ib.
|
||||||
|
|
||||||
@when('arch=bgqos_0")
|
@when('arch=linux-debian7-x86_64")
|
||||||
def install(self, prefix):
|
def install(self, prefix):
|
||||||
# This will be executed if the package's sys_type is bgqos_0
|
# This will be executed if the package's sys_type is bgqos_0
|
||||||
|
|
||||||
@ -2315,7 +2360,7 @@ build system.
|
|||||||
|
|
||||||
.. _sanity-checks:
|
.. _sanity-checks:
|
||||||
|
|
||||||
Sanity checking an intallation
|
Sanity checking an installation
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
By default, Spack assumes that a build has failed if nothing is
|
By default, Spack assumes that a build has failed if nothing is
|
||||||
@ -2531,6 +2576,59 @@ File functions
|
|||||||
|
|
||||||
.. _package-lifecycle:
|
.. _package-lifecycle:
|
||||||
|
|
||||||
|
Coding Style Guidelines
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
The following guidelines are provided, in the interests of making
|
||||||
|
Spack packages work in a consistent manner:
|
||||||
|
|
||||||
|
|
||||||
|
Variant Names
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Spack packages with variants similar to already-existing Spack
|
||||||
|
packages should use the same name for their variants. Standard
|
||||||
|
variant names are:
|
||||||
|
|
||||||
|
======= ======== ========================
|
||||||
|
Name Default Description
|
||||||
|
------- -------- ------------------------
|
||||||
|
shared True Build shared libraries
|
||||||
|
static Build static libraries
|
||||||
|
mpi Use MPI
|
||||||
|
python Build Python extension
|
||||||
|
------- -------- ------------------------
|
||||||
|
|
||||||
|
If specified in this table, the corresponding default should be used
|
||||||
|
when declaring a variant.
|
||||||
|
|
||||||
|
|
||||||
|
Version Lists
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Spack packges 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``::
|
||||||
|
|
||||||
|
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
|
Packaging workflow commands
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
@ -2782,11 +2880,11 @@ build it:
|
|||||||
$ spack stage libelf
|
$ spack stage libelf
|
||||||
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
|
==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz
|
||||||
######################################################################## 100.0%
|
######################################################################## 100.0%
|
||||||
==> Staging archive: /Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-ppc64/libelf-0.8.13.tar.gz
|
==> Staging archive: /Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64/libelf-0.8.13.tar.gz
|
||||||
==> Created stage in /Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-ppc64.
|
==> Created stage in /Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64.
|
||||||
$ spack cd libelf
|
$ spack cd libelf
|
||||||
$ pwd
|
$ pwd
|
||||||
/Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-ppc64/libelf-0.8.13
|
/Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-debian7-x86_64/libelf-0.8.13
|
||||||
|
|
||||||
``spack cd`` here changed he current working directory to the
|
``spack cd`` here changed he current working directory to the
|
||||||
directory containing the expanded ``libelf`` source code. There are a
|
directory containing the expanded ``libelf`` source code. There are a
|
||||||
@ -2851,3 +2949,109 @@ might write:
|
|||||||
DWARF_PREFIX = $(spack location -i libdwarf)
|
DWARF_PREFIX = $(spack location -i libdwarf)
|
||||||
CXXFLAGS += -I$DWARF_PREFIX/include
|
CXXFLAGS += -I$DWARF_PREFIX/include
|
||||||
CXXFLAGS += -L$DWARF_PREFIX/lib
|
CXXFLAGS += -L$DWARF_PREFIX/lib
|
||||||
|
|
||||||
|
Build System Configuration Support
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Imagine a developer creating a CMake-based (or Autotools) project in a local
|
||||||
|
directory, which depends on libraries A-Z. Once Spack has installed
|
||||||
|
those dependencies, one would like to run ``cmake`` with appropriate
|
||||||
|
command line and environment so CMake can find them. The ``spack
|
||||||
|
setup`` command does this conveniently, producing a CMake
|
||||||
|
configuration that is essentially the same as how Spack *would have*
|
||||||
|
configured the project. This can be demonstrated with a usage
|
||||||
|
example:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
cd myproject
|
||||||
|
spack setup myproject@local
|
||||||
|
mkdir build; cd build
|
||||||
|
../spconfig.py ..
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
* Spack must have ``myproject/package.py`` in its repository for
|
||||||
|
this to work.
|
||||||
|
* ``spack setup`` produces the executable script ``spconfig.py`` in
|
||||||
|
the local directory, and also creates the module file for the
|
||||||
|
package. ``spconfig.py`` is normally run from the user's
|
||||||
|
out-of-source build directory.
|
||||||
|
* The version number given to ``spack setup`` is arbitrary, just
|
||||||
|
like ``spack diy``. ``myproject/package.py`` does not need to
|
||||||
|
have any valid downloadable versions listed (typical when a
|
||||||
|
project is new).
|
||||||
|
* spconfig.py produces a CMake configuration that *does not* use the
|
||||||
|
Spack wrappers. Any resulting binaries *will not* use RPATH,
|
||||||
|
unless the user has enabled it. This is recommended for
|
||||||
|
development purposes, not production.
|
||||||
|
* ``spconfig.py`` is human readable, and can serve as a developer
|
||||||
|
reference of what dependencies are being used.
|
||||||
|
* ``make install`` installs the package into the Spack repository,
|
||||||
|
where it may be used by other Spack packages.
|
||||||
|
* CMake-generated makefiles re-run CMake in some circumstances. Use
|
||||||
|
of ``spconfig.py`` breaks this behavior, requiring the developer
|
||||||
|
to manually re-run ``spconfig.py`` when a ``CMakeLists.txt`` file
|
||||||
|
has changed.
|
||||||
|
|
||||||
|
CMakePackage
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
In order ot enable ``spack setup`` functionality, the author of
|
||||||
|
``myproject/package.py`` must subclass from ``CMakePackage`` instead
|
||||||
|
of the standard ``Package`` superclass. Because CMake is
|
||||||
|
standardized, the packager does not need to tell Spack how to run
|
||||||
|
``cmake; make; make install``. Instead the packager only needs to
|
||||||
|
create (optional) methods ``configure_args()`` and ``configure_env()``, which
|
||||||
|
provide the arguments (as a list) and extra environment variables (as
|
||||||
|
a dict) to provide to the ``cmake`` command. Usually, these will
|
||||||
|
translate variant flags into CMake definitions. For example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def configure_args(self):
|
||||||
|
spec = self.spec
|
||||||
|
return [
|
||||||
|
'-DUSE_EVERYTRACE=%s' % ('YES' if '+everytrace' in spec else 'NO'),
|
||||||
|
'-DBUILD_PYTHON=%s' % ('YES' if '+python' in spec else 'NO'),
|
||||||
|
'-DBUILD_GRIDGEN=%s' % ('YES' if '+gridgen' in spec else 'NO'),
|
||||||
|
'-DBUILD_COUPLER=%s' % ('YES' if '+coupler' in spec else 'NO'),
|
||||||
|
'-DUSE_PISM=%s' % ('YES' if '+pism' in spec else 'NO')]
|
||||||
|
|
||||||
|
If needed, a packager may also override methods defined in
|
||||||
|
``StagedPackage`` (see below).
|
||||||
|
|
||||||
|
|
||||||
|
StagedPackage
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
``CMakePackage`` is implemented by subclassing the ``StagedPackage``
|
||||||
|
superclass, which breaks down the standard ``Package.install()``
|
||||||
|
method into several sub-stages: ``setup``, ``configure``, ``build``
|
||||||
|
and ``install``. Details:
|
||||||
|
|
||||||
|
* Instead of implementing the standard ``install()`` method, package
|
||||||
|
authors implement the methods for the sub-stages
|
||||||
|
``install_setup()``, ``install_configure()``,
|
||||||
|
``install_build()``, and ``install_install()``.
|
||||||
|
|
||||||
|
* The ``spack install`` command runs the sub-stages ``configure``,
|
||||||
|
``build`` and ``install`` in order. (The ``setup`` stage is
|
||||||
|
not run by default; see below).
|
||||||
|
* The ``spack setup`` command runs the sub-stages ``setup``
|
||||||
|
and a dummy install (to create the module file).
|
||||||
|
* The sub-stage install methods take no arguments (other than
|
||||||
|
``self``). The arguments ``spec`` and ``prefix`` to the standard
|
||||||
|
``install()`` method may be accessed via ``self.spec`` and
|
||||||
|
``self.prefix``.
|
||||||
|
|
||||||
|
GNU Autotools
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
The ``setup`` functionality is currently only available for
|
||||||
|
CMake-based packages. Extending this functionality to GNU
|
||||||
|
Autotools-based packages would be easy (and should be done by a
|
||||||
|
developer who actively uses Autotools). Packages that use
|
||||||
|
non-standard build systems can gain ``setup`` functionality by
|
||||||
|
subclassing ``StagedPackage`` directly.
|
||||||
|
@ -176,8 +176,10 @@
|
|||||||
# TODO: it's not clear where all the stuff that needs to be included in packages
|
# TODO: it's not clear where all the stuff that needs to be included in packages
|
||||||
# should live. This file is overloaded for spack core vs. for packages.
|
# should live. This file is overloaded for spack core vs. for packages.
|
||||||
#
|
#
|
||||||
__all__ = ['Package', 'Version', 'when', 'ver']
|
__all__ = ['Package', 'StagedPackage', 'CMakePackage', \
|
||||||
|
'Version', 'when', 'ver']
|
||||||
from spack.package import Package, ExtensionConflictError
|
from spack.package import Package, ExtensionConflictError
|
||||||
|
from spack.package import StagedPackage, CMakePackage
|
||||||
from spack.version import Version, ver
|
from spack.version import Version, ver
|
||||||
from spack.multimethod import when
|
from spack.multimethod import when
|
||||||
|
|
||||||
|
@ -224,9 +224,12 @@ def set_compiler_environment_variables(pkg, env):
|
|||||||
return env
|
return env
|
||||||
|
|
||||||
|
|
||||||
def set_build_environment_variables(pkg, env):
|
def set_build_environment_variables(pkg, env, dirty=False):
|
||||||
"""
|
"""
|
||||||
This ensures a clean install environment when we build packages
|
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
|
# Add spack build environment path with compiler wrappers first in
|
||||||
# the path. We add both spack.env_path, which includes default
|
# the path. We add both spack.env_path, which includes default
|
||||||
@ -262,12 +265,26 @@ def set_build_environment_variables(pkg, env):
|
|||||||
# Install root prefix
|
# Install root prefix
|
||||||
env.set(SPACK_INSTALL, spack.install_path)
|
env.set(SPACK_INSTALL, spack.install_path)
|
||||||
|
|
||||||
# Remove these vars from the environment during build because they
|
# Stuff in here sanitizes the build environemnt to eliminate
|
||||||
# can affect how some packages find libraries. We want to make
|
# anything the user has set that may interfere.
|
||||||
# sure that builds never pull in unintended external dependencies.
|
if not dirty:
|
||||||
env.unset('LD_LIBRARY_PATH')
|
# Remove these vars from the environment during build because they
|
||||||
env.unset('LD_RUN_PATH')
|
# can affect how some packages find libraries. We want to make
|
||||||
env.unset('DYLD_LIBRARY_PATH')
|
# sure that builds never pull in unintended external dependencies.
|
||||||
|
env.unset('LD_LIBRARY_PATH')
|
||||||
|
env.unset('LIBRARY_PATH')
|
||||||
|
env.unset('CPATH')
|
||||||
|
env.unset('LD_RUN_PATH')
|
||||||
|
env.unset('DYLD_LIBRARY_PATH')
|
||||||
|
|
||||||
|
# Remove any macports installs from the PATH. The macports ld can
|
||||||
|
# cause conflicts with the built-in linker on el capitan. Solves
|
||||||
|
# assembler issues, e.g.:
|
||||||
|
# suffix or operands invalid for `movq'"
|
||||||
|
path = get_path('PATH')
|
||||||
|
for p in path:
|
||||||
|
if '/macports/' in p:
|
||||||
|
env.remove_path('PATH', p)
|
||||||
|
|
||||||
# Add bin directories from dependencies to the PATH for the build.
|
# Add bin directories from dependencies to the PATH for the build.
|
||||||
bin_dirs = reversed(
|
bin_dirs = reversed(
|
||||||
@ -405,7 +422,7 @@ def load_external_modules(pkg):
|
|||||||
load_module(dep.external_module)
|
load_module(dep.external_module)
|
||||||
|
|
||||||
|
|
||||||
def setup_package(pkg):
|
def setup_package(pkg, dirty=False):
|
||||||
"""Execute all environment setup routines."""
|
"""Execute all environment setup routines."""
|
||||||
spack_env = EnvironmentModifications()
|
spack_env = EnvironmentModifications()
|
||||||
run_env = EnvironmentModifications()
|
run_env = EnvironmentModifications()
|
||||||
@ -428,7 +445,7 @@ def setup_package(pkg):
|
|||||||
s.package.spec = s
|
s.package.spec = s
|
||||||
|
|
||||||
set_compiler_environment_variables(pkg, spack_env)
|
set_compiler_environment_variables(pkg, spack_env)
|
||||||
set_build_environment_variables(pkg, spack_env)
|
set_build_environment_variables(pkg, spack_env, dirty)
|
||||||
load_external_modules(pkg)
|
load_external_modules(pkg)
|
||||||
# traverse in postorder so package can use vars from its dependencies
|
# traverse in postorder so package can use vars from its dependencies
|
||||||
spec = pkg.spec
|
spec = pkg.spec
|
||||||
@ -457,7 +474,7 @@ def setup_package(pkg):
|
|||||||
spack_env.apply_modifications()
|
spack_env.apply_modifications()
|
||||||
|
|
||||||
|
|
||||||
def fork(pkg, function):
|
def fork(pkg, function, dirty=False):
|
||||||
"""Fork a child process to do part of a spack build.
|
"""Fork a child process to do part of a spack build.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
@ -465,6 +482,7 @@ def fork(pkg, function):
|
|||||||
pkg -- pkg whose environemnt we should set up the
|
pkg -- pkg whose environemnt we should set up the
|
||||||
forked process for.
|
forked process for.
|
||||||
function -- arg-less function to run in the child process.
|
function -- arg-less function to run in the child process.
|
||||||
|
dirty -- If True, do NOT clean the environment before building.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
def child_fun():
|
def child_fun():
|
||||||
@ -488,7 +506,7 @@ def child_fun():
|
|||||||
|
|
||||||
if pid == 0:
|
if pid == 0:
|
||||||
# Give the child process the package's build environment.
|
# Give the child process the package's build environment.
|
||||||
setup_package(pkg)
|
setup_package(pkg, dirty=dirty)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# call the forked function.
|
# call the forked function.
|
||||||
|
@ -325,7 +325,7 @@ def create(parser, args):
|
|||||||
# Figure out a name and repo for the package.
|
# Figure out a name and repo for the package.
|
||||||
name, version = guess_name_and_version(url, args)
|
name, version = guess_name_and_version(url, args)
|
||||||
spec = Spec(name)
|
spec = Spec(name)
|
||||||
name = spec.name # factors out namespace, if any
|
name = spec.name.lower() # factors out namespace, if any
|
||||||
repo = find_repository(spec, args)
|
repo = find_repository(spec, args)
|
||||||
|
|
||||||
tty.msg("This looks like a URL for %s version %s" % (name, version))
|
tty.msg("This looks like a URL for %s version %s" % (name, version))
|
||||||
|
@ -50,7 +50,7 @@ def setup_parser(subparser):
|
|||||||
help="Do not display verbose build output while installing.")
|
help="Do not display verbose build output while installing.")
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'spec', nargs=argparse.REMAINDER,
|
'spec', nargs=argparse.REMAINDER,
|
||||||
help="specs to use for install. Must contain package AND verison.")
|
help="specs to use for install. Must contain package AND version.")
|
||||||
|
|
||||||
|
|
||||||
def diy(self, args):
|
def diy(self, args):
|
||||||
|
@ -53,8 +53,15 @@ def setup_parser(subparser):
|
|||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'--fake', action='store_true', dest='fake',
|
'--fake', action='store_true', dest='fake',
|
||||||
help="Fake install. Just remove the prefix and touch a fake file in it.")
|
help="Fake install. Just remove the prefix and touch a fake file in it.")
|
||||||
|
subparser.add_argument(
|
||||||
|
'--dirty', action='store_true', dest='dirty',
|
||||||
|
help="Install a package *without* cleaning the environment.")
|
||||||
subparser.add_argument(
|
subparser.add_argument(
|
||||||
'packages', nargs=argparse.REMAINDER, help="specs of packages to install")
|
'packages', nargs=argparse.REMAINDER, help="specs of packages to install")
|
||||||
|
subparser.add_argument(
|
||||||
|
'--run-tests', action='store_true', dest='run_tests',
|
||||||
|
help="Run tests during installation of a package.")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def install(parser, args):
|
def install(parser, args):
|
||||||
@ -77,6 +84,8 @@ def install(parser, args):
|
|||||||
keep_stage=args.keep_stage,
|
keep_stage=args.keep_stage,
|
||||||
ignore_deps=args.ignore_deps,
|
ignore_deps=args.ignore_deps,
|
||||||
make_jobs=args.jobs,
|
make_jobs=args.jobs,
|
||||||
|
run_tests=args.run_tests,
|
||||||
verbose=args.verbose,
|
verbose=args.verbose,
|
||||||
fake=args.fake,
|
fake=args.fake,
|
||||||
|
dirty=args.dirty,
|
||||||
explicit=True)
|
explicit=True)
|
||||||
|
91
lib/spack/spack/cmd/setup.py
Normal file
91
lib/spack/spack/cmd/setup.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
##############################################################################
|
||||||
|
# Copyright (c) 2016, Lawrence Livermore National Security, LLC.
|
||||||
|
# Produced at the Lawrence Livermore National Laboratory.
|
||||||
|
#
|
||||||
|
# This file is part of Spack.
|
||||||
|
# Written by Elizabeth Fischer
|
||||||
|
# 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 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 sys
|
||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
|
import spack
|
||||||
|
import spack.cmd
|
||||||
|
from spack.cmd.edit import edit_package
|
||||||
|
from spack.stage import DIYStage
|
||||||
|
|
||||||
|
description = "Create a configuration script and module, but don't build."
|
||||||
|
|
||||||
|
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.")
|
||||||
|
subparser.add_argument(
|
||||||
|
'-v', '--verbose', action='store_true', dest='verbose',
|
||||||
|
help="Display verbose build output while installing.")
|
||||||
|
subparser.add_argument(
|
||||||
|
'spec', nargs=argparse.REMAINDER,
|
||||||
|
help="specs to use for install. Must contain package AND verison.")
|
||||||
|
|
||||||
|
|
||||||
|
def setup(self, args):
|
||||||
|
if not args.spec:
|
||||||
|
tty.die("spack setup requires a package spec argument.")
|
||||||
|
|
||||||
|
specs = spack.cmd.parse_specs(args.spec)
|
||||||
|
if len(specs) > 1:
|
||||||
|
tty.die("spack setup only takes one spec.")
|
||||||
|
|
||||||
|
# Take a write lock before checking for existence.
|
||||||
|
with spack.installed_db.write_transaction():
|
||||||
|
spec = specs[0]
|
||||||
|
if not spack.repo.exists(spec.name):
|
||||||
|
tty.warn("No such package: %s" % spec.name)
|
||||||
|
create = tty.get_yes_or_no("Create this package?", default=False)
|
||||||
|
if not create:
|
||||||
|
tty.msg("Exiting without creating.")
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
tty.msg("Running 'spack edit -f %s'" % spec.name)
|
||||||
|
edit_package(spec.name, spack.repo.first_repo(), None, True)
|
||||||
|
return
|
||||||
|
|
||||||
|
if not spec.versions.concrete:
|
||||||
|
tty.die("spack setup spec must have a single, concrete version. Did you forget a package version number?")
|
||||||
|
|
||||||
|
spec.concretize()
|
||||||
|
package = spack.repo.get(spec)
|
||||||
|
|
||||||
|
# It's OK if the package is already installed.
|
||||||
|
|
||||||
|
# Forces the build to run out of the current directory.
|
||||||
|
package.stage = DIYStage(os.getcwd())
|
||||||
|
|
||||||
|
# TODO: make this an argument, not a global.
|
||||||
|
spack.do_checksum = False
|
||||||
|
|
||||||
|
package.do_install(
|
||||||
|
keep_prefix=True, # Don't remove install directory, even if you think you should
|
||||||
|
ignore_deps=args.ignore_deps,
|
||||||
|
verbose=args.verbose,
|
||||||
|
keep_stage=True, # don't remove source dir for SETUP.
|
||||||
|
install_phases = set(['setup', 'provenance']))
|
@ -166,7 +166,11 @@ def prefer_key(v):
|
|||||||
valid_versions.sort(key=prefer_key, reverse=True)
|
valid_versions.sort(key=prefer_key, reverse=True)
|
||||||
|
|
||||||
if valid_versions:
|
if valid_versions:
|
||||||
spec.versions = ver([valid_versions[0]])
|
# Disregard @develop and take the next valid version
|
||||||
|
if ver(valid_versions[0]) == ver('develop') and len(valid_versions) > 1:
|
||||||
|
spec.versions = ver([valid_versions[1]])
|
||||||
|
else:
|
||||||
|
spec.versions = ver([valid_versions[0]])
|
||||||
else:
|
else:
|
||||||
# We don't know of any SAFE versions that match the given
|
# We don't know of any SAFE versions that match the given
|
||||||
# spec. Grab the spec's versions and grab the highest
|
# spec. Grab the spec's versions and grab the highest
|
||||||
|
@ -307,9 +307,6 @@ def archive(self, destination):
|
|||||||
if not self.archive_file:
|
if not self.archive_file:
|
||||||
raise NoArchiveFileError("Cannot call archive() before fetching.")
|
raise NoArchiveFileError("Cannot call archive() before fetching.")
|
||||||
|
|
||||||
if not extension(destination) == extension(self.archive_file):
|
|
||||||
raise ValueError("Cannot archive without matching extensions.")
|
|
||||||
|
|
||||||
shutil.copy(self.archive_file, destination)
|
shutil.copy(self.archive_file, destination)
|
||||||
|
|
||||||
@_needs_stage
|
@_needs_stage
|
||||||
|
@ -37,6 +37,8 @@
|
|||||||
import re
|
import re
|
||||||
import textwrap
|
import textwrap
|
||||||
import time
|
import time
|
||||||
|
import glob
|
||||||
|
import string
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
import spack
|
import spack
|
||||||
@ -50,6 +52,8 @@
|
|||||||
import spack.repository
|
import spack.repository
|
||||||
import spack.url
|
import spack.url
|
||||||
import spack.util.web
|
import spack.util.web
|
||||||
|
|
||||||
|
from urlparse import urlparse
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
from llnl.util.filesystem import *
|
from llnl.util.filesystem import *
|
||||||
from llnl.util.lang import *
|
from llnl.util.lang import *
|
||||||
@ -58,9 +62,11 @@
|
|||||||
from spack.stage import Stage, ResourceStage, StageComposite
|
from spack.stage import Stage, ResourceStage, StageComposite
|
||||||
from spack.util.compression import allowed_archive
|
from spack.util.compression import allowed_archive
|
||||||
from spack.util.environment import dump_environment
|
from spack.util.environment import dump_environment
|
||||||
from spack.util.executable import ProcessError
|
from spack.util.executable import ProcessError, Executable, which
|
||||||
from spack.version import *
|
from spack.version import *
|
||||||
|
from spack import directory_layout
|
||||||
from urlparse import urlparse
|
from urlparse import urlparse
|
||||||
|
|
||||||
"""Allowed URL schemes for spack packages."""
|
"""Allowed URL schemes for spack packages."""
|
||||||
_ALLOWED_URL_SCHEMES = ["http", "https", "ftp", "file", "git"]
|
_ALLOWED_URL_SCHEMES = ["http", "https", "ftp", "file", "git"]
|
||||||
|
|
||||||
@ -305,6 +311,8 @@ class SomePackage(Package):
|
|||||||
parallel = True
|
parallel = True
|
||||||
"""# jobs to use for parallel make. If set, overrides default of ncpus."""
|
"""# jobs to use for parallel make. If set, overrides default of ncpus."""
|
||||||
make_jobs = None
|
make_jobs = None
|
||||||
|
"""By default do not run tests within package's install()"""
|
||||||
|
run_tests = 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
|
extendable = False
|
||||||
"""List of prefix-relative file paths (or a single path). If these do
|
"""List of prefix-relative file paths (or a single path). If these do
|
||||||
@ -867,6 +875,7 @@ def _resource_stage(self, resource):
|
|||||||
resource_stage_folder = '-'.join(pieces)
|
resource_stage_folder = '-'.join(pieces)
|
||||||
return resource_stage_folder
|
return resource_stage_folder
|
||||||
|
|
||||||
|
install_phases = set(['configure', 'build', 'install', 'provenance'])
|
||||||
def do_install(self,
|
def do_install(self,
|
||||||
keep_prefix=False,
|
keep_prefix=False,
|
||||||
keep_stage=False,
|
keep_stage=False,
|
||||||
@ -874,8 +883,11 @@ def do_install(self,
|
|||||||
skip_patch=False,
|
skip_patch=False,
|
||||||
verbose=False,
|
verbose=False,
|
||||||
make_jobs=None,
|
make_jobs=None,
|
||||||
|
run_tests=False,
|
||||||
fake=False,
|
fake=False,
|
||||||
explicit=False):
|
explicit=False,
|
||||||
|
dirty=False,
|
||||||
|
install_phases = install_phases):
|
||||||
"""Called by commands to install a package and its dependencies.
|
"""Called by commands to install a package and its dependencies.
|
||||||
|
|
||||||
Package implementations should override install() to describe
|
Package implementations should override install() to describe
|
||||||
@ -891,7 +903,9 @@ def do_install(self,
|
|||||||
fake -- Don't really build -- install fake stub files instead.
|
fake -- Don't really build -- install fake stub files instead.
|
||||||
skip_patch -- Skip patch stage of build if True.
|
skip_patch -- Skip patch stage of build if True.
|
||||||
verbose -- Display verbose build output (by default, suppresses it)
|
verbose -- Display verbose build output (by default, suppresses it)
|
||||||
|
dirty -- Don't clean the build environment before installing.
|
||||||
make_jobs -- Number of make jobs to use for install. Default is ncpus
|
make_jobs -- Number of make jobs to use for install. Default is ncpus
|
||||||
|
run_tests -- Runn tests within the package's install()
|
||||||
"""
|
"""
|
||||||
if not self.spec.concrete:
|
if not self.spec.concrete:
|
||||||
raise ValueError("Can only install concrete packages.")
|
raise ValueError("Can only install concrete packages.")
|
||||||
@ -903,7 +917,7 @@ def do_install(self,
|
|||||||
return
|
return
|
||||||
|
|
||||||
# Ensure package is not already installed
|
# Ensure package is not already installed
|
||||||
if spack.install_layout.check_installed(self.spec):
|
if 'install' in install_phases and spack.install_layout.check_installed(self.spec):
|
||||||
tty.msg("%s is already installed in %s" % (self.name, self.prefix))
|
tty.msg("%s is already installed in %s" % (self.name, self.prefix))
|
||||||
rec = spack.installed_db.get_record(self.spec)
|
rec = spack.installed_db.get_record(self.spec)
|
||||||
if (not rec.explicit) and explicit:
|
if (not rec.explicit) and explicit:
|
||||||
@ -922,7 +936,11 @@ def do_install(self,
|
|||||||
fake=fake,
|
fake=fake,
|
||||||
skip_patch=skip_patch,
|
skip_patch=skip_patch,
|
||||||
verbose=verbose,
|
verbose=verbose,
|
||||||
make_jobs=make_jobs)
|
make_jobs=make_jobs,
|
||||||
|
run_tests=run_tests)
|
||||||
|
|
||||||
|
# Set run_tests flag before starting build.
|
||||||
|
self.run_tests = run_tests
|
||||||
|
|
||||||
# Set parallelism before starting build.
|
# Set parallelism before starting build.
|
||||||
self.make_jobs = make_jobs
|
self.make_jobs = make_jobs
|
||||||
@ -942,6 +960,10 @@ def build_process():
|
|||||||
tty.msg("Building %s" % self.name)
|
tty.msg("Building %s" % self.name)
|
||||||
|
|
||||||
self.stage.keep = keep_stage
|
self.stage.keep = keep_stage
|
||||||
|
self.install_phases = install_phases
|
||||||
|
self.build_directory = join_path(self.stage.path, 'spack-build')
|
||||||
|
self.source_directory = self.stage.source_path
|
||||||
|
|
||||||
with self.stage:
|
with self.stage:
|
||||||
# Run the pre-install hook in the child process after
|
# Run the pre-install hook in the child process after
|
||||||
# the directory is created.
|
# the directory is created.
|
||||||
@ -973,19 +995,29 @@ def build_process():
|
|||||||
raise e
|
raise e
|
||||||
|
|
||||||
# Ensure that something was actually installed.
|
# Ensure that something was actually installed.
|
||||||
self.sanity_check_prefix()
|
if 'install' in self.install_phases:
|
||||||
|
self.sanity_check_prefix()
|
||||||
|
|
||||||
|
|
||||||
# Copy provenance into the install directory on success
|
# Copy provenance into the install directory on success
|
||||||
log_install_path = spack.install_layout.build_log_path(
|
if 'provenance' in self.install_phases:
|
||||||
self.spec)
|
log_install_path = spack.install_layout.build_log_path(
|
||||||
env_install_path = spack.install_layout.build_env_path(
|
self.spec)
|
||||||
self.spec)
|
env_install_path = spack.install_layout.build_env_path(
|
||||||
packages_dir = spack.install_layout.build_packages_path(
|
self.spec)
|
||||||
self.spec)
|
packages_dir = spack.install_layout.build_packages_path(
|
||||||
|
self.spec)
|
||||||
|
|
||||||
install(log_path, log_install_path)
|
# Remove first if we're overwriting another build
|
||||||
install(env_path, env_install_path)
|
# (can happen with spack setup)
|
||||||
dump_packages(self.spec, packages_dir)
|
try:
|
||||||
|
shutil.rmtree(packages_dir) # log_install_path and env_install_path are inside this
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
install(log_path, log_install_path)
|
||||||
|
install(env_path, env_install_path)
|
||||||
|
dump_packages(self.spec, packages_dir)
|
||||||
|
|
||||||
# Run post install hooks before build stage is removed.
|
# Run post install hooks before build stage is removed.
|
||||||
spack.hooks.post_install(self)
|
spack.hooks.post_install(self)
|
||||||
@ -1003,7 +1035,19 @@ def build_process():
|
|||||||
try:
|
try:
|
||||||
# Create the install prefix and fork the build process.
|
# Create the install prefix and fork the build process.
|
||||||
spack.install_layout.create_install_directory(self.spec)
|
spack.install_layout.create_install_directory(self.spec)
|
||||||
spack.build_environment.fork(self, build_process)
|
except directory_layout.InstallDirectoryAlreadyExistsError:
|
||||||
|
if 'install' in install_phases:
|
||||||
|
# Abort install if install directory exists.
|
||||||
|
# But do NOT remove it (you'd be overwriting someon else's stuff)
|
||||||
|
tty.warn("Keeping existing install prefix in place.")
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
# We're not installing anyway, so don't worry if someone
|
||||||
|
# else has already written in the install directory
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
spack.build_environment.fork(self, build_process, dirty=dirty)
|
||||||
except:
|
except:
|
||||||
# remove the install prefix if anything went wrong during install.
|
# remove the install prefix if anything went wrong during install.
|
||||||
if not keep_prefix:
|
if not keep_prefix:
|
||||||
@ -1013,7 +1057,7 @@ def build_process():
|
|||||||
"Spack will think this package is installed. " +
|
"Spack will think this package is installed. " +
|
||||||
"Manually remove this directory to fix:",
|
"Manually remove this directory to fix:",
|
||||||
self.prefix,
|
self.prefix,
|
||||||
wrap=True)
|
wrap=False)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# note: PARENT of the build process adds the new package to
|
# note: PARENT of the build process adds the new package to
|
||||||
@ -1485,6 +1529,152 @@ def _hms(seconds):
|
|||||||
parts.append("%.2fs" % s)
|
parts.append("%.2fs" % s)
|
||||||
return ' '.join(parts)
|
return ' '.join(parts)
|
||||||
|
|
||||||
|
class StagedPackage(Package):
|
||||||
|
"""A Package subclass where the install() is split up into stages."""
|
||||||
|
|
||||||
|
def install_setup(self):
|
||||||
|
"""Creates an spack_setup.py script to configure the package later if we like."""
|
||||||
|
raise InstallError("Package %s provides no install_setup() method!" % self.name)
|
||||||
|
|
||||||
|
def install_configure(self):
|
||||||
|
"""Runs the configure process."""
|
||||||
|
raise InstallError("Package %s provides no install_configure() method!" % self.name)
|
||||||
|
|
||||||
|
def install_build(self):
|
||||||
|
"""Runs the build process."""
|
||||||
|
raise InstallError("Package %s provides no install_build() method!" % self.name)
|
||||||
|
|
||||||
|
def install_install(self):
|
||||||
|
"""Runs the install process."""
|
||||||
|
raise InstallError("Package %s provides no install_install() method!" % self.name)
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
if 'setup' in self.install_phases:
|
||||||
|
self.install_setup()
|
||||||
|
|
||||||
|
if 'configure' in self.install_phases:
|
||||||
|
self.install_configure()
|
||||||
|
|
||||||
|
if 'build' in self.install_phases:
|
||||||
|
self.install_build()
|
||||||
|
|
||||||
|
if 'install' in self.install_phases:
|
||||||
|
self.install_install()
|
||||||
|
else:
|
||||||
|
# Create a dummy file so the build doesn't fail.
|
||||||
|
# That way, the module file will also be created.
|
||||||
|
with open(os.path.join(prefix, 'dummy'), 'w') as fout:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# stackoverflow.com/questions/12791997/how-do-you-do-a-simple-chmod-x-from-within-python
|
||||||
|
def make_executable(path):
|
||||||
|
mode = os.stat(path).st_mode
|
||||||
|
mode |= (mode & 0o444) >> 2 # copy R bits to X
|
||||||
|
os.chmod(path, mode)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class CMakePackage(StagedPackage):
|
||||||
|
|
||||||
|
def make_make(self):
|
||||||
|
import multiprocessing
|
||||||
|
# number of jobs spack will to build with.
|
||||||
|
jobs = multiprocessing.cpu_count()
|
||||||
|
if not self.parallel:
|
||||||
|
jobs = 1
|
||||||
|
elif self.make_jobs:
|
||||||
|
jobs = self.make_jobs
|
||||||
|
|
||||||
|
make = spack.build_environment.MakeExecutable('make', jobs)
|
||||||
|
return make
|
||||||
|
|
||||||
|
def configure_args(self):
|
||||||
|
"""Returns package-specific arguments to be provided to the configure command."""
|
||||||
|
return list()
|
||||||
|
|
||||||
|
def configure_env(self):
|
||||||
|
"""Returns package-specific environment under which the configure command should be run."""
|
||||||
|
return dict()
|
||||||
|
|
||||||
|
def spack_transitive_include_path(self):
|
||||||
|
return ';'.join(
|
||||||
|
os.path.join(dep, 'include')
|
||||||
|
for dep in os.environ['SPACK_DEPENDENCIES'].split(os.pathsep)
|
||||||
|
)
|
||||||
|
|
||||||
|
def install_setup(self):
|
||||||
|
cmd = [str(which('cmake'))] + \
|
||||||
|
spack.build_environment.get_std_cmake_args(self) + \
|
||||||
|
['-DCMAKE_INSTALL_PREFIX=%s' % os.environ['SPACK_PREFIX'],
|
||||||
|
'-DCMAKE_C_COMPILER=%s' % os.environ['SPACK_CC'],
|
||||||
|
'-DCMAKE_CXX_COMPILER=%s' % os.environ['SPACK_CXX'],
|
||||||
|
'-DCMAKE_Fortran_COMPILER=%s' % os.environ['SPACK_FC']] + \
|
||||||
|
self.configure_args()
|
||||||
|
|
||||||
|
env = dict()
|
||||||
|
env['PATH'] = os.environ['PATH']
|
||||||
|
env['SPACK_TRANSITIVE_INCLUDE_PATH'] = self.spack_transitive_include_path()
|
||||||
|
env['CMAKE_PREFIX_PATH'] = os.environ['CMAKE_PREFIX_PATH']
|
||||||
|
|
||||||
|
setup_fname = 'spconfig.py'
|
||||||
|
with open(setup_fname, 'w') as fout:
|
||||||
|
fout.write(\
|
||||||
|
r"""#!%s
|
||||||
|
#
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
def cmdlist(str):
|
||||||
|
return list(x.strip().replace("'",'') for x in str.split('\n') if x)
|
||||||
|
env = dict(os.environ)
|
||||||
|
""" % sys.executable)
|
||||||
|
|
||||||
|
env_vars = sorted(list(env.keys()))
|
||||||
|
for name in env_vars:
|
||||||
|
val = env[name]
|
||||||
|
if string.find(name, 'PATH') < 0:
|
||||||
|
fout.write('env[%s] = %s\n' % (repr(name),repr(val)))
|
||||||
|
else:
|
||||||
|
if name == 'SPACK_TRANSITIVE_INCLUDE_PATH':
|
||||||
|
sep = ';'
|
||||||
|
else:
|
||||||
|
sep = ':'
|
||||||
|
|
||||||
|
fout.write('env[%s] = "%s".join(cmdlist("""\n' % (repr(name),sep))
|
||||||
|
for part in string.split(val, sep):
|
||||||
|
fout.write(' %s\n' % part)
|
||||||
|
fout.write('"""))\n')
|
||||||
|
|
||||||
|
fout.write("env['CMAKE_TRANSITIVE_INCLUDE_PATH'] = env['SPACK_TRANSITIVE_INCLUDE_PATH'] # Deprecated\n")
|
||||||
|
fout.write('\ncmd = cmdlist("""\n')
|
||||||
|
fout.write('%s\n' % cmd[0])
|
||||||
|
for arg in cmd[1:]:
|
||||||
|
fout.write(' %s\n' % arg)
|
||||||
|
fout.write('""") + sys.argv[1:]\n')
|
||||||
|
fout.write('\nproc = subprocess.Popen(cmd, env=env)\nproc.wait()\n')
|
||||||
|
make_executable(setup_fname)
|
||||||
|
|
||||||
|
|
||||||
|
def install_configure(self):
|
||||||
|
cmake = which('cmake')
|
||||||
|
with working_dir(self.build_directory, create=True):
|
||||||
|
os.environ.update(self.configure_env())
|
||||||
|
os.environ['SPACK_TRANSITIVE_INCLUDE_PATH'] = self.spack_transitive_include_path()
|
||||||
|
options = self.configure_args() + spack.build_environment.get_std_cmake_args(self)
|
||||||
|
cmake(self.source_directory, *options)
|
||||||
|
|
||||||
|
def install_build(self):
|
||||||
|
make = self.make_make()
|
||||||
|
with working_dir(self.build_directory, create=False):
|
||||||
|
make()
|
||||||
|
|
||||||
|
def install_install(self):
|
||||||
|
make = self.make_make()
|
||||||
|
with working_dir(self.build_directory, create=False):
|
||||||
|
make('install')
|
||||||
|
|
||||||
|
|
||||||
class FetchError(spack.error.SpackError):
|
class FetchError(spack.error.SpackError):
|
||||||
"""Raised when something goes wrong during fetch."""
|
"""Raised when something goes wrong during fetch."""
|
||||||
|
@ -1,16 +1,23 @@
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
import platform
|
||||||
from spack.architecture import Platform, Target
|
from spack.architecture import Platform, Target
|
||||||
from spack.operating_systems.linux_distro import LinuxDistro
|
from spack.operating_systems.linux_distro import LinuxDistro
|
||||||
|
|
||||||
class Linux(Platform):
|
class Linux(Platform):
|
||||||
priority = 90
|
priority = 90
|
||||||
front_end = 'x86_64'
|
|
||||||
back_end = 'x86_64'
|
|
||||||
default = 'x86_64'
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Linux, self).__init__('linux')
|
super(Linux, self).__init__('linux')
|
||||||
self.add_target(self.default, Target(self.default))
|
self.add_target('x86_64', Target('x86_64'))
|
||||||
|
self.add_target('ppc64le', Target('ppc64le'))
|
||||||
|
|
||||||
|
self.default = platform.machine()
|
||||||
|
self.front_end = platform.machine()
|
||||||
|
self.back_end = platform.machine()
|
||||||
|
|
||||||
|
if self.default not in self.targets:
|
||||||
|
self.add_target(self.default, Target(self.default))
|
||||||
|
|
||||||
linux_dist = LinuxDistro()
|
linux_dist = LinuxDistro()
|
||||||
self.default_os = str(linux_dist)
|
self.default_os = str(linux_dist)
|
||||||
self.front_os = self.default_os
|
self.front_os = self.default_os
|
||||||
|
@ -82,15 +82,6 @@
|
|||||||
f77: None
|
f77: None
|
||||||
fc: None
|
fc: None
|
||||||
modules: 'None'
|
modules: 'None'
|
||||||
- compiler:
|
|
||||||
spec: clang@3.3
|
|
||||||
operating_system: redhat6
|
|
||||||
paths:
|
|
||||||
cc: /path/to/clang
|
|
||||||
cxx: /path/to/clang++
|
|
||||||
f77: None
|
|
||||||
fc: None
|
|
||||||
modules: 'None'
|
|
||||||
- compiler:
|
- compiler:
|
||||||
spec: clang@3.3
|
spec: clang@3.3
|
||||||
operating_system: yosemite
|
operating_system: yosemite
|
||||||
@ -118,15 +109,6 @@
|
|||||||
operating_system: SuSE11
|
operating_system: SuSE11
|
||||||
spec: gcc@4.5.0
|
spec: gcc@4.5.0
|
||||||
modules: 'None'
|
modules: 'None'
|
||||||
- compiler:
|
|
||||||
paths:
|
|
||||||
cc: /path/to/gcc
|
|
||||||
cxx: /path/to/g++
|
|
||||||
f77: /path/to/gfortran
|
|
||||||
fc: /path/to/gfortran
|
|
||||||
operating_system: redhat6
|
|
||||||
spec: gcc@4.5.0
|
|
||||||
modules: 'None'
|
|
||||||
- compiler:
|
- compiler:
|
||||||
paths:
|
paths:
|
||||||
cc: /path/to/gcc
|
cc: /path/to/gcc
|
||||||
|
@ -92,6 +92,9 @@ def test_two_segments(self):
|
|||||||
self.assert_ver_eq('1.0', '1.0')
|
self.assert_ver_eq('1.0', '1.0')
|
||||||
self.assert_ver_lt('1.0', '2.0')
|
self.assert_ver_lt('1.0', '2.0')
|
||||||
self.assert_ver_gt('2.0', '1.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):
|
def test_three_segments(self):
|
||||||
self.assert_ver_eq('2.0.1', '2.0.1')
|
self.assert_ver_eq('2.0.1', '2.0.1')
|
||||||
@ -389,3 +392,39 @@ def test_formatted_strings(self):
|
|||||||
self.assertEqual(v.dotted, '1.2.3')
|
self.assertEqual(v.dotted, '1.2.3')
|
||||||
self.assertEqual(v.dashed, '1-2-3')
|
self.assertEqual(v.dashed, '1-2-3')
|
||||||
self.assertEqual(v.underscored, '1_2_3')
|
self.assertEqual(v.underscored, '1_2_3')
|
||||||
|
|
||||||
|
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)
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
concrete
|
concrete
|
||||||
"""
|
"""
|
||||||
import re
|
import re
|
||||||
|
import numbers
|
||||||
from bisect import bisect_left
|
from bisect import bisect_left
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
@ -194,10 +195,24 @@ def __iter__(self):
|
|||||||
return iter(self.version)
|
return iter(self.version)
|
||||||
|
|
||||||
def __getitem__(self, idx):
|
def __getitem__(self, idx):
|
||||||
return tuple(self.version[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]:
|
||||||
|
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))
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.string
|
return 'Version(' + repr(self.string) + ')'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.string
|
return self.string
|
||||||
@ -221,6 +236,14 @@ def __lt__(self, other):
|
|||||||
if self.version == other.version:
|
if self.version == other.version:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
# dev is __gt__ than anything but itself.
|
||||||
|
if other.string == 'develop':
|
||||||
|
return True
|
||||||
|
|
||||||
|
# If lhs is dev then it can't be < than anything
|
||||||
|
if self.string == 'develop':
|
||||||
|
return False
|
||||||
|
|
||||||
for a, b in zip(self.version, other.version):
|
for a, b in zip(self.version, other.version):
|
||||||
if a == b:
|
if a == b:
|
||||||
continue
|
continue
|
||||||
|
@ -40,6 +40,7 @@ class R(Package):
|
|||||||
|
|
||||||
extendable = True
|
extendable = True
|
||||||
|
|
||||||
|
version('3.3.1', 'f50a659738b73036e2f5635adbd229c5')
|
||||||
version('3.3.0', '5a7506c8813432d1621c9725e86baf7a')
|
version('3.3.0', '5a7506c8813432d1621c9725e86baf7a')
|
||||||
version('3.2.3', '1ba3dac113efab69e706902810cc2970')
|
version('3.2.3', '1ba3dac113efab69e706902810cc2970')
|
||||||
version('3.2.2', '57cef5c2e210a5454da1979562a10e5b')
|
version('3.2.2', '57cef5c2e210a5454da1979562a10e5b')
|
||||||
@ -87,6 +88,29 @@ def install(self, spec, prefix):
|
|||||||
make()
|
make()
|
||||||
make('install')
|
make('install')
|
||||||
|
|
||||||
|
self.filter_compilers(spec, prefix)
|
||||||
|
|
||||||
|
def filter_compilers(self, spec, prefix):
|
||||||
|
"""Run after install to tell the configuration files and Makefiles
|
||||||
|
to use the compilers that Spack built the package with.
|
||||||
|
|
||||||
|
If this isn't done, they'll have CC and CXX set to Spack's generic
|
||||||
|
cc and c++. We want them to be bound to whatever compiler
|
||||||
|
they were built with."""
|
||||||
|
|
||||||
|
etcdir = join_path(prefix, 'rlib', 'R', 'etc')
|
||||||
|
|
||||||
|
kwargs = {'ignore_absent': True, 'backup': False, 'string': True}
|
||||||
|
|
||||||
|
filter_file(env['CC'], self.compiler.cc,
|
||||||
|
join_path(etcdir, 'Makeconf'), **kwargs)
|
||||||
|
filter_file(env['CXX'], self.compiler.cxx,
|
||||||
|
join_path(etcdir, 'Makeconf'), **kwargs)
|
||||||
|
filter_file(env['F77'], self.compiler.f77,
|
||||||
|
join_path(etcdir, 'Makeconf'), **kwargs)
|
||||||
|
filter_file(env['FC'], self.compiler.fc,
|
||||||
|
join_path(etcdir, 'Makeconf'), **kwargs)
|
||||||
|
|
||||||
# ========================================================================
|
# ========================================================================
|
||||||
# Set up environment to make install easy for R extensions.
|
# Set up environment to make install easy for R extensions.
|
||||||
# ========================================================================
|
# ========================================================================
|
||||||
|
@ -0,0 +1,24 @@
|
|||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 607d221..50426c3 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -389,3 +389,19 @@ target_link_libraries(bug_1323 arpack ${BLAS_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||||
|
add_test(bug_1323 Tests/bug_1323)
|
||||||
|
|
||||||
|
add_dependencies(check dnsimp_test bug_1315_single bug_1315_double bug_1323)
|
||||||
|
+
|
||||||
|
+############################
|
||||||
|
+# install
|
||||||
|
+############################
|
||||||
|
+# 'make install' to the correct location
|
||||||
|
+install(TARGETS arpack
|
||||||
|
+ ARCHIVE DESTINATION lib
|
||||||
|
+ LIBRARY DESTINATION lib
|
||||||
|
+ RUNTIME DESTINATION bin)
|
||||||
|
+
|
||||||
|
+if (MPI)
|
||||||
|
+ install(TARGETS parpack
|
||||||
|
+ ARCHIVE DESTINATION lib
|
||||||
|
+ LIBRARY DESTINATION lib
|
||||||
|
+ RUNTIME DESTINATION bin)
|
||||||
|
+endif ()
|
@ -27,7 +27,8 @@
|
|||||||
|
|
||||||
class ArpackNg(Package):
|
class ArpackNg(Package):
|
||||||
"""
|
"""
|
||||||
ARPACK-NG is a collection of Fortran77 subroutines designed to solve large scale eigenvalue problems.
|
ARPACK-NG is a collection of Fortran77 subroutines designed to solve large
|
||||||
|
scale eigenvalue problems.
|
||||||
|
|
||||||
Important Features:
|
Important Features:
|
||||||
|
|
||||||
@ -38,43 +39,76 @@ class ArpackNg(Package):
|
|||||||
Generalized Problems.
|
Generalized Problems.
|
||||||
* Routines for Banded Matrices - Standard or Generalized Problems.
|
* Routines for Banded Matrices - Standard or Generalized Problems.
|
||||||
* Routines for The Singular Value Decomposition.
|
* Routines for The Singular Value Decomposition.
|
||||||
* Example driver routines that may be used as templates to implement numerous
|
* Example driver routines that may be used as templates to implement
|
||||||
Shift-Invert strategies for all problem types, data types and precision.
|
numerous Shift-Invert strategies for all problem types, data types and
|
||||||
|
precision.
|
||||||
|
|
||||||
This project is a joint project between Debian, Octave and Scilab in order to
|
This project is a joint project between Debian, Octave and Scilab in order
|
||||||
provide a common and maintained version of arpack.
|
to provide a common and maintained version of arpack.
|
||||||
|
|
||||||
Indeed, no single release has been published by Rice university for the last
|
Indeed, no single release has been published by Rice university for the
|
||||||
few years and since many software (Octave, Scilab, R, Matlab...) forked it and
|
last few years and since many software (Octave, Scilab, R, Matlab...)
|
||||||
implemented their own modifications, arpack-ng aims to tackle this by providing
|
forked it and implemented their own modifications, arpack-ng aims to tackle
|
||||||
a common repository and maintained versions.
|
this by providing a common repository and maintained versions.
|
||||||
|
|
||||||
arpack-ng is replacing arpack almost everywhere.
|
arpack-ng is replacing arpack almost everywhere.
|
||||||
"""
|
"""
|
||||||
homepage = 'https://github.com/opencollab/arpack-ng'
|
homepage = 'https://github.com/opencollab/arpack-ng'
|
||||||
url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz'
|
url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz'
|
||||||
|
|
||||||
|
version('3.4.0', 'ae9ca13f2143a7ea280cb0e2fd4bfae4')
|
||||||
version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5')
|
version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5')
|
||||||
|
|
||||||
variant('shared', default=True, description='Enables the build of shared libraries')
|
variant('shared', default=True, description='Enables the build of shared libraries')
|
||||||
variant('mpi', default=False, description='Activates MPI support')
|
variant('mpi', default=False, description='Activates MPI support')
|
||||||
|
|
||||||
# The function pdlamch10 does not set the return variable. This is fixed upstream
|
# The function pdlamch10 does not set the return variable.
|
||||||
|
# This is fixed upstream
|
||||||
# see https://github.com/opencollab/arpack-ng/issues/34
|
# see https://github.com/opencollab/arpack-ng/issues/34
|
||||||
patch('pdlamch10.patch', when='@3.3:')
|
patch('pdlamch10.patch', when='@3.3.0')
|
||||||
|
|
||||||
|
patch('make_install.patch', when='@3.4.0')
|
||||||
|
patch('parpack_cmake.patch', when='@3.4.0')
|
||||||
|
|
||||||
depends_on('blas')
|
depends_on('blas')
|
||||||
depends_on('lapack')
|
depends_on('lapack')
|
||||||
depends_on('automake')
|
depends_on('automake', when='@3.3.0')
|
||||||
depends_on('autoconf')
|
depends_on('autoconf', when='@3.3.0')
|
||||||
depends_on('libtool@2.4.2:')
|
depends_on('libtool@2.4.2:', when='@3.3.0')
|
||||||
|
depends_on('cmake@2.8.6:', when='@3.4.0:')
|
||||||
|
|
||||||
depends_on('mpi', when='+mpi')
|
depends_on('mpi', when='+mpi')
|
||||||
|
|
||||||
|
@when('@3.4.0:')
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
|
||||||
|
options = ['-DEXAMPLES=ON']
|
||||||
|
options.extend(std_cmake_args)
|
||||||
|
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
|
||||||
|
|
||||||
|
# TODO:
|
||||||
|
# Arpack calls directly find_package(BLAS REQUIRED) and
|
||||||
|
# find_package(LAPACK REQUIRED). Make sure correct Blas/Lapack are
|
||||||
|
# picked up.
|
||||||
|
|
||||||
|
if '+mpi' in spec:
|
||||||
|
options.append('-DMPI=ON')
|
||||||
|
|
||||||
|
# TODO: -DINTERFACE64=ON
|
||||||
|
|
||||||
|
if '+shared' in spec:
|
||||||
|
options.append('-DBUILD_SHARED_LIBS=ON')
|
||||||
|
|
||||||
|
cmake('.', *options)
|
||||||
|
make()
|
||||||
|
# TODO: make test does not work
|
||||||
|
# make('test')
|
||||||
|
|
||||||
|
make('install')
|
||||||
|
|
||||||
|
@when('@3.3.0')
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# Apparently autotools are not bootstrapped
|
# Apparently autotools are not bootstrapped
|
||||||
# TODO: switch to use the CMake build in the next version
|
|
||||||
# rather than bootstrapping.
|
|
||||||
which('libtoolize')()
|
which('libtoolize')()
|
||||||
bootstrap = Executable('./bootstrap')
|
bootstrap = Executable('./bootstrap')
|
||||||
|
|
||||||
@ -83,7 +117,7 @@ def install(self, spec, prefix):
|
|||||||
if '+mpi' in spec:
|
if '+mpi' in spec:
|
||||||
options.extend([
|
options.extend([
|
||||||
'--enable-mpi',
|
'--enable-mpi',
|
||||||
'F77=mpif77' #FIXME: avoid hardcoding MPI wrapper names
|
'F77=%s' % spec['mpi'].mpif77
|
||||||
])
|
])
|
||||||
|
|
||||||
if '~shared' in spec:
|
if '~shared' in spec:
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||||
|
index 607d221..345b7fc 100644
|
||||||
|
--- a/CMakeLists.txt
|
||||||
|
+++ b/CMakeLists.txt
|
||||||
|
@@ -113,11 +113,12 @@ set_target_properties(arpack PROPERTIES OUTPUT_NAME arpack${LIBSUFFIX})
|
||||||
|
|
||||||
|
if (MPI)
|
||||||
|
# add_library(parpack SHARED
|
||||||
|
- add_library(parpack
|
||||||
|
+ add_library(parpack
|
||||||
|
${parpacksrc_STAT_SRCS}
|
||||||
|
${parpackutil_STAT_SRCS})
|
||||||
|
|
||||||
|
target_link_libraries(parpack ${MPI_Fortran_LIBRARIES})
|
||||||
|
+ target_link_libraries(parpack arpack)
|
||||||
|
set_target_properties(parpack PROPERTIES OUTPUT_NAME parpack${LIBSUFFIX})
|
||||||
|
endif ()
|
||||||
|
|
@ -31,6 +31,7 @@ class Cereal(Package):
|
|||||||
homepage = "http://uscilab.github.io/cereal/"
|
homepage = "http://uscilab.github.io/cereal/"
|
||||||
url = "https://github.com/USCiLab/cereal/archive/v1.1.2.tar.gz"
|
url = "https://github.com/USCiLab/cereal/archive/v1.1.2.tar.gz"
|
||||||
|
|
||||||
|
version('1.2.0', 'e372c9814696481dbdb7d500e1410d2b')
|
||||||
version('1.1.2', '34d4ad174acbff005c36d4d10e48cbb9')
|
version('1.1.2', '34d4ad174acbff005c36d4d10e48cbb9')
|
||||||
version('1.1.1', '0ceff308c38f37d5b5f6df3927451c27')
|
version('1.1.1', '0ceff308c38f37d5b5f6df3927451c27')
|
||||||
version('1.1.0', '9f2d5f72e935c54f4c6d23e954ce699f')
|
version('1.1.0', '9f2d5f72e935c54f4c6d23e954ce699f')
|
||||||
|
@ -23,7 +23,6 @@
|
|||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import os
|
import os
|
||||||
import glob
|
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
@ -35,9 +34,10 @@ class DocbookXml(Package):
|
|||||||
version('4.5', '03083e288e87a7e829e437358da7ef9e')
|
version('4.5', '03083e288e87a7e829e437358da7ef9e')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
cp = which('cp')
|
for item in os.listdir('.'):
|
||||||
|
src = os.path.abspath(item)
|
||||||
install_args = ['-a', '-t', prefix]
|
dst = os.path.join(prefix, item)
|
||||||
install_args.extend(glob.glob('*'))
|
if os.path.isdir(item):
|
||||||
|
install_tree(src, dst, symlinks=True)
|
||||||
cp(*install_args)
|
else:
|
||||||
|
install(src, dst)
|
||||||
|
46
var/spack/repos/builtin/packages/ibmisc/package.py
Normal file
46
var/spack/repos/builtin/packages/ibmisc/package.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
from spack import *
|
||||||
|
|
||||||
|
class Ibmisc(CMakePackage):
|
||||||
|
"""Misc. reusable utilities used by IceBin."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/citibeth/ibmisc"
|
||||||
|
url = "https://github.com/citibeth/ibmisc/tarball/123"
|
||||||
|
|
||||||
|
version('0.1.0', '12f2a32432a11db48e00217df18e59fa')
|
||||||
|
|
||||||
|
variant('everytrace', default=False, description='Report errors through Everytrace')
|
||||||
|
variant('proj', default=True, description='Compile utilities for PROJ.4 library')
|
||||||
|
variant('blitz', default=True, description='Compile utilities for Blitz library')
|
||||||
|
variant('netcdf', default=True, description='Compile utilities for NetCDF library')
|
||||||
|
variant('boost', default=True, description='Compile utilities for Boost library')
|
||||||
|
variant('udunits2', default=True, description='Compile utilities for UDUNITS2 library')
|
||||||
|
variant('googletest', default=True, description='Compile utilities for Google Test library')
|
||||||
|
variant('python', default=True, description='Compile utilities for use with Python/Cython')
|
||||||
|
|
||||||
|
extends('python')
|
||||||
|
|
||||||
|
depends_on('eigen')
|
||||||
|
depends_on('everytrace', when='+everytrace')
|
||||||
|
depends_on('proj', when='+proj')
|
||||||
|
depends_on('blitz', when='+blitz')
|
||||||
|
depends_on('netcdf-cxx4', when='+netcdf')
|
||||||
|
depends_on('udunits2', when='+udunits2')
|
||||||
|
depends_on('googletest', when='+googletest')
|
||||||
|
depends_on('py-cython', when='+python')
|
||||||
|
depends_on('py-numpy', when='+python')
|
||||||
|
depends_on('boost', when='+boost')
|
||||||
|
|
||||||
|
# Build dependencies
|
||||||
|
depends_on('cmake')
|
||||||
|
depends_on('doxygen')
|
||||||
|
|
||||||
|
def configure_args(self):
|
||||||
|
spec = self.spec
|
||||||
|
return [
|
||||||
|
'-DUSE_EVERYTRACE=%s' % ('YES' if '+everytrace' in spec else 'NO'),
|
||||||
|
'-DUSE_PROJ4=%s' % ('YES' if '+proj' in spec else 'NO'),
|
||||||
|
'-DUSE_BLITZ=%s' % ('YES' if '+blitz' in spec else 'NO'),
|
||||||
|
'-DUSE_NETCDF=%s' % ('YES' if '+netcdf' in spec else 'NO'),
|
||||||
|
'-DUSE_BOOST=%s' % ('YES' if '+boost' in spec else 'NO'),
|
||||||
|
'-DUSE_UDUNITS2=%s' % ('YES' if '+udunits2' in spec else 'NO'),
|
||||||
|
'-DUSE_GTEST=%s' % ('YES' if '+googletest' in spec else 'NO')]
|
@ -73,7 +73,7 @@ def install(self, spec, prefix):
|
|||||||
COMPONENTS=%s
|
COMPONENTS=%s
|
||||||
""" % (self.intel_prefix, self.global_license_file, self.intel_components))
|
""" % (self.intel_prefix, self.global_license_file, self.intel_components))
|
||||||
|
|
||||||
install_script = which("install.sh")
|
install_script = Executable("./install.sh")
|
||||||
install_script('--silent', silent_config_filename)
|
install_script('--silent', silent_config_filename)
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
##############################################################################
|
##############################################################################
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
class LibjsonC(Package):
|
class LibjsonC(Package):
|
||||||
""" A JSON implementation in C """
|
""" A JSON implementation in C """
|
||||||
homepage = "https://github.com/json-c/json-c/wiki"
|
homepage = "https://github.com/json-c/json-c/wiki"
|
||||||
@ -34,5 +35,5 @@ class LibjsonC(Package):
|
|||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure('--prefix=%s' % prefix)
|
configure('--prefix=%s' % prefix)
|
||||||
|
|
||||||
make()
|
make(parallel=False)
|
||||||
make("install")
|
make("install")
|
||||||
|
@ -140,11 +140,11 @@ def setup_environment(self, spack_env, run_env):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def lua_lib_dir(self):
|
def lua_lib_dir(self):
|
||||||
return os.path.join('lib', 'lua', '%d.%d' % self.version[:2])
|
return os.path.join('lib', 'lua', self.version.up_to(2))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def lua_share_dir(self):
|
def lua_share_dir(self):
|
||||||
return os.path.join('share', 'lua', '%d.%d' % self.version[:2])
|
return os.path.join('share', 'lua', self.version.up_to(2))
|
||||||
|
|
||||||
def setup_dependent_package(self, module, ext_spec):
|
def setup_dependent_package(self, module, ext_spec):
|
||||||
"""
|
"""
|
||||||
|
@ -31,11 +31,13 @@ class Mfem(Package):
|
|||||||
homepage = 'http://www.mfem.org'
|
homepage = 'http://www.mfem.org'
|
||||||
url = 'https://github.com/mfem/mfem'
|
url = 'https://github.com/mfem/mfem'
|
||||||
|
|
||||||
# version('3.1', git='https://github.com/mfem/mfem.git',
|
version('3.2', '2938c3deed4ec4f7fd5b5f5cfe656845282e86e2dcd477d292390058b7b94340',
|
||||||
# commit='dbae60fe32e071989b52efaaf59d7d0eb2a3b574')
|
url='http://goo.gl/Y9T75B', expand=False, preferred=True)
|
||||||
|
|
||||||
version('3.1', '841ea5cf58de6fae4de0f553b0e01ebaab9cd9c67fa821e8a715666ecf18fc57',
|
version('3.1', '841ea5cf58de6fae4de0f553b0e01ebaab9cd9c67fa821e8a715666ecf18fc57',
|
||||||
url='http://goo.gl/xrScXn', expand=False)
|
url='http://goo.gl/xrScXn', expand=False)
|
||||||
|
# version('3.1', git='https://github.com/mfem/mfem.git',
|
||||||
|
# commit='dbae60fe32e071989b52efaaf59d7d0eb2a3b574')
|
||||||
|
|
||||||
variant('metis', default=False, description='Activate support for metis')
|
variant('metis', default=False, description='Activate support for metis')
|
||||||
variant('hypre', default=False, description='Activate support for hypre')
|
variant('hypre', default=False, description='Activate support for hypre')
|
||||||
|
@ -1,119 +0,0 @@
|
|||||||
diff -Naur MUMPS_5.0.1/libseq/Makefile MUMPS_5.0.1.new/libseq/Makefile
|
|
||||||
--- MUMPS_5.0.1/libseq/Makefile 2015-07-23 19:08:32.000000000 +0200
|
|
||||||
+++ MUMPS_5.0.1.new/libseq/Makefile 2016-06-07 10:41:16.585179151 +0200
|
|
||||||
@@ -8,11 +8,15 @@
|
|
||||||
|
|
||||||
include ../Makefile.inc
|
|
||||||
|
|
||||||
-libmpiseq: libmpiseq$(PLAT)$(LIBEXT)
|
|
||||||
+libmpiseq: libmpiseq$(PLAT)$(LIBEXT) libmpiseq$(PLAT)$(SHLIBEXT)
|
|
||||||
|
|
||||||
libmpiseq$(PLAT)$(LIBEXT): mpi.o mpic.o elapse.o
|
|
||||||
$(AR)$@ mpi.o mpic.o elapse.o
|
|
||||||
$(RANLIB) $@
|
|
||||||
+
|
|
||||||
+libmpiseq$(PLAT)$(SHLIBEXT): mpi.o mpic.o elapse.o
|
|
||||||
+ $(FC) $(LDFLAGS) $^ -o libmpiseq$(PLAT)$(SHLIBEXT)
|
|
||||||
+
|
|
||||||
.f.o:
|
|
||||||
$(FC) $(OPTF) -c $*.f $(OUTF)$*.o
|
|
||||||
.c.o:
|
|
||||||
diff -Naur MUMPS_5.0.1/Makefile MUMPS_5.0.1.new/Makefile
|
|
||||||
--- MUMPS_5.0.1/Makefile 2015-07-23 19:08:29.000000000 +0200
|
|
||||||
+++ MUMPS_5.0.1.new/Makefile 2016-06-07 10:50:21.863281217 +0200
|
|
||||||
@@ -51,7 +51,7 @@
|
|
||||||
dexamples: d
|
|
||||||
(cd examples ; $(MAKE) d)
|
|
||||||
|
|
||||||
-requiredobj: Makefile.inc $(LIBSEQNEEDED) $(libdir)/libpord$(PLAT)$(LIBEXT)
|
|
||||||
+requiredobj: Makefile.inc $(LIBSEQNEEDED) $(libdir)/libpord$(PLAT)$(LIBEXT) $(libdir)/libpord$(PLAT)$(SHLIBEXT)
|
|
||||||
|
|
||||||
# dummy MPI library (sequential version)
|
|
||||||
|
|
||||||
@@ -62,16 +62,25 @@
|
|
||||||
$(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)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT) PLAT=$(PLAT) SHLIBEXT=$(SHLIBEXT); \
|
|
||||||
fi;
|
|
||||||
if [ "$(LPORDDIR)" != "" ] ; then \
|
|
||||||
cp $(LPORDDIR)/libpord$(LIBEXT) $@; \
|
|
||||||
fi;
|
|
||||||
|
|
||||||
+$(libdir)/libpord$(PLAT)$(SHLIBEXT):
|
|
||||||
+ if [ "$(LPORDDIR)" != "" ] ; then \
|
|
||||||
+ cd $(LPORDDIR); \
|
|
||||||
+ $(MAKE) CC="$(CC)" CFLAGS="$(OPTC)" AR="$(AR)" RANLIB="$(RANLIB)" LDFLAGS="$(LDFLAGS)" OUTC="$(OUTC)" LIBEXT=$(LIBEXT) PLAT=$(PLAT) SHLIBEXT=$(SHLIBEXT) libpord$(PLAT)$(SHLIBEXT); \
|
|
||||||
+ fi;
|
|
||||||
+ if [ "$(LPORDDIR)" != "" ] ; then \
|
|
||||||
+ cp $(LPORDDIR)/libpord$(PLAT)$(SHLIBEXT) $@; \
|
|
||||||
+ fi;
|
|
||||||
+
|
|
||||||
clean:
|
|
||||||
(cd src; $(MAKE) clean)
|
|
||||||
(cd examples; $(MAKE) clean)
|
|
||||||
- (cd $(libdir); $(RM) *$(PLAT)$(LIBEXT))
|
|
||||||
+ (cd $(libdir); $(RM) *$(PLAT)$(LIBEXT) *$(PLAT)$(SHLIBEXT))
|
|
||||||
(cd libseq; $(MAKE) clean)
|
|
||||||
if [ "$(LPORDDIR)" != "" ] ; then \
|
|
||||||
cd $(LPORDDIR); $(MAKE) realclean; \
|
|
||||||
diff -Naur MUMPS_5.0.1/PORD/lib/Makefile MUMPS_5.0.1.new/PORD/lib/Makefile
|
|
||||||
--- MUMPS_5.0.1/PORD/lib/Makefile 2015-07-23 19:08:29.000000000 +0200
|
|
||||||
+++ MUMPS_5.0.1.new/PORD/lib/Makefile 2016-06-07 10:49:48.889000958 +0200
|
|
||||||
@@ -13,7 +13,7 @@
|
|
||||||
|
|
||||||
OBJS = graph.o gbipart.o gbisect.o ddcreate.o ddbisect.o nestdiss.o \
|
|
||||||
multisector.o gelim.o bucket.o tree.o \
|
|
||||||
- symbfac.o interface.o sort.o minpriority.o
|
|
||||||
+ symbfac.o interface.o sort.o minpriority.o
|
|
||||||
|
|
||||||
# Note: numfac.c read.c mapping.c triangular.c matrix.c kernel.c
|
|
||||||
# were not direcly used by MUMPS and have been removed from the
|
|
||||||
@@ -24,12 +24,15 @@
|
|
||||||
.c.o:
|
|
||||||
$(CC) $(COPTIONS) -c $*.c $(OUTC)$*.o
|
|
||||||
|
|
||||||
-libpord$(LIBEXT):$(OBJS)
|
|
||||||
+libpord$(PLAT)$(LIBEXT):$(OBJS)
|
|
||||||
$(AR)$@ $(OBJS)
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
+libpord$(PLAT)$(SHLIBEXT): $(OBJS)
|
|
||||||
+ $(CC) $(LDFLAGS) $(OBJS) -o libpord$(PLAT)$(SHLIBEXT)
|
|
||||||
+
|
|
||||||
clean:
|
|
||||||
rm -f *.o
|
|
||||||
|
|
||||||
realclean:
|
|
||||||
- rm -f *.o libpord.a
|
|
||||||
+ rm -f *.o libpord$(PLAT)$(SHLIBEXT) libpord$(PLAT)$(LIBEXT)
|
|
||||||
diff -Naur MUMPS_5.0.1/src/Makefile MUMPS_5.0.1.new/src/Makefile
|
|
||||||
--- MUMPS_5.0.1/src/Makefile 2015-07-23 19:08:29.000000000 +0200
|
|
||||||
+++ MUMPS_5.0.1.new/src/Makefile 2016-06-07 10:40:52.534703722 +0200
|
|
||||||
@@ -24,7 +24,10 @@
|
|
||||||
include $(topdir)/Makefile.inc
|
|
||||||
|
|
||||||
mumps_lib: $(libdir)/libmumps_common$(PLAT)$(LIBEXT) \
|
|
||||||
- $(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT)
|
|
||||||
+ $(libdir)/libmumps_common$(PLAT)$(SHLIBEXT) \
|
|
||||||
+ $(libdir)/lib$(ARITH)mumps$(PLAT)$(LIBEXT) \
|
|
||||||
+ $(libdir)/lib$(ARITH)mumps$(PLAT)$(SHLIBEXT)
|
|
||||||
+
|
|
||||||
|
|
||||||
OBJS_COMMON_MOD = \
|
|
||||||
ana_omp_m.o\
|
|
||||||
@@ -162,6 +165,13 @@
|
|
||||||
$(AR)$@ $?
|
|
||||||
$(RANLIB) $@
|
|
||||||
|
|
||||||
+$(libdir)/libmumps_common$(PLAT)$(SHLIBEXT): $(OBJS_COMMON_MOD) $(OBJS_COMMON_OTHER)
|
|
||||||
+ $(FC) $(LDFLAGS) $^ -L$(libdir) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS) -o $(libdir)/libmumps_common$(PLAT)$(SHLIBEXT)
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+$(libdir)/lib$(ARITH)mumps$(PLAT)$(SHLIBEXT): $(OBJS_MOD) $(OBJS_OTHER)
|
|
||||||
+ $(FC) $(LDFLAGS) $^ -L$(libdir) -lmumps_common$(PLAT) $(LORDERINGS) $(LIBS) $(LIBBLAS) $(LIBOTHERS) -o $(libdir)/lib$(ARITH)mumps$(PLAT)$(SHLIBEXT)
|
|
||||||
+
|
|
||||||
# Dependencies between modules:
|
|
||||||
$(ARITH)mumps_load.o: $(ARITH)mumps_comm_buffer.o \
|
|
||||||
$(ARITH)mumps_struc_def.o \
|
|
@ -23,10 +23,7 @@
|
|||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from spack import *
|
from spack import *
|
||||||
import os
|
import os, sys, glob
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
class Mumps(Package):
|
class Mumps(Package):
|
||||||
"""MUMPS: a MUltifrontal Massively Parallel sparse direct Solver"""
|
"""MUMPS: a MUltifrontal Massively Parallel sparse direct Solver"""
|
||||||
@ -47,6 +44,7 @@ class Mumps(Package):
|
|||||||
variant('idx64', default=False, description='Use int64_t/integer*8 as default index type')
|
variant('idx64', default=False, description='Use int64_t/integer*8 as default index type')
|
||||||
variant('shared', default=True, description='Build shared libraries')
|
variant('shared', default=True, description='Build shared libraries')
|
||||||
|
|
||||||
|
|
||||||
depends_on('scotch + esmumps', when='~ptscotch+scotch')
|
depends_on('scotch + esmumps', when='~ptscotch+scotch')
|
||||||
depends_on('scotch + esmumps + mpi', when='+ptscotch')
|
depends_on('scotch + esmumps + mpi', when='+ptscotch')
|
||||||
depends_on('metis@5:', when='+metis')
|
depends_on('metis@5:', when='+metis')
|
||||||
@ -56,64 +54,49 @@ class Mumps(Package):
|
|||||||
depends_on('scalapack', when='+mpi')
|
depends_on('scalapack', when='+mpi')
|
||||||
depends_on('mpi', when='+mpi')
|
depends_on('mpi', when='+mpi')
|
||||||
|
|
||||||
patch('mumps-shared.patch', when='+shared')
|
|
||||||
|
|
||||||
# this function is not a patch function because in case scalapack
|
# this function is not a patch function because in case scalapack
|
||||||
# is needed it uses self.spec['scalapack'].fc_link set by the
|
# is needed it uses self.spec['scalapack'].fc_link set by the
|
||||||
# setup_dependent_environment in scalapck. This happen after patch
|
# setup_dependent_environment in scalapck. This happen after patch
|
||||||
# end before install
|
# end before install
|
||||||
# def patch(self):
|
# def patch(self):
|
||||||
def write_makefile_inc(self):
|
def write_makefile_inc(self):
|
||||||
if (('+parmetis' in self.spec or
|
if ('+parmetis' in self.spec or '+ptscotch' in self.spec) and '+mpi' not in self.spec:
|
||||||
'+ptscotch' in self.spec)) and '+mpi' not in self.spec:
|
raise RuntimeError('You cannot use the variants parmetis or ptscotch without mpi')
|
||||||
raise RuntimeError('You cannot use the variants parmetis or ptscotch without mpi') # NOQA: E501
|
|
||||||
|
|
||||||
makefile_conf = [
|
makefile_conf = ["LIBBLAS = -L%s -lblas" % self.spec['blas'].prefix.lib]
|
||||||
"LIBBLAS = -L%s -lblas" % self.spec['blas'].prefix.lib
|
|
||||||
]
|
|
||||||
|
|
||||||
orderings = ['-Dpord']
|
orderings = ['-Dpord']
|
||||||
|
|
||||||
if '+ptscotch' in self.spec or '+scotch' in self.spec:
|
if '+ptscotch' in self.spec or '+scotch' in self.spec:
|
||||||
join_lib = ' -l%s' % ('pt' if '+ptscotch' in self.spec else '')
|
join_lib = ' -l%s' % ('pt' if '+ptscotch' in self.spec else '')
|
||||||
makefile_conf.extend([
|
makefile_conf.extend(
|
||||||
"ISCOTCH = -I%s" % self.spec['scotch'].prefix.include,
|
["ISCOTCH = -I%s" % self.spec['scotch'].prefix.include,
|
||||||
"LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib,
|
"LSCOTCH = -L%s %s%s" % (self.spec['scotch'].prefix.lib,
|
||||||
join_lib,
|
join_lib,
|
||||||
join_lib.join(['esmumps',
|
join_lib.join(['esmumps', 'scotch', 'scotcherr']))])
|
||||||
'scotch',
|
|
||||||
'scotcherr']))
|
|
||||||
])
|
|
||||||
orderings.append('-Dscotch')
|
orderings.append('-Dscotch')
|
||||||
if '+ptscotch' in self.spec:
|
if '+ptscotch' in self.spec:
|
||||||
orderings.append('-Dptscotch')
|
orderings.append('-Dptscotch')
|
||||||
|
|
||||||
if '+parmetis' in self.spec and '+metis' in self.spec:
|
if '+parmetis' in self.spec and '+metis' in self.spec:
|
||||||
makefile_conf.extend([
|
libname = 'parmetis' if '+parmetis' in self.spec else 'metis'
|
||||||
"IMETIS = -I%s" % self.spec['parmetis'].prefix.include,
|
makefile_conf.extend(
|
||||||
"LMETIS = -L%s -l%s -L%s -l%s" % (
|
["IMETIS = -I%s" % self.spec['parmetis'].prefix.include,
|
||||||
self.spec['parmetis'].prefix.lib, 'parmetis',
|
"LMETIS = -L%s -l%s -L%s -l%s" % (self.spec['parmetis'].prefix.lib, 'parmetis',self.spec['metis'].prefix.lib, 'metis')])
|
||||||
self.spec['metis'].prefix.lib, 'metis')
|
|
||||||
])
|
|
||||||
|
|
||||||
orderings.append('-Dparmetis')
|
orderings.append('-Dparmetis')
|
||||||
elif '+metis' in self.spec:
|
elif '+metis' in self.spec:
|
||||||
makefile_conf.extend([
|
makefile_conf.extend(
|
||||||
"IMETIS = -I%s" % self.spec['metis'].prefix.include,
|
["IMETIS = -I%s" % self.spec['metis'].prefix.include,
|
||||||
"LMETIS = -L%s -l%s" % (self.spec['metis'].prefix.lib,
|
"LMETIS = -L%s -l%s" % (self.spec['metis'].prefix.lib, 'metis')])
|
||||||
'metis')
|
|
||||||
])
|
|
||||||
|
|
||||||
orderings.append('-Dmetis')
|
orderings.append('-Dmetis')
|
||||||
|
|
||||||
makefile_conf.append("ORDERINGSF = %s" % (' '.join(orderings)))
|
makefile_conf.append("ORDERINGSF = %s" % (' '.join(orderings)))
|
||||||
|
|
||||||
# when building shared libs need -fPIC, otherwise /usr/bin/ld:
|
# when building shared libs need -fPIC, otherwise
|
||||||
# graph.o: relocation R_X86_64_32 against `.rodata.str1.1' can
|
# /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
|
||||||
# not be used when making a shared object; recompile with
|
|
||||||
# -fPIC
|
|
||||||
fpic = '-fPIC' if '+shared' in self.spec else ''
|
fpic = '-fPIC' if '+shared' in self.spec else ''
|
||||||
|
|
||||||
# TODO: test this part, it needs a full blas, scalapack and
|
# TODO: test this part, it needs a full blas, scalapack and
|
||||||
# partitionning environment with 64bit integers
|
# partitionning environment with 64bit integers
|
||||||
if '+idx64' in self.spec:
|
if '+idx64' in self.spec:
|
||||||
@ -121,7 +104,7 @@ def write_makefile_inc(self):
|
|||||||
# the fortran compilation flags most probably are
|
# the fortran compilation flags most probably are
|
||||||
# working only for intel and gnu compilers this is
|
# working only for intel and gnu compilers this is
|
||||||
# perhaps something the compiler should provide
|
# 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: E501
|
['OPTF = %s -O -DALLOW_NON_INIT %s' % (fpic,'-fdefault-integer-8' if self.compiler.name == "gcc" else '-i8'),
|
||||||
'OPTL = %s -O ' % fpic,
|
'OPTL = %s -O ' % fpic,
|
||||||
'OPTC = %s -O -DINTSIZE64' % fpic])
|
'OPTC = %s -O -DINTSIZE64' % fpic])
|
||||||
else:
|
else:
|
||||||
@ -130,47 +113,49 @@ def write_makefile_inc(self):
|
|||||||
'OPTL = %s -O ' % fpic,
|
'OPTL = %s -O ' % fpic,
|
||||||
'OPTC = %s -O ' % fpic])
|
'OPTC = %s -O ' % fpic])
|
||||||
|
|
||||||
|
|
||||||
if '+mpi' in self.spec:
|
if '+mpi' in self.spec:
|
||||||
makefile_conf.extend(
|
makefile_conf.extend(
|
||||||
["CC = %s" % self.spec['mpi'].mpicc,
|
["CC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpicc'),
|
||||||
"FC = %s" % self.spec['mpi'].mpifc,
|
"FC = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'),
|
||||||
|
"FL = %s" % join_path(self.spec['mpi'].prefix.bin, 'mpif90'),
|
||||||
"SCALAP = %s" % self.spec['scalapack'].fc_link,
|
"SCALAP = %s" % self.spec['scalapack'].fc_link,
|
||||||
"MUMPS_TYPE = par"])
|
"MUMPS_TYPE = par"])
|
||||||
else:
|
else:
|
||||||
makefile_conf.extend(
|
makefile_conf.extend(
|
||||||
["CC = cc",
|
["CC = cc",
|
||||||
"FC = fc",
|
"FC = fc",
|
||||||
|
"FL = fc",
|
||||||
"MUMPS_TYPE = seq"])
|
"MUMPS_TYPE = seq"])
|
||||||
|
|
||||||
# TODO: change the value to the correct one according to the
|
# TODO: change the value to the correct one according to the
|
||||||
# compiler possible values are -DAdd_, -DAdd__ and/or -DUPPER
|
# compiler possible values are -DAdd_, -DAdd__ and/or -DUPPER
|
||||||
makefile_conf.extend([
|
makefile_conf.append("CDEFS = -DAdd_")
|
||||||
'CDEFS = -DAdd_',
|
|
||||||
'FL = $(FC)',
|
|
||||||
])
|
|
||||||
|
|
||||||
if '+shared' in self.spec:
|
if '+shared' in self.spec:
|
||||||
makefile_conf.append('SHLIBEXT = .%s' % dso_suffix)
|
|
||||||
if sys.platform == 'darwin':
|
if sys.platform == 'darwin':
|
||||||
makefile_conf.append(
|
# Building dylibs with mpif90 causes segfaults on 10.8 and 10.10. Use gfortran. (Homebrew)
|
||||||
'LDFLAGS = -dynamiclib -Wl,-install_name -Wl,{0}/$(notdir $@) {1}{0} -undefined dynamic_lookup'.format(prefix.lib, self.compiler.fc_rpath_arg) # NOQA: E501
|
makefile_conf.extend([
|
||||||
)
|
'LIBEXT=.dylib',
|
||||||
|
'AR=%s -dynamiclib -Wl,-install_name -Wl,%s/$(notdir $@) -undefined dynamic_lookup -o ' % (os.environ['FC'],prefix.lib),
|
||||||
|
'RANLIB=echo'
|
||||||
|
])
|
||||||
else:
|
else:
|
||||||
makefile_conf.append(
|
makefile_conf.extend([
|
||||||
'LDFLAGS = -shared {0}{1}'.format(
|
'LIBEXT=.so',
|
||||||
self.compiler.fc_rpath_arg,
|
'AR=$(FL) -shared -Wl,-soname -Wl,%s/$(notdir $@) -o' % prefix.lib,
|
||||||
prefix.lib)
|
'RANLIB=echo'
|
||||||
)
|
])
|
||||||
|
else:
|
||||||
|
makefile_conf.extend([
|
||||||
|
'LIBEXT = .a',
|
||||||
|
'AR = ar vr',
|
||||||
|
'RANLIB = ranlib'
|
||||||
|
])
|
||||||
|
|
||||||
makefile_conf.extend([
|
|
||||||
'LIBEXT = .a',
|
|
||||||
'AR = ar vr ',
|
|
||||||
'RANLIB = ranlib'
|
|
||||||
])
|
|
||||||
|
|
||||||
makefile_inc_template = \
|
makefile_inc_template = join_path(os.path.dirname(self.module.__file__),
|
||||||
join_path(os.path.dirname(self.module.__file__),
|
'Makefile.inc')
|
||||||
'Makefile.inc')
|
|
||||||
with open(makefile_inc_template, "r") as fh:
|
with open(makefile_inc_template, "r") as fh:
|
||||||
makefile_conf.extend(fh.read().split('\n'))
|
makefile_conf.extend(fh.read().split('\n'))
|
||||||
|
|
||||||
@ -179,53 +164,46 @@ def write_makefile_inc(self):
|
|||||||
makefile_inc = '\n'.join(makefile_conf)
|
makefile_inc = '\n'.join(makefile_conf)
|
||||||
fh.write(makefile_inc)
|
fh.write(makefile_inc)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
make_libs = []
|
make_libs = []
|
||||||
|
|
||||||
# the choice to compile ?examples is to have kind of a sanity
|
# the choice to compile ?examples is to have kind of a sanity
|
||||||
# check on the libraries generated.
|
# check on the libraries generated.
|
||||||
if '+float' in spec:
|
if '+float' in spec:
|
||||||
make_libs.append('s')
|
make_libs.append('sexamples')
|
||||||
if '+complex' in spec:
|
if '+complex' in spec:
|
||||||
make_libs.append('c')
|
make_libs.append('cexamples')
|
||||||
|
|
||||||
if '+double' in spec:
|
if '+double' in spec:
|
||||||
make_libs.append('d')
|
make_libs.append('dexamples')
|
||||||
if '+complex' in spec:
|
if '+complex' in spec:
|
||||||
make_libs.append('z')
|
make_libs.append('zexamples')
|
||||||
|
|
||||||
self.write_makefile_inc()
|
self.write_makefile_inc()
|
||||||
|
|
||||||
make('mumps_lib', parallel=False)
|
# Build fails in parallel
|
||||||
make(*make_libs)
|
make(*make_libs, parallel=False)
|
||||||
|
|
||||||
install_tree('lib', prefix.lib)
|
install_tree('lib', prefix.lib)
|
||||||
install_tree('include', prefix.include)
|
install_tree('include', prefix.include)
|
||||||
|
|
||||||
if '~mpi' in spec:
|
if '~mpi' in spec:
|
||||||
install('libseq/libmpiseq.a', prefix.lib)
|
lib_dsuffix = '.dylib' if sys.platform == 'darwin' else '.so'
|
||||||
if '+shared' in spec:
|
lib_suffix = lib_dsuffix if '+shared' in spec else '.a'
|
||||||
install('libseq/libmpiseq.{0}'.format(dso_suffix), prefix.lib)
|
install('libseq/libmpiseq%s' % lib_suffix, prefix.lib)
|
||||||
install('libseq/mpi.h', prefix.include)
|
for f in glob.glob(join_path('libseq','*.h')):
|
||||||
install('libseq/mpif.h', prefix.include)
|
install(f, prefix.include)
|
||||||
|
|
||||||
# FIXME: extend the tests to mpirun -np 2 (or alike) when
|
# FIXME: extend the tests to mpirun -np 2 (or alike) when build with MPI
|
||||||
# build with MPI
|
# FIXME: use something like numdiff to compare blessed output with the current
|
||||||
# FIXME: use something like numdiff to compare blessed output
|
with working_dir('examples'):
|
||||||
# with the current
|
if '+float' in spec:
|
||||||
# TODO: test the installed mumps and not the one in stage
|
os.system('./ssimpletest < input_simpletest_real')
|
||||||
if '~mpi' in spec:
|
if '+complex' in spec:
|
||||||
for t in make_libs:
|
os.system('./csimpletest < input_simpletest_real')
|
||||||
make('{0}examples'.format(t))
|
if '+double' in spec:
|
||||||
|
os.system('./dsimpletest < input_simpletest_real')
|
||||||
with working_dir('examples'):
|
if '+complex' in spec:
|
||||||
for t in make_libs:
|
os.system('./zsimpletest < input_simpletest_cmplx')
|
||||||
input_file = 'input_simpletest_{0}'.format(
|
|
||||||
'real' if t in ['s', 'd'] else 'cmplx')
|
|
||||||
with open(input_file) as input:
|
|
||||||
test = './{0}simpletest'.format(t)
|
|
||||||
ret = subprocess.call(test,
|
|
||||||
stdin=input)
|
|
||||||
if ret is not 0:
|
|
||||||
raise RuntimeError(
|
|
||||||
'The test {0} did not pass'.format(test))
|
|
||||||
|
@ -23,20 +23,22 @@
|
|||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
from spack import *
|
from spack import *
|
||||||
import platform, sys
|
import platform
|
||||||
|
|
||||||
|
|
||||||
class Oce(Package):
|
class Oce(Package):
|
||||||
"""
|
"""Open CASCADE Community Edition:
|
||||||
Open CASCADE Community Edition:
|
patches/improvements/experiments contributed by users over the official
|
||||||
patches/improvements/experiments contributed by users over the official Open CASCADE library.
|
Open CASCADE library.
|
||||||
"""
|
"""
|
||||||
homepage = "https://github.com/tpaviot/oce"
|
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.17.tar.gz"
|
||||||
|
|
||||||
|
version('0.17.2', 'bf2226be4cd192606af677cf178088e5')
|
||||||
version('0.17.1', '36c67b87093c675698b483454258af91')
|
version('0.17.1', '36c67b87093c675698b483454258af91')
|
||||||
version('0.17' , 'f1a89395c4b0d199bea3db62b85f818d')
|
version('0.17', 'f1a89395c4b0d199bea3db62b85f818d')
|
||||||
version('0.16.1', '4d591b240c9293e879f50d86a0cb2bb3')
|
version('0.16.1', '4d591b240c9293e879f50d86a0cb2bb3')
|
||||||
version('0.16' , '7a4b4df5a104d75a537e25e7dd387eca')
|
version('0.16', '7a4b4df5a104d75a537e25e7dd387eca')
|
||||||
|
|
||||||
variant('tbb', default=True, description='Build with Intel Threading Building Blocks')
|
variant('tbb', default=True, description='Build with Intel Threading Building Blocks')
|
||||||
|
|
||||||
@ -49,8 +51,7 @@ class Oce(Package):
|
|||||||
# http://tracker.dev.opencascade.org/view.php?id=26042
|
# http://tracker.dev.opencascade.org/view.php?id=26042
|
||||||
# https://github.com/tpaviot/oce/issues/605
|
# https://github.com/tpaviot/oce/issues/605
|
||||||
# https://github.com/tpaviot/oce/commit/61cb965b9ffeca419005bc15e635e67589c421dd.patch
|
# https://github.com/tpaviot/oce/commit/61cb965b9ffeca419005bc15e635e67589c421dd.patch
|
||||||
patch('null.patch',when='@0.16:0.17.1')
|
patch('null.patch', when='@0.16:0.17.1')
|
||||||
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
options = []
|
options = []
|
||||||
@ -63,7 +64,8 @@ def install(self, spec, prefix):
|
|||||||
'-DOCE_DISABLE_X11:BOOL=ON',
|
'-DOCE_DISABLE_X11:BOOL=ON',
|
||||||
'-DOCE_DRAW:BOOL=OFF',
|
'-DOCE_DRAW:BOOL=OFF',
|
||||||
'-DOCE_MODEL:BOOL=ON',
|
'-DOCE_MODEL:BOOL=ON',
|
||||||
'-DOCE_MULTITHREAD_LIBRARY:STRING=%s' % ('TBB' if '+tbb' in spec else 'NONE'),
|
'-DOCE_MULTITHREAD_LIBRARY:STRING=%s' % (
|
||||||
|
'TBB' if '+tbb' in spec else 'NONE'),
|
||||||
'-DOCE_OCAF:BOOL=ON',
|
'-DOCE_OCAF:BOOL=ON',
|
||||||
'-DOCE_USE_TCL_TEST_FRAMEWORK:BOOL=OFF',
|
'-DOCE_USE_TCL_TEST_FRAMEWORK:BOOL=OFF',
|
||||||
'-DOCE_VISUALISATION:BOOL=OFF',
|
'-DOCE_VISUALISATION:BOOL=OFF',
|
||||||
@ -77,15 +79,8 @@ def install(self, spec, prefix):
|
|||||||
'-DOCE_OSX_USE_COCOA:BOOL=ON',
|
'-DOCE_OSX_USE_COCOA:BOOL=ON',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix)
|
||||||
|
|
||||||
cmake('.', *options)
|
cmake('.', *options)
|
||||||
|
|
||||||
make("install/strip")
|
make("install/strip")
|
||||||
|
make("test")
|
||||||
# OCE tests build is brocken at least on Darwin.
|
|
||||||
# Unit tests are linked against libTKernel.10.dylib isntead of /full/path/libTKernel.10.dylib
|
|
||||||
# see https://github.com/tpaviot/oce/issues/612
|
|
||||||
# make("test")
|
|
||||||
|
|
||||||
# The shared libraries are not installed correctly on Darwin; correct this
|
|
||||||
if (sys.platform == 'darwin'):
|
|
||||||
fix_darwin_install_name(prefix.lib)
|
|
||||||
|
@ -61,7 +61,7 @@ class Octave(Package):
|
|||||||
variant('qrupdate', default=False)
|
variant('qrupdate', default=False)
|
||||||
variant('qscintilla', default=False)
|
variant('qscintilla', default=False)
|
||||||
variant('qt', default=False)
|
variant('qt', default=False)
|
||||||
variant('suiteparse', default=False)
|
variant('suitesparse', default=False)
|
||||||
variant('zlib', default=False)
|
variant('zlib', default=False)
|
||||||
|
|
||||||
# Required dependencies
|
# Required dependencies
|
||||||
|
@ -35,7 +35,7 @@ class Openssl(Package):
|
|||||||
Transport Layer Security (TLS v1) protocols as well as a
|
Transport Layer Security (TLS v1) protocols as well as a
|
||||||
full-strength general purpose cryptography library."""
|
full-strength general purpose cryptography library."""
|
||||||
homepage = "http://www.openssl.org"
|
homepage = "http://www.openssl.org"
|
||||||
url = "https://www.openssl.org/source/openssl-1.0.1h.tar.gz"
|
url = "https://www.openssl.org/source/openssl-1.0.1h.tar.gz"
|
||||||
|
|
||||||
version('1.0.1h', '8d6d684a9430d5cc98a62a5d8fbda8cf')
|
version('1.0.1h', '8d6d684a9430d5cc98a62a5d8fbda8cf')
|
||||||
version('1.0.1r', '1abd905e079542ccae948af37e393d28')
|
version('1.0.1r', '1abd905e079542ccae948af37e393d28')
|
||||||
@ -50,21 +50,25 @@ class Openssl(Package):
|
|||||||
parallel = False
|
parallel = False
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
# This URL is computed pinging the place where the latest version is stored. To avoid slowdown
|
# This URL is computed pinging the place where the latest version is
|
||||||
# due to repeated pinging, we store the URL in a private class attribute to do the job only once per version
|
# stored. To avoid slowdown due to repeated pinging, we store the URL
|
||||||
|
# in a private class attribute to do the job only once per version
|
||||||
openssl_urls = getattr(Openssl, '_openssl_url', {})
|
openssl_urls = getattr(Openssl, '_openssl_url', {})
|
||||||
openssl_url = openssl_urls.get(version, None)
|
openssl_url = openssl_urls.get(version, None)
|
||||||
# Same idea, but just to avoid issuing the same message multiple times
|
# Same idea, but just to avoid issuing the same message multiple times
|
||||||
warnings_given_to_user = getattr(Openssl, '_warnings_given', {})
|
warnings_given_to_user = getattr(Openssl, '_warnings_given', {})
|
||||||
if openssl_url is None:
|
if openssl_url is None:
|
||||||
if self.spec.satisfies('@external'):
|
if self.spec.satisfies('@system'):
|
||||||
# The version @external is reserved to system openssl. In that case return a fake url and exit
|
# The version @system is reserved to system openssl. In that
|
||||||
openssl_url = '@external (reserved version for system openssl)'
|
# case return a fake url and exit
|
||||||
|
openssl_url = '@system (reserved version for system openssl)'
|
||||||
if not warnings_given_to_user.get(version, False):
|
if not warnings_given_to_user.get(version, False):
|
||||||
tty.msg('Using openssl@external : the version @external is reserved for system openssl')
|
tty.msg('Using openssl@system: '
|
||||||
|
'the version @system is reserved for system openssl')
|
||||||
warnings_given_to_user[version] = True
|
warnings_given_to_user[version] = True
|
||||||
else:
|
else:
|
||||||
openssl_url = self.check_for_outdated_release(version, warnings_given_to_user) # Store the computed URL
|
openssl_url = self.check_for_outdated_release(
|
||||||
|
version, warnings_given_to_user) # Store the computed URL
|
||||||
openssl_urls[version] = openssl_url
|
openssl_urls[version] = openssl_url
|
||||||
# Store the updated dictionary of URLS
|
# Store the updated dictionary of URLS
|
||||||
Openssl._openssl_url = openssl_urls
|
Openssl._openssl_url = openssl_urls
|
||||||
@ -75,45 +79,55 @@ def url_for_version(self, version):
|
|||||||
|
|
||||||
def check_for_outdated_release(self, version, warnings_given_to_user):
|
def check_for_outdated_release(self, version, warnings_given_to_user):
|
||||||
latest = 'ftp://ftp.openssl.org/source/openssl-{version}.tar.gz'
|
latest = 'ftp://ftp.openssl.org/source/openssl-{version}.tar.gz'
|
||||||
older = 'http://www.openssl.org/source/old/{version_number}/openssl-{version_full}.tar.gz'
|
older = 'http://www.openssl.org/source/old/{version_number}/openssl-{version_full}.tar.gz' # NOQA: ignore=E501
|
||||||
# Try to use the url where the latest tarballs are stored. If the url does not exist (404), then
|
# Try to use the url where the latest tarballs are stored.
|
||||||
# return the url for older format
|
# If the url does not exist (404), then return the url for
|
||||||
|
# older format
|
||||||
version_number = '.'.join([str(x) for x in version[:-1]])
|
version_number = '.'.join([str(x) for x in version[:-1]])
|
||||||
try:
|
try:
|
||||||
openssl_url = latest.format(version=version)
|
openssl_url = latest.format(version=version)
|
||||||
urllib.urlopen(openssl_url)
|
urllib.urlopen(openssl_url)
|
||||||
except IOError:
|
except IOError:
|
||||||
openssl_url = older.format(version_number=version_number, version_full=version)
|
openssl_url = older.format(
|
||||||
# Checks if we already warned the user for this particular version of OpenSSL.
|
version_number=version_number, version_full=version)
|
||||||
# If not we display a warning message and mark this version
|
# Checks if we already warned the user for this particular
|
||||||
|
# version of OpenSSL. If not we display a warning message
|
||||||
|
# and mark this version
|
||||||
if not warnings_given_to_user.get(version, False):
|
if not warnings_given_to_user.get(version, False):
|
||||||
tty.warn(
|
tty.warn(
|
||||||
'This installation depends on an old version of OpenSSL, which may have known security issues. ')
|
'This installation depends on an old version of OpenSSL, '
|
||||||
tty.warn('Consider updating to the latest version of this package.')
|
'which may have known security issues. ')
|
||||||
tty.warn('More details at {homepage}'.format(homepage=Openssl.homepage))
|
tty.warn(
|
||||||
|
'Consider updating to the latest version of this package.')
|
||||||
|
tty.warn('More details at {homepage}'.format(
|
||||||
|
homepage=Openssl.homepage))
|
||||||
warnings_given_to_user[version] = True
|
warnings_given_to_user[version] = True
|
||||||
|
|
||||||
return openssl_url
|
return openssl_url
|
||||||
|
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# OpenSSL uses a variable APPS in its Makefile. If it happens to be set
|
# OpenSSL uses a variable APPS in its Makefile. If it happens to be set
|
||||||
# in the environment, then this will override what is set in the
|
# in the environment, then this will override what is set in the
|
||||||
# Makefile, leading to build errors.
|
# Makefile, leading to build errors.
|
||||||
env.pop('APPS', None)
|
env.pop('APPS', None)
|
||||||
if spec.satisfies("target=x86_64") or spec.satisfies("target=ppc64"):
|
|
||||||
|
if spec.satisfies('target=x86_64') or spec.satisfies('target=ppc64'):
|
||||||
# This needs to be done for all 64-bit architectures (except Linux,
|
# This needs to be done for all 64-bit architectures (except Linux,
|
||||||
# where it happens automatically?)
|
# where it happens automatically?)
|
||||||
env['KERNEL_BITS'] = '64'
|
env['KERNEL_BITS'] = '64'
|
||||||
config = Executable("./config")
|
|
||||||
config("--prefix=%s" % prefix,
|
options = ['zlib', 'no-krb5', 'shared']
|
||||||
"--openssldir=%s" % join_path(prefix, 'etc', 'openssl'),
|
|
||||||
"zlib",
|
config = Executable('./config')
|
||||||
"no-krb5",
|
config('--prefix=%s' % prefix,
|
||||||
"shared")
|
'--openssldir=%s' % join_path(prefix, 'etc', 'openssl'),
|
||||||
|
*options)
|
||||||
|
|
||||||
# Remove non-standard compiler options if present. These options are
|
# Remove non-standard compiler options if present. These options are
|
||||||
# present e.g. on Darwin. They are non-standard, i.e. most compilers
|
# present e.g. on Darwin. They are non-standard, i.e. most compilers
|
||||||
# (e.g. gcc) will not accept them.
|
# (e.g. gcc) will not accept them.
|
||||||
filter_file(r'-arch x86_64', '', 'Makefile')
|
filter_file(r'-arch x86_64', '', 'Makefile')
|
||||||
|
|
||||||
make()
|
make()
|
||||||
make("install")
|
make('install')
|
||||||
|
@ -149,20 +149,22 @@ def install(self, spec, prefix):
|
|||||||
make("install")
|
make("install")
|
||||||
|
|
||||||
# solve Poisson equation in 2D to make sure nothing is broken:
|
# solve Poisson equation in 2D to make sure nothing is broken:
|
||||||
with working_dir('src/ksp/ksp/examples/tutorials'):
|
if ('mpi' in spec) and self.run_tests:
|
||||||
cc = os.environ['CC'] if '~mpi' in self.spec else self.spec['mpi'].mpicc # NOQA: ignore=E501
|
with working_dir('src/ksp/ksp/examples/tutorials'):
|
||||||
os.system('%s ex50.c -I%s -L%s -lpetsc -o ex50' % (
|
env['PETSC_DIR'] = self.prefix
|
||||||
cc, prefix.include, prefix.lib))
|
cc = Executable(spec['mpi'].mpicc)
|
||||||
ex50 = Executable('./ex50')
|
cc('ex50.c', '-I%s' % prefix.include, '-L%s' % prefix.lib,
|
||||||
ex50('-da_grid_x', '4', '-da_grid_y', '4')
|
'-lpetsc', '-lm', '-o', 'ex50')
|
||||||
if 'superlu-dist' in spec:
|
run = Executable(join_path(spec['mpi'].prefix.bin, 'mpirun'))
|
||||||
ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'superlu_dist') # NOQA: ignore=E501
|
run('ex50', '-da_grid_x', '4', '-da_grid_y', '4')
|
||||||
|
if 'superlu-dist' in spec:
|
||||||
|
run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'superlu_dist') # NOQA: ignore=E501
|
||||||
|
|
||||||
if 'mumps' in spec:
|
if 'mumps' in spec:
|
||||||
ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'mumps') # NOQA: ignore=E501
|
run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'lu', '-pc_factor_mat_solver_package', 'mumps') # NOQA: ignore=E501
|
||||||
|
|
||||||
if 'hypre' in spec:
|
if 'hypre' in spec:
|
||||||
ex50('-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'hypre', '-pc_hypre_type', 'boomeramg') # NOQA: ignore=E501
|
run('ex50', '-da_grid_x', '4', '-da_grid_y', '4', '-pc_type', 'hypre', '-pc_hypre_type', 'boomeramg') # NOQA: ignore=E501
|
||||||
|
|
||||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||||
# set up PETSC_DIR for everyone using PETSc package
|
# set up PETSC_DIR for everyone using PETSc package
|
||||||
|
@ -43,8 +43,8 @@ class PyH5py(Package):
|
|||||||
# Build dependencies
|
# Build dependencies
|
||||||
depends_on('py-cython@0.19:')
|
depends_on('py-cython@0.19:')
|
||||||
depends_on('pkg-config')
|
depends_on('pkg-config')
|
||||||
depends_on('hdf5@1.8.4:+mpi', when='+mpi')
|
depends_on('hdf5@1.8.4:')
|
||||||
depends_on('hdf5@1.8.4:~mpi', when='~mpi')
|
depends_on('hdf5+mpi', when='+mpi')
|
||||||
depends_on('mpi', when='+mpi')
|
depends_on('mpi', when='+mpi')
|
||||||
|
|
||||||
# Build and runtime dependencies
|
# Build and runtime dependencies
|
||||||
|
@ -47,6 +47,8 @@ class Python(Package):
|
|||||||
|
|
||||||
extendable = True
|
extendable = True
|
||||||
|
|
||||||
|
variant('ucs4', default=False, description='Enable UCS4 unicode strings')
|
||||||
|
|
||||||
depends_on("openssl")
|
depends_on("openssl")
|
||||||
depends_on("bzip2")
|
depends_on("bzip2")
|
||||||
depends_on("readline")
|
depends_on("readline")
|
||||||
@ -82,6 +84,9 @@ def install(self, spec, prefix):
|
|||||||
"LDFLAGS=-L{0}".format(ldflags)
|
"LDFLAGS=-L{0}".format(ldflags)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
if '+ucs4' in spec:
|
||||||
|
config_args.append('--enable-unicode=ucs4')
|
||||||
|
|
||||||
if spec.satisfies('@3:'):
|
if spec.satisfies('@3:'):
|
||||||
config_args.append('--without-ensurepip')
|
config_args.append('--without-ensurepip')
|
||||||
|
|
||||||
|
54
var/spack/repos/builtin/packages/r-bh/package.py
Normal file
54
var/spack/repos/builtin/packages/r-bh/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RBh(Package):
|
||||||
|
"""Boost provides free peer-reviewed portable C++ source libraries. A large
|
||||||
|
part of Boost is provided as C++ template code which is resolved entirely
|
||||||
|
at compile-time without linking. This package aims to provide the most
|
||||||
|
useful subset of Boost libraries for template use among CRAN package. By
|
||||||
|
placing these libraries in this package, we offer a more efficient
|
||||||
|
distribution system for CRAN as replication of this code in the sources of
|
||||||
|
other packages is avoided. As of release 1.60.0-2, the following Boost
|
||||||
|
libraries are included: 'algorithm' 'any' 'bimap' 'bind' 'circular_buffer'
|
||||||
|
'concept' 'config' 'container' 'date'_'time' 'detail' 'dynamic_bitset'
|
||||||
|
'exception' 'filesystem' 'flyweight' 'foreach' 'functional' 'fusion'
|
||||||
|
'geometry' 'graph' 'heap' 'icl' 'integer' 'interprocess' 'intrusive' 'io'
|
||||||
|
'iostreams' 'iterator' 'math' 'move' 'mpl' 'multiprcecision' 'numeric'
|
||||||
|
'pending' 'phoenix' 'preprocessor' 'random' 'range' 'smart_ptr' 'spirit'
|
||||||
|
'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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/BH"
|
||||||
|
|
||||||
|
version('1.60.0-2', 'b50fdc85285da05add4e9da664a2d551')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
44
var/spack/repos/builtin/packages/r-colorspace/package.py
Normal file
44
var/spack/repos/builtin/packages/r-colorspace/package.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RColorspace(Package):
|
||||||
|
"""Carries out mapping between assorted color spaces including RGB, HSV,
|
||||||
|
HLS, CIEXYZ, CIELUV, HCL (polar CIELUV), CIELAB and polar CIELAB.
|
||||||
|
Qualitative, sequential, and diverging color palettes based on HCL colors
|
||||||
|
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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/colorspace"
|
||||||
|
|
||||||
|
version('1.2-6', 'a30191e9caf66f77ff4e99c062e9dce1')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
42
var/spack/repos/builtin/packages/r-dichromat/package.py
Normal file
42
var/spack/repos/builtin/packages/r-dichromat/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RDichromat(Package):
|
||||||
|
"""Collapse red-green or green-blue distinctions to simulate the effects of
|
||||||
|
different types of color-blindness."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/dichromat/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/dichromat_2.0-0.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/dichromat"
|
||||||
|
|
||||||
|
version('2.0-0', '84e194ac95a69763d740947a7ee346a6')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
54
var/spack/repos/builtin/packages/r-ggplot2/package.py
Normal file
54
var/spack/repos/builtin/packages/r-ggplot2/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RGgplot2(Package):
|
||||||
|
"""An implementation of the grammar of graphics in R. It combines the
|
||||||
|
advantages of both base and lattice graphics: conditioning and shared axes
|
||||||
|
are handled automatically, and you can still build up a plot step by step
|
||||||
|
from multiple data sources. It also implements a sophisticated
|
||||||
|
multidimensional conditioning system and a consistent interface to map data
|
||||||
|
to aesthetic attributes. See http://ggplot2.org for more information,
|
||||||
|
documentation and examples."""
|
||||||
|
|
||||||
|
homepage = "http://ggplot2.org/"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/ggplot2_2.1.0.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/ggplot2"
|
||||||
|
|
||||||
|
version('2.1.0', '771928cfb97c649c720423deb3ec7fd3')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-digest')
|
||||||
|
depends_on('r-gtable')
|
||||||
|
depends_on('r-mass')
|
||||||
|
depends_on('r-plyr')
|
||||||
|
depends_on('r-reshape2')
|
||||||
|
depends_on('r-scales')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
44
var/spack/repos/builtin/packages/r-gridextra/package.py
Normal file
44
var/spack/repos/builtin/packages/r-gridextra/package.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RGridextra(Package):
|
||||||
|
"""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"
|
||||||
|
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"
|
||||||
|
|
||||||
|
version('2.2.1', '7076c2122d387c7ef3add69a1c4fc1b2')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-gtable')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
41
var/spack/repos/builtin/packages/r-gtable/package.py
Normal file
41
var/spack/repos/builtin/packages/r-gtable/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RGtable(Package):
|
||||||
|
"""Tools to make it easier to work with "tables" of 'grobs'."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/gtable/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/gtable_0.2.0.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/gtable"
|
||||||
|
|
||||||
|
version('0.2.0', '124090ae40b2dd3170ae11180e0d4cab')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
43
var/spack/repos/builtin/packages/r-inline/package.py
Normal file
43
var/spack/repos/builtin/packages/r-inline/package.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RInline(Package):
|
||||||
|
"""Functionality to dynamically define R functions and S4 methods with
|
||||||
|
inlined C, C++ or Fortran code supporting .C and .Call calling
|
||||||
|
conventions."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/inline/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/inline_0.3.14.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/inline"
|
||||||
|
|
||||||
|
version('0.3.14', '9fe304a6ebf0e3889c4c6a7ad1c50bca')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
41
var/spack/repos/builtin/packages/r-labeling/package.py
Normal file
41
var/spack/repos/builtin/packages/r-labeling/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RLabeling(Package):
|
||||||
|
"""Provides a range of axis labeling algorithms."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/labeling/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/labeling_0.3.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/labeling"
|
||||||
|
|
||||||
|
version('0.3', 'ccd7082ec0b211aba8a89d85176bb534')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
44
var/spack/repos/builtin/packages/r-lattice/package.py
Normal file
44
var/spack/repos/builtin/packages/r-lattice/package.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RLattice(Package):
|
||||||
|
"""A powerful and elegant high-level data visualization system inspired by
|
||||||
|
Trellis graphics, with an emphasis on multivariate data. Lattice is
|
||||||
|
sufficient for typical graphics needs, and is also flexible enough to
|
||||||
|
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-33.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/lattice"
|
||||||
|
|
||||||
|
version('0.20-33', 'd487c94db1bfe00a27270f4c71baf53e')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
45
var/spack/repos/builtin/packages/r-magrittr/package.py
Normal file
45
var/spack/repos/builtin/packages/r-magrittr/package.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RMagrittr(Package):
|
||||||
|
"""Provides a mechanism for chaining commands with a new forward-pipe
|
||||||
|
operator, %>%. This operator will forward a value, or the result of an
|
||||||
|
expression, into the next function call/expression. There is flexible
|
||||||
|
support for the type of right-hand side expressions. For more information,
|
||||||
|
see package vignette."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/magrittr/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/magrittr_1.5.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/magrittr"
|
||||||
|
|
||||||
|
version('1.5', 'e74ab7329f2b9833f0c3c1216f86d65a')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
42
var/spack/repos/builtin/packages/r-mass/package.py
Normal file
42
var/spack/repos/builtin/packages/r-mass/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RMass(Package):
|
||||||
|
"""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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/MASS"
|
||||||
|
|
||||||
|
version('7.3-45', 'aba3d12fab30f1793bee168a1efea88b')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
44
var/spack/repos/builtin/packages/r-matrix/package.py
Normal file
44
var/spack/repos/builtin/packages/r-matrix/package.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RMatrix(Package):
|
||||||
|
"""Classes and methods for dense and sparse matrices and operations on them
|
||||||
|
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"
|
||||||
|
|
||||||
|
version('1.2-6', 'f545307fb1284861e9266c4e9712c55e')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-lattice')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
47
var/spack/repos/builtin/packages/r-munsell/package.py
Normal file
47
var/spack/repos/builtin/packages/r-munsell/package.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RMunsell(Package):
|
||||||
|
"""Provides easy access to, and manipulation of, the Munsell colours.
|
||||||
|
Provides a mapping between Munsell's original notation (e.g. "5R 5/10") and
|
||||||
|
hexadecimal strings suitable for use directly in R graphics. Also provides
|
||||||
|
utilities to explore slices through the Munsell colour tree, to transform
|
||||||
|
Munsell colours and display colour palettes."""
|
||||||
|
|
||||||
|
homepage = "https://cran.r-project.org/web/packages/munsell/index.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/munsell_0.4.3.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/munsell"
|
||||||
|
|
||||||
|
version('0.4.3', 'ebd205323dc37c948f499ee08be9c476')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-colorspace')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
49
var/spack/repos/builtin/packages/r-plyr/package.py
Normal file
49
var/spack/repos/builtin/packages/r-plyr/package.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RPlyr(Package):
|
||||||
|
"""A set of tools that solves a common set of problems: you need to break a
|
||||||
|
big problem down into manageable pieces, operate on each piece and then put
|
||||||
|
all the pieces back together. For example, you might want to fit a model to
|
||||||
|
each spatial location or time point in your study, summarise data by panels
|
||||||
|
or collapse high-dimensional arrays to simpler summary statistics. The
|
||||||
|
development of 'plyr' has been generously supported by 'Becton
|
||||||
|
Dickinson'."""
|
||||||
|
|
||||||
|
homepage = "http://had.co.nz/plyr"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/plyr_1.8.4.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/plyr"
|
||||||
|
|
||||||
|
version('1.8.4', 'ef455cf7fc06e34837692156b7b2587b')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-rcpp')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
42
var/spack/repos/builtin/packages/r-rcolorbrewer/package.py
Normal file
42
var/spack/repos/builtin/packages/r-rcolorbrewer/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RRcolorbrewer(Package):
|
||||||
|
"""Provides color schemes for maps (and other graphics) designed by Cynthia
|
||||||
|
Brewer as described at http://colorbrewer2.org"""
|
||||||
|
|
||||||
|
homepage = "http://colorbrewer2.org"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/RColorBrewer_1.1-2.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/RColorBrewer"
|
||||||
|
|
||||||
|
version('1.1-2', '66054d83eade4dff8a43ad4732691182')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
49
var/spack/repos/builtin/packages/r-rcpp/package.py
Normal file
49
var/spack/repos/builtin/packages/r-rcpp/package.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RRcpp(Package):
|
||||||
|
"""The 'Rcpp' package provides R functions as well as C++ classes which
|
||||||
|
offer a seamless integration of R and C++. Many R data types and objects
|
||||||
|
can be mapped back and forth to C++ equivalents which facilitates both
|
||||||
|
writing of new code as well as easier integration of third-party libraries.
|
||||||
|
Documentation about 'Rcpp' is provided by several vignettes included in
|
||||||
|
this package, via the 'Rcpp Gallery' site at <http://gallery.rcpp.org>, the
|
||||||
|
paper by Eddelbuettel and Francois (2011, JSS), and the book by
|
||||||
|
Eddelbuettel (2013, Springer); see 'citation("Rcpp")' for details on these
|
||||||
|
last two."""
|
||||||
|
|
||||||
|
homepage = "http://dirk.eddelbuettel.com/code/rcpp.html"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/Rcpp_0.12.5.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/Rcpp"
|
||||||
|
|
||||||
|
version('0.12.5', 'f03ec05b4e391cc46e7ce330e82ff5e2')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
56
var/spack/repos/builtin/packages/r-rcppeigen/package.py
Normal file
56
var/spack/repos/builtin/packages/r-rcppeigen/package.py
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RRcppeigen(Package):
|
||||||
|
"""R and 'Eigen' integration using 'Rcpp'. 'Eigen' is a C++ template
|
||||||
|
library for linear algebra: matrices, vectors, numerical solvers and
|
||||||
|
related algorithms. It supports dense and sparse matrices on integer,
|
||||||
|
floating point and complex numbers, decompositions of such matrices, and
|
||||||
|
solutions of linear systems. Its performance on many algorithms is
|
||||||
|
comparable with some of the best implementations based on 'Lapack' and
|
||||||
|
level-3 'BLAS'. The 'RcppEigen' package includes the header files from the
|
||||||
|
'Eigen' C++ template library (currently version 3.2.8). Thus users do not
|
||||||
|
need to install 'Eigen' itself in order to use 'RcppEigen'. Since version
|
||||||
|
3.1.1, 'Eigen' is licensed under the Mozilla Public License (version 2);
|
||||||
|
earlier version were licensed under the GNU LGPL version 3 or later.
|
||||||
|
'RcppEigen' (the 'Rcpp' bindings/bridge to 'Eigen') is licensed under the
|
||||||
|
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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/RcppEigen"
|
||||||
|
|
||||||
|
version('0.3.2.8.1', '4146e06e4fdf7f4d08db7839069d479f')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-matrix')
|
||||||
|
depends_on('r-rcpp')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
46
var/spack/repos/builtin/packages/r-reshape2/package.py
Normal file
46
var/spack/repos/builtin/packages/r-reshape2/package.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RReshape2(Package):
|
||||||
|
"""Flexibly restructure and aggregate data using just two functions: melt
|
||||||
|
and dcast (or acast)."""
|
||||||
|
|
||||||
|
homepage = "https://github.com/hadley/reshape"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/reshape2_1.4.1.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/reshape2"
|
||||||
|
|
||||||
|
version('1.4.1', '41e9dffdf5c6fa830321ac9c8ebffe00')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-plyr')
|
||||||
|
depends_on('r-stringr')
|
||||||
|
depends_on('r-rcpp')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
57
var/spack/repos/builtin/packages/r-rstan/package.py
Normal file
57
var/spack/repos/builtin/packages/r-rstan/package.py
Normal file
@ -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/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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RRstan(Package):
|
||||||
|
"""User-facing R functions are provided to parse, compile, test, estimate,
|
||||||
|
and analyze Stan models by accessing the header-only Stan library provided
|
||||||
|
by the 'StanHeaders' package. The Stan project develops a probabilistic
|
||||||
|
programming language that implements full Bayesian statistical inference
|
||||||
|
via Markov Chain Monte Carlo, rough Bayesian inference via variational
|
||||||
|
approximation, and (optionally penalized) maximum likelihood estimation via
|
||||||
|
optimization. In all three cases, automatic differentiation is used to
|
||||||
|
quickly and accurately evaluate gradients without burdening the user with
|
||||||
|
the need to derive the partial derivatives."""
|
||||||
|
|
||||||
|
homepage = "http://mc-stan.org/"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/rstan_2.10.1.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/rstan"
|
||||||
|
|
||||||
|
version('2.10.1', 'f5d212f6f8551bdb91fe713d05d4052a')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-ggplot2')
|
||||||
|
depends_on('r-stanheaders')
|
||||||
|
depends_on('r-inline')
|
||||||
|
depends_on('r-gridextra')
|
||||||
|
depends_on('r-rcpp')
|
||||||
|
depends_on('r-rcppeigen')
|
||||||
|
depends_on('r-bh')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
49
var/spack/repos/builtin/packages/r-scales/package.py
Normal file
49
var/spack/repos/builtin/packages/r-scales/package.py
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RScales(Package):
|
||||||
|
"""Graphical scales map data to aesthetics, and provide methods for
|
||||||
|
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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/scales"
|
||||||
|
|
||||||
|
version('0.4.0', '7b5602d9c55595901192248bca25c099')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-rcolorbrewer')
|
||||||
|
depends_on('r-dichromat')
|
||||||
|
depends_on('r-plyr')
|
||||||
|
depends_on('r-munsell')
|
||||||
|
depends_on('r-labeling')
|
||||||
|
depends_on('r-rcpp')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
55
var/spack/repos/builtin/packages/r-stanheaders/package.py
Normal file
55
var/spack/repos/builtin/packages/r-stanheaders/package.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RStanheaders(Package):
|
||||||
|
"""The C++ header files of the Stan project are provided by this package,
|
||||||
|
but it contains no R code, vignettes, or function documentation. There is a
|
||||||
|
shared object containing part of the CVODES library, but it is not
|
||||||
|
accessible from R. StanHeaders is only useful for developers who want to
|
||||||
|
utilize the LinkingTo directive of their package's DESCRIPTION file to
|
||||||
|
build on the Stan library without incurring unnecessary dependencies. The
|
||||||
|
Stan project develops a probabilistic programming language that implements
|
||||||
|
full or approximate Bayesian statistical inference via Markov Chain Monte
|
||||||
|
Carlo or variational methods and implements (optionally penalized) maximum
|
||||||
|
likelihood estimation via optimization. The Stan library includes an
|
||||||
|
advanced automatic differentiation scheme, templated statistical and linear
|
||||||
|
algebra functions that can handle the automatically differentiable scalar
|
||||||
|
types (and doubles, ints, etc.), and a parser for the Stan language. The
|
||||||
|
'rstan' package provides user-facing R functions to parse, compile, test,
|
||||||
|
estimate, and analyze Stan models."""
|
||||||
|
|
||||||
|
homepage = "http://mc-stan.org/"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/StanHeaders_2.10.0-2.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/StanHeaders"
|
||||||
|
|
||||||
|
version('2.10.0-2', '9d09b1e9278f08768f7a988ad9082d57')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
51
var/spack/repos/builtin/packages/r-stringi/package.py
Normal file
51
var/spack/repos/builtin/packages/r-stringi/package.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RStringi(Package):
|
||||||
|
"""Allows for fast, correct, consistent, portable, as well as convenient
|
||||||
|
character string/text processing in every locale and any native encoding.
|
||||||
|
Owing to the use of the ICU library, the package provides R users with
|
||||||
|
platform-independent functions known to Java, Perl, Python, PHP, and Ruby
|
||||||
|
programmers. Among available features there are: pattern searching (e.g.,
|
||||||
|
with ICU Java-like regular expressions or the Unicode Collation Algorithm),
|
||||||
|
random string generation, case mapping, string transliteration,
|
||||||
|
concatenation, Unicode normalization, date-time formatting and parsing,
|
||||||
|
etc."""
|
||||||
|
|
||||||
|
homepage = "http://www.gagolewski.com/software/stringi/"
|
||||||
|
url = "https://cran.r-project.org/src/contrib/stringi_1.1.1.tar.gz"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/stringi"
|
||||||
|
|
||||||
|
version('1.1.1', '32b919ee3fa8474530c4942962a6d8d9')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('icu')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
48
var/spack/repos/builtin/packages/r-stringr/package.py
Normal file
48
var/spack/repos/builtin/packages/r-stringr/package.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
##############################################################################
|
||||||
|
# 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 *
|
||||||
|
|
||||||
|
|
||||||
|
class RStringr(Package):
|
||||||
|
"""A consistent, simple and easy to use set of wrappers around the
|
||||||
|
fantastic 'stringi' package. All function and argument names (and
|
||||||
|
positions) are consistent, all functions deal with "NA"'s and zero length
|
||||||
|
vectors in the same way, and the output from one function is easy to feed
|
||||||
|
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"
|
||||||
|
list_url = "https://cran.r-project.org/src/contrib/Archive/stringr"
|
||||||
|
|
||||||
|
version('1.0.0', '5ca977c90351f78b1b888b379114a7b4')
|
||||||
|
|
||||||
|
extends('R')
|
||||||
|
|
||||||
|
depends_on('r-stringi')
|
||||||
|
depends_on('r-magrittr')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
R('CMD', 'INSTALL', '--library={0}'.format(self.module.r_lib_dir),
|
||||||
|
self.stage.source_path)
|
@ -35,9 +35,20 @@ class Ruby(Package):
|
|||||||
extendable = True
|
extendable = True
|
||||||
|
|
||||||
version('2.2.0', 'cd03b28fd0b555970f5c4fd481700852')
|
version('2.2.0', 'cd03b28fd0b555970f5c4fd481700852')
|
||||||
|
depends_on('libffi')
|
||||||
|
depends_on('zlib')
|
||||||
|
variant('openssl', default=False, description="Enable OpenSSL support")
|
||||||
|
depends_on('openssl', when='+openssl')
|
||||||
|
variant('readline', default=False, description="Enable Readline support")
|
||||||
|
depends_on('readline', when='+readline')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
configure("--prefix=%s" % prefix)
|
options = ["--prefix=%s" % prefix]
|
||||||
|
if '+openssl' in spec:
|
||||||
|
options.append("--with-openssl-dir=%s" % spec['openssl'].prefix)
|
||||||
|
if '+readline' in spec:
|
||||||
|
options.append("--with-readline-dir=%s" % spec['readline'].prefix)
|
||||||
|
configure(*options)
|
||||||
make()
|
make()
|
||||||
make("install")
|
make("install")
|
||||||
|
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
From 7489a3f3d569e2fbf5513ac9dcd769017d9f7eb7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lisandro Dalcin <dalcinl@gmail.com>
|
||||||
|
Date: Thu, 2 Jun 2016 21:57:38 +0300
|
||||||
|
Subject: [PATCH] OS X: Fix library path in invocation of install_name_tool
|
||||||
|
|
||||||
|
---
|
||||||
|
config/install.py | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/config/install.py b/config/install.py
|
||||||
|
index 09acd03..6ce98ae 100755
|
||||||
|
--- a/config/install.py
|
||||||
|
+++ b/config/install.py
|
||||||
|
@@ -25,6 +25,7 @@ class Installer:
|
||||||
|
|
||||||
|
def setupDirectories(self):
|
||||||
|
self.installDir = self.destDir
|
||||||
|
+ self.archDir = os.path.join(self.rootDir, self.arch)
|
||||||
|
self.rootIncludeDir = os.path.join(self.rootDir, 'include')
|
||||||
|
self.archIncludeDir = os.path.join(self.rootDir, self.arch, 'include')
|
||||||
|
self.rootConfDir = os.path.join(self.rootDir, 'lib','slepc','conf')
|
||||||
|
@@ -220,7 +221,7 @@ for dir in dirs:
|
||||||
|
if os.path.splitext(dst)[1] == '.dylib' and os.path.isfile('/usr/bin/install_name_tool'):
|
||||||
|
(result, output) = commands.getstatusoutput('otool -D '+src)
|
||||||
|
oldname = output[output.find("\n")+1:]
|
||||||
|
- installName = oldname.replace(self.destDir, self.installDir)
|
||||||
|
+ installName = oldname.replace(self.archDir, self.installDir)
|
||||||
|
(result, output) = commands.getstatusoutput('/usr/bin/install_name_tool -id ' + installName + ' ' + dst)
|
||||||
|
# preserve the original timestamps - so that the .a vs .so time order is preserved
|
||||||
|
shutil.copystat(src,dst)
|
||||||
|
--
|
||||||
|
2.7.4.1.g5468f9e
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
class Slepc(Package):
|
class Slepc(Package):
|
||||||
"""
|
"""
|
||||||
Scalable Library for Eigenvalue Computations.
|
Scalable Library for Eigenvalue Problem Computations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
homepage = "http://www.grycap.upv.es/slepc"
|
homepage = "http://www.grycap.upv.es/slepc"
|
||||||
@ -45,9 +45,13 @@ class Slepc(Package):
|
|||||||
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')
|
depends_on('arpack-ng+mpi', when='+arpack^petsc+mpi')
|
||||||
|
|
||||||
|
patch('install_name_371.patch', when='@3.7.1')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# set SLEPC_DIR for installation
|
# set SLEPC_DIR for installation
|
||||||
os.environ['SLEPC_DIR'] = self.stage.source_path
|
# Note that one should set the current (temporary) directory instead
|
||||||
|
# its symlink in spack/stage/ !
|
||||||
|
os.environ['SLEPC_DIR'] = os.getcwd()
|
||||||
|
|
||||||
options = []
|
options = []
|
||||||
|
|
||||||
@ -67,9 +71,10 @@ def install(self, spec, prefix):
|
|||||||
configure('--prefix=%s' % prefix, *options)
|
configure('--prefix=%s' % prefix, *options)
|
||||||
|
|
||||||
make('MAKE_NP=%s' % make_jobs, parallel=False)
|
make('MAKE_NP=%s' % make_jobs, parallel=False)
|
||||||
# FIXME:
|
if self.run_tests:
|
||||||
# make('test')
|
make('test', parallel=False)
|
||||||
make('install')
|
|
||||||
|
make('install', parallel=False)
|
||||||
|
|
||||||
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
||||||
# set up SLEPC_DIR for everyone using SLEPc package
|
# set up SLEPC_DIR for everyone using SLEPc package
|
||||||
|
@ -33,6 +33,7 @@ class SuiteSparse(Package):
|
|||||||
url = 'http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.1.tar.gz'
|
url = 'http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.1.tar.gz'
|
||||||
|
|
||||||
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
|
version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319')
|
||||||
|
version('4.5.3', '8ec57324585df3c6483ad7f556afccbd')
|
||||||
|
|
||||||
# FIXME: (see below)
|
# FIXME: (see below)
|
||||||
# variant('tbb', default=True, description='Build with Intel TBB')
|
# variant('tbb', default=True, description='Build with Intel TBB')
|
||||||
@ -40,34 +41,35 @@ class SuiteSparse(Package):
|
|||||||
depends_on('blas')
|
depends_on('blas')
|
||||||
depends_on('lapack')
|
depends_on('lapack')
|
||||||
|
|
||||||
depends_on('metis@5.1.0', when='@4.5.1')
|
depends_on('metis@5.1.0', when='@4.5.1:')
|
||||||
# FIXME:
|
# FIXME:
|
||||||
# in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng flags
|
# in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng
|
||||||
# does not seem to be used, which leads to linking errors on Linux.
|
# flags does not seem to be used, which leads to linking errors on Linux.
|
||||||
# Try re-enabling in future versions.
|
# Try re-enabling in future versions.
|
||||||
# depends_on('tbb', when='+tbb')
|
# depends_on('tbb', when='+tbb')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
# The build system of SuiteSparse is quite old-fashioned
|
# The build system of SuiteSparse is quite old-fashioned.
|
||||||
# It's basically a plain Makefile which include an header (SuiteSparse_config/SuiteSparse_config.mk)
|
# It's basically a plain Makefile which include an header
|
||||||
# with a lot of convoluted logic in it.
|
# (SuiteSparse_config/SuiteSparse_config.mk)with a lot of convoluted
|
||||||
# Any kind of customization will need to go through filtering of that file
|
# logic in it. Any kind of customization will need to go through
|
||||||
|
# filtering of that file
|
||||||
|
|
||||||
make_args = ['INSTALL=%s' % prefix]
|
make_args = ['INSTALL=%s' % prefix]
|
||||||
|
|
||||||
# inject Spack compiler wrappers
|
# inject Spack compiler wrappers
|
||||||
make_args.extend([
|
make_args.extend([
|
||||||
'AUTOCC=no',
|
'AUTOCC=no',
|
||||||
'CC=cc',
|
'CC=cc',
|
||||||
'CXX=c++',
|
'CXX=c++',
|
||||||
'F77=f77',
|
'F77=f77',
|
||||||
])
|
])
|
||||||
|
|
||||||
# use Spack's metis in CHOLMOD/Partition module,
|
# use Spack's metis in CHOLMOD/Partition module,
|
||||||
# otherwise internal Metis will be compiled
|
# otherwise internal Metis will be compiled
|
||||||
make_args.extend([
|
make_args.extend([
|
||||||
'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib,
|
'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib,
|
||||||
'MY_METIS_INC=%s' % spec['metis'].prefix.include,
|
'MY_METIS_INC=%s' % spec['metis'].prefix.include,
|
||||||
])
|
])
|
||||||
|
|
||||||
# Intel TBB in SuiteSparseQR
|
# Intel TBB in SuiteSparseQR
|
||||||
@ -78,10 +80,13 @@ def install(self, spec, prefix):
|
|||||||
])
|
])
|
||||||
|
|
||||||
# BLAS arguments require path to libraries
|
# BLAS arguments require path to libraries
|
||||||
# FIXME : (blas / lapack always provide libblas and liblapack as aliases)
|
# FIXME: (blas/lapack always provide libblas and liblapack as aliases)
|
||||||
make_args.extend([
|
if '@4.5.1' in spec:
|
||||||
'BLAS=-lblas',
|
# adding -lstdc++ is clearly an ugly way to do this, but it follows
|
||||||
'LAPACK=-llapack'
|
# with the TCOV path of SparseSuite 4.5.1's Suitesparse_config.mk
|
||||||
])
|
make_args.extend([
|
||||||
|
'BLAS=-lblas -lstdc++',
|
||||||
|
'LAPACK=-llapack'
|
||||||
|
])
|
||||||
|
|
||||||
make('install', *make_args)
|
make('install', *make_args)
|
||||||
|
Loading…
Reference in New Issue
Block a user