diff options
49 files changed, 1647 insertions, 244 deletions
diff --git a/lib/spack/docs/basic_usage.rst b/lib/spack/docs/basic_usage.rst index d8d5a6a23a..dbad0a9f6d 100644 --- a/lib/spack/docs/basic_usage.rst +++ b/lib/spack/docs/basic_usage.rst @@ -114,13 +114,13 @@ that the packages is installed: $ spack install 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. - ==> callpath is already installed in /home/gamblin2/spack/opt/chaos_5_x86_64_ib/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. + ==> 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/linux-debian7-x86_64/gcc@4.4.7/callpath@1.0.2-5dce4318. + ==> 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 ######################################################################## 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 - ==> Created stage in /home/gamblin2/spack/var/spack/stage/mpileaks@1.0%gcc@4.4.7 arch=chaos_5_x86_64_ib-59f6ad23. + ==> 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=linux-debian7-x86_64-59f6ad23. ==> No patches needed for mpileaks. ==> Building mpileaks. @@ -128,7 +128,7 @@ that the packages is installed: ==> Successfully installed mpileaks. 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 installed. @@ -230,7 +230,7 @@ Running ``spack find`` with no arguments lists installed packages: $ spack find ==> 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 adept-utils@1.0 libdwarf@20130729 py-ipython@2.3.1 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 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 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 ==> 2 installed packages. - -- chaos_5_x86_64_ib / gcc@4.4.7 -------------------------------- + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- libdwarf@20130729-d9b90962 ^libelf@0.8.12 libdwarf@20130729-b52fac98 @@ -295,7 +295,7 @@ want to know whether two packages' dependencies differ, you can use $ spack find -l libdwarf ==> 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 Now the ``libwarf`` installs have hashes after their names. These are @@ -309,14 +309,14 @@ use ``spack find -p``: $ spack find -p ==> 74 installed packages. - -- chaos_5_x86_64_ib / 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 - adept-utils@1.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/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 - boost@1.55.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/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 - cairo@1.14.0 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/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 + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- + 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/linux-debian7-x86_64/gcc@4.4.7/adept-utils@1.0-5adef8da + 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/linux-debian7-x86_64/gcc@4.4.7/boost@1.55.0 + 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/linux-debian7-x86_64/gcc@4.4.7/cairo@1.14.0-fcc2ab44 + 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 @@ -325,10 +325,10 @@ by supplying its name: .. code-block:: sh $ spack find -p libelf - -- chaos_5_x86_64_ib / 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.12 /home/gamblin2/spack/opt/chaos_5_x86_64_ib/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 + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- + 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/linux-debian7-x86_64/gcc@4.4.7/libelf@0.8.12 + 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 *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 $ 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 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 ==> 1 installed packages. - -- chaos_5_x86_64_ib / gcc@4.4.7 -------------------------------- + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- libdwarf@20130729-d9b90962 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`. +.. _compiler-config: 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 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 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:: ... - chaos_5_x86_64_ib: - ... - intel@15.0.0: + compilers: + - compiler: + modules = [] + operating_system: OS + paths: cc: /usr/local/bin/icc-15.0.024-beta cxx: /usr/local/bin/icpc-15.0.024-beta f77: /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 -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. + spec: intel@15.0.0: For compilers, like ``clang``, that do not support Fortran, put ``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 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: 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. Specs are more than a package name and a version; you can use them to 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. -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 @@ -546,8 +546,8 @@ More formally, a spec consists of the following pieces: boolean variants * ``name=<value>`` Optional compiler flag specifiers. Valid flag names are ``cflags``, ``cxxflags``, ``fflags``, ``cppflags``, ``ldflags``, and ``ldlibs``. -* ``arch=<value>`` Optional architecture specifier (``arch=bgq_os``) -* ``^`` Dependency specs (``^callpath@1.1``) +* ``target=<value> os=<value>`` Optional architecture specifier +(``target=haswell os=CNL10``) * ``^`` Dependency specs (``^callpath@1.1``) There are two things to notice here. The first is that specs are 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. 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``, -``-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 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 ~~~~~~~~~~~~~~~~~~~~~~~ -.. 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 - functional. They will be in Spack version 1.0, due in Q3 2015. +.. code-block:: sh + + spack install libelf arch=cray_xc-CNL10-haswell -The architecture specifier looks identical to a variant specifier for a -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: @@ -985,7 +989,7 @@ of installed packages. $ 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 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 @@ -1056,7 +1060,7 @@ Spack. For example, this will add the ``mpich`` package built with $ spack use mpich %gcc@4.4.7 Prepending: mpich@3.0.4%gcc@4.4.7 (ok) $ 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: @@ -1089,8 +1093,8 @@ than one installed package matches it), then Spack will warn you: $ spack load libelf ==> 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%intel@15.0.0 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=linux-debian7-x86_64 You can either type the ``spack load`` command again with a fully 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. -Module Comamnds for Shell Scripts +Module Commands for Shell Scripts `````````````````````````````````` 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 ==> 1 installed packages. - -- chaos_5_x86_64_ib / gcc@4.4.7 -------------------------------- + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- python@2.7.8 .. _spack-extensions: @@ -1556,7 +1560,7 @@ You can find extensions for your Python installation like this: .. code-block:: sh $ 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: geos py-ipython py-pexpect py-pyside py-sip 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 ==> 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-numpy@1.9.1 py-pytz@2014.10 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 ==> 1 installed packages. - -- chaos_5_x86_64_ib / 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 + -- linux-debian7-x86_64 / gcc@4.4.7 -------------------------------- + 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 directly when you run ``python``: @@ -1646,9 +1650,9 @@ installation: .. code-block:: sh $ 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-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-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-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=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=linux-debian7-x86_64-66733244 for python@2.7.8%gcc@4.4.7. Several things have happened here. The user requested that ``py-numpy`` be activated in the ``python`` installation it was built @@ -1663,7 +1667,7 @@ packages listed as activated: .. code-block:: sh $ 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: geos py-ipython py-pexpect py-pyside py-sip 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 ==> 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-numpy@1.9.1 py-pytz@2014.10 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 ==> 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 @@ -1711,7 +1715,7 @@ dependencies, you can use ``spack activate -f``: .. code-block:: sh $ 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: @@ -1743,7 +1747,7 @@ Spack currently needs to be run from a filesystem that supports ``flock`` locking semantics. Nearly all local filesystems and recent versions of NFS support this, but parallel filesystems may be mounted 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: .. code-block:: sh @@ -1764,7 +1768,7 @@ This issue typically manifests with the error below: Traceback (most recent call last): File "./spack", line 176, in <module> main() - File "./spack", line 154, in main + File "./spack", line 154,' in main return_val = command(parser, args) File "./spack/lib/spack/spack/cmd/find.py", line 170, in find 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. + +.. _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 ----------------------- diff --git a/lib/spack/docs/configuration.rst b/lib/spack/docs/configuration.rst index a6f876b2aa..f2ffa07264 100644 --- a/lib/spack/docs/configuration.rst +++ b/lib/spack/docs/configuration.rst @@ -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 directory is. +.. _sec-external_packages: External Packages ---------------------------- @@ -70,20 +71,20 @@ directory. Here's an example of an external configuration: packages: openmpi: 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=chaos_5_x86_64_ib+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.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=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug + 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, 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 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 -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 -``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 package lacks a spec component, such as missing a compiler or package version, then Spack will guess the missing component based @@ -108,9 +109,9 @@ be: packages: openmpi: 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=chaos_5_x86_64_ib+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.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=linux-x86_64-debian7+debug: /opt/openmpi-1.4.3-debug + openmpi@1.6.5%intel@10.1 arch=linux-x86_64-debian7: /opt/openmpi-1.6.5-intel buildable: False 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 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. It could also be used alone to forbid packages that may be buggy or otherwise undesirable. @@ -181,7 +185,6 @@ concretization rules. A provider lists a value that packages may dependency. - Profiling ------------------ diff --git a/lib/spack/docs/packaging_guide.rst b/lib/spack/docs/packaging_guide.rst index 6cea4da14f..72559e47ce 100644 --- a/lib/spack/docs/packaging_guide.rst +++ b/lib/spack/docs/packaging_guide.rst @@ -36,10 +36,11 @@ Creating & editing packages ``spack create`` ~~~~~~~~~~~~~~~~~~~~~ -The ``spack create`` command generates a boilerplate package template -from a URL. The URL should point to a tarball or other software -archive. In most cases, ``spack create`` plus a few modifications is -all you need to get a package working. +The ``spack create`` command creates a directory with the package name and +generates a ``package.py`` file with a boilerplate package template from a URL. +The URL should point to a tarball or other software archive. In most cases, +``spack create`` plus a few modifications is all you need to get a package +working. 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 examines the tarball URL and tries to figure out the name of the -package to be created. It 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: +Spack examines the tarball URL and tries to figure out the name of the package +to be created. Once the name is determined a directory in the appropriate +repository is created with that name. Spack prefers, but does not require, that +names be lower case so the directory name will be lower case when ``spack +create`` generates it. In cases where it is desired to have mixed case or upper +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 @@ -297,9 +302,10 @@ directories or files (like patches) that it needs to build. Package Names ~~~~~~~~~~~~~~~~~~ -Packages are named after the directory containing ``package.py``. So, -``libelf``'s ``package.py`` lives in a directory called ``libelf``. -The ``package.py`` file defines a class called ``Libelf``, which +Packages are named after the directory containing ``package.py``. It is +preferred, but not required, that the directory, and thus the package name, are +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 ``$SPACK_ROOT/var/spack/repos/builtin/packages/libelf/package.py``: @@ -1660,21 +1666,21 @@ the user runs ``spack install`` and the time the ``install()`` method is called. The concretized version of the spec above might look like this:: - mpileaks@2.3%gcc@4.7.3 arch=linux-ppc64 - ^callpath@1.0%gcc@4.7.3+debug arch=linux-ppc64 - ^dyninst@8.1.2%gcc@4.7.3 arch=linux-ppc64 - ^libdwarf@20130729%gcc@4.7.3 arch=linux-ppc64 - ^libelf@0.8.11%gcc@4.7.3 arch=linux-ppc64 - ^mpich@3.0.4%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-debian7-x86_64 + ^dyninst@8.1.2%gcc@4.7.3 arch=linux-debian7-x86_64 + ^libdwarf@20130729%gcc@4.7.3 arch=linux-debian7-x86_64 + ^libelf@0.8.11%gcc@4.7.3 arch=linux-debian7-x86_64 + ^mpich@3.0.4%gcc@4.7.3 arch=linux-debian7-x86_64 .. graphviz:: 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-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" - "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" - "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-ppc64" -> "libelf@0.8.11\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-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-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-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-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 @@ -1703,9 +1709,9 @@ running ``spack spec``. For example: ^libdwarf ^libelf - dyninst@8.0.1%gcc@4.7.3 arch=linux-ppc64 - ^libdwarf@20130729%gcc@4.7.3 arch=linux-ppc64 - ^libelf@0.8.13%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-debian7-x86_64 + ^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 you ask for a particular spec. @@ -2210,12 +2216,12 @@ example: def install(self, prefix): # Do default install - @when('arch=chaos_5_x86_64_ib') + @when('arch=linux-debian7-x86_64') def install(self, prefix): # This will be executed instead of the default install if # 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): # This will be executed if the package's sys_type is bgqos_0 @@ -2343,7 +2349,7 @@ build system. .. _sanity-checks: -Sanity checking an intallation +Sanity checking an installation -------------------------------- By default, Spack assumes that a build has failed if nothing is @@ -2863,11 +2869,11 @@ build it: $ spack stage libelf ==> Trying to fetch from http://www.mr511.de/software/libelf-0.8.13.tar.gz ######################################################################## 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 - ==> Created stage in /Users/gamblin2/src/spack/var/spack/stage/libelf@0.8.13%gcc@4.8.3 arch=linux-ppc64. + ==> 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-debian7-x86_64. $ spack cd libelf $ 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 directory containing the expanded ``libelf`` source code. There are a diff --git a/lib/spack/spack/build_environment.py b/lib/spack/spack/build_environment.py index 7220539886..fe5186a7d7 100644 --- a/lib/spack/spack/build_environment.py +++ b/lib/spack/spack/build_environment.py @@ -224,9 +224,12 @@ def set_compiler_environment_variables(pkg, 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 # the path. We add both spack.env_path, which includes default @@ -262,14 +265,26 @@ def set_build_environment_variables(pkg, env): # Install root prefix env.set(SPACK_INSTALL, spack.install_path) - # Remove these vars from the environment during build because they - # can affect how some packages find libraries. We want to make - # 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') + # Stuff in here sanitizes the build environemnt to eliminate + # anything the user has set that may interfere. + if not dirty: + # Remove these vars from the environment during build because they + # can affect how some packages find libraries. We want to make + # 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. bin_dirs = reversed( @@ -407,7 +422,7 @@ def load_external_modules(pkg): load_module(dep.external_module) -def setup_package(pkg): +def setup_package(pkg, dirty=False): """Execute all environment setup routines.""" spack_env = EnvironmentModifications() run_env = EnvironmentModifications() @@ -430,7 +445,7 @@ def setup_package(pkg): s.package.spec = s 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) # traverse in postorder so package can use vars from its dependencies spec = pkg.spec @@ -459,7 +474,7 @@ def setup_package(pkg): 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. Arguments: @@ -467,6 +482,7 @@ def fork(pkg, function): pkg -- pkg whose environemnt we should set up the forked process for. function -- arg-less function to run in the child process. + dirty -- If True, do NOT clean the environment before building. Usage: def child_fun(): @@ -490,7 +506,7 @@ def fork(pkg, function): if pid == 0: # Give the child process the package's build environment. - setup_package(pkg) + setup_package(pkg, dirty=dirty) try: # call the forked function. diff --git a/lib/spack/spack/cmd/create.py b/lib/spack/spack/cmd/create.py index f5f234d7a7..18c748e483 100644 --- a/lib/spack/spack/cmd/create.py +++ b/lib/spack/spack/cmd/create.py @@ -325,7 +325,7 @@ def create(parser, args): # Figure out a name and repo for the package. name, version = guess_name_and_version(url, args) 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) tty.msg("This looks like a URL for %s version %s" % (name, version)) diff --git a/lib/spack/spack/cmd/install.py b/lib/spack/spack/cmd/install.py index fadfa7f7c3..4c076322a9 100644 --- a/lib/spack/spack/cmd/install.py +++ b/lib/spack/spack/cmd/install.py @@ -54,6 +54,9 @@ def setup_parser(subparser): '--fake', action='store_true', dest='fake', 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( 'packages', nargs=argparse.REMAINDER, help="specs of packages to install") subparser.add_argument( '--run-tests', action='store_true', dest='run_tests', @@ -84,4 +87,5 @@ def install(parser, args): run_tests=args.run_tests, verbose=args.verbose, fake=args.fake, + dirty=args.dirty, explicit=True) diff --git a/lib/spack/spack/cmd/module.py b/lib/spack/spack/cmd/module.py index 3cefb512c2..70da689b67 100644 --- a/lib/spack/spack/cmd/module.py +++ b/lib/spack/spack/cmd/module.py @@ -108,7 +108,7 @@ def module_find(mtype, flags, spec_array): tty.die("No installed packages match spec %s" % raw_spec) if len(specs) > 1: - tty.error("Multiple matches for spec %s. Choose one:" % spec) + tty.error("Multiple matches for spec %s. Choose one:" % raw_spec) for s in specs: sys.stderr.write(s.tree(color=True)) sys.exit(1) diff --git a/lib/spack/spack/fetch_strategy.py b/lib/spack/spack/fetch_strategy.py index 69c04f7920..38133ee0ca 100644 --- a/lib/spack/spack/fetch_strategy.py +++ b/lib/spack/spack/fetch_strategy.py @@ -307,9 +307,6 @@ class URLFetchStrategy(FetchStrategy): if not self.archive_file: 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) @_needs_stage diff --git a/lib/spack/spack/package.py b/lib/spack/spack/package.py index bce6af9c02..74008c4dd9 100644 --- a/lib/spack/spack/package.py +++ b/lib/spack/spack/package.py @@ -886,6 +886,7 @@ class Package(object): run_tests=False, fake=False, explicit=False, + dirty=False, install_phases = install_phases): """Called by commands to install a package and its dependencies. @@ -902,6 +903,7 @@ class Package(object): fake -- Don't really build -- install fake stub files instead. skip_patch -- Skip patch stage of build if True. 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 run_tests -- Runn tests within the package's install() """ @@ -1045,7 +1047,7 @@ class Package(object): pass try: - spack.build_environment.fork(self, build_process) + spack.build_environment.fork(self, build_process, dirty=dirty) except: # remove the install prefix if anything went wrong during install. if not keep_prefix: diff --git a/lib/spack/spack/platforms/linux.py b/lib/spack/spack/platforms/linux.py index 4d8adac384..4d3f59c320 100644 --- a/lib/spack/spack/platforms/linux.py +++ b/lib/spack/spack/platforms/linux.py @@ -1,16 +1,23 @@ import subprocess +import platform from spack.architecture import Platform, Target from spack.operating_systems.linux_distro import LinuxDistro class Linux(Platform): priority = 90 - front_end = 'x86_64' - back_end = 'x86_64' - default = 'x86_64' def __init__(self): 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() self.default_os = str(linux_dist) self.front_os = self.default_os diff --git a/lib/spack/spack/test/mock_packages_test.py b/lib/spack/spack/test/mock_packages_test.py index e1acc32cb7..c8b06cd7d7 100644 --- a/lib/spack/spack/test/mock_packages_test.py +++ b/lib/spack/spack/test/mock_packages_test.py @@ -84,15 +84,6 @@ compilers: 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: - spec: clang@3.3 operating_system: yosemite paths: cc: /path/to/clang @@ -124,15 +115,6 @@ compilers: cxx: /path/to/g++ f77: /path/to/gfortran fc: /path/to/gfortran - operating_system: redhat6 - spec: gcc@4.5.0 - modules: 'None' -- compiler: - paths: - cc: /path/to/gcc - cxx: /path/to/g++ - f77: /path/to/gfortran - fc: /path/to/gfortran operating_system: yosemite spec: gcc@4.5.0 modules: 'None' diff --git a/lib/spack/spack/test/versions.py b/lib/spack/spack/test/versions.py index 4624f901c8..a3a328fb14 100644 --- a/lib/spack/spack/test/versions.py +++ b/lib/spack/spack/test/versions.py @@ -389,3 +389,39 @@ class VersionsTest(unittest.TestCase): self.assertEqual(v.dotted, '1.2.3') self.assertEqual(v.dashed, '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) diff --git a/lib/spack/spack/version.py b/lib/spack/spack/version.py index 858d581472..6839643941 100644 --- a/lib/spack/spack/version.py +++ b/lib/spack/spack/version.py @@ -44,6 +44,7 @@ be called on any of the types:: concrete """ import re +import numbers from bisect import bisect_left from functools import wraps @@ -194,10 +195,24 @@ class Version(object): return iter(self.version) 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): - return self.string + return 'Version(' + repr(self.string) + ')' def __str__(self): return self.string diff --git a/var/spack/repos/builtin/packages/arpack-ng/make_install.patch b/var/spack/repos/builtin/packages/arpack-ng/make_install.patch new file mode 100644 index 0000000000..ad5cffcc19 --- /dev/null +++ b/var/spack/repos/builtin/packages/arpack-ng/make_install.patch @@ -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 () diff --git a/var/spack/repos/builtin/packages/arpack-ng/package.py b/var/spack/repos/builtin/packages/arpack-ng/package.py index fcd5171a7d..d9021f8043 100644 --- a/var/spack/repos/builtin/packages/arpack-ng/package.py +++ b/var/spack/repos/builtin/packages/arpack-ng/package.py @@ -27,7 +27,8 @@ from spack import * 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: @@ -38,43 +39,76 @@ class ArpackNg(Package): Generalized Problems. * Routines for Banded Matrices - Standard or Generalized Problems. * Routines for The Singular Value Decomposition. - * Example driver routines that may be used as templates to implement numerous - Shift-Invert strategies for all problem types, data types and precision. + * Example driver routines that may be used as templates to implement + 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 - provide a common and maintained version of arpack. + This project is a joint project between Debian, Octave and Scilab in order + to provide a common and maintained version of arpack. - Indeed, no single release has been published by Rice university for the last - few years and since many software (Octave, Scilab, R, Matlab...) forked it and - implemented their own modifications, arpack-ng aims to tackle this by providing - a common repository and maintained versions. + Indeed, no single release has been published by Rice university for the + last few years and since many software (Octave, Scilab, R, Matlab...) + forked it and implemented their own modifications, arpack-ng aims to tackle + this by providing a common repository and maintained versions. arpack-ng is replacing arpack almost everywhere. """ homepage = 'https://github.com/opencollab/arpack-ng' url = 'https://github.com/opencollab/arpack-ng/archive/3.3.0.tar.gz' + version('3.4.0', 'ae9ca13f2143a7ea280cb0e2fd4bfae4') version('3.3.0', 'ed3648a23f0a868a43ef44c97a21bad5') variant('shared', default=True, description='Enables the build of shared libraries') 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 - 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('lapack') - depends_on('automake') - depends_on('autoconf') - depends_on('libtool@2.4.2:') + depends_on('automake', when='@3.3.0') + depends_on('autoconf', when='@3.3.0') + 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') + @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): # Apparently autotools are not bootstrapped - # TODO: switch to use the CMake build in the next version - # rather than bootstrapping. which('libtoolize')() bootstrap = Executable('./bootstrap') @@ -83,7 +117,7 @@ class ArpackNg(Package): if '+mpi' in spec: options.extend([ '--enable-mpi', - 'F77=mpif77' #FIXME: avoid hardcoding MPI wrapper names + 'F77=%s' % spec['mpi'].mpif77 ]) if '~shared' in spec: diff --git a/var/spack/repos/builtin/packages/arpack-ng/parpack_cmake.patch b/var/spack/repos/builtin/packages/arpack-ng/parpack_cmake.patch new file mode 100644 index 0000000000..9b11bea6ac --- /dev/null +++ b/var/spack/repos/builtin/packages/arpack-ng/parpack_cmake.patch @@ -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 () + diff --git a/var/spack/repos/builtin/packages/cereal/package.py b/var/spack/repos/builtin/packages/cereal/package.py index c53c667efb..80198fa224 100644 --- a/var/spack/repos/builtin/packages/cereal/package.py +++ b/var/spack/repos/builtin/packages/cereal/package.py @@ -31,6 +31,7 @@ class Cereal(Package): homepage = "http://uscilab.github.io/cereal/" url = "https://github.com/USCiLab/cereal/archive/v1.1.2.tar.gz" + version('1.2.0', 'e372c9814696481dbdb7d500e1410d2b') version('1.1.2', '34d4ad174acbff005c36d4d10e48cbb9') version('1.1.1', '0ceff308c38f37d5b5f6df3927451c27') version('1.1.0', '9f2d5f72e935c54f4c6d23e954ce699f') diff --git a/var/spack/repos/builtin/packages/docbook-xml/package.py b/var/spack/repos/builtin/packages/docbook-xml/package.py index 9c22174610..87137168f3 100644 --- a/var/spack/repos/builtin/packages/docbook-xml/package.py +++ b/var/spack/repos/builtin/packages/docbook-xml/package.py @@ -23,7 +23,6 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## import os -import glob from spack import * @@ -35,9 +34,10 @@ class DocbookXml(Package): version('4.5', '03083e288e87a7e829e437358da7ef9e') def install(self, spec, prefix): - cp = which('cp') - - install_args = ['-a', '-t', prefix] - install_args.extend(glob.glob('*')) - - cp(*install_args) + for item in os.listdir('.'): + src = os.path.abspath(item) + dst = os.path.join(prefix, item) + if os.path.isdir(item): + install_tree(src, dst, symlinks=True) + else: + install(src, dst) diff --git a/var/spack/repos/builtin/packages/libjson-c/package.py b/var/spack/repos/builtin/packages/libjson-c/package.py index 75f3e130ad..662ed3cb5a 100644 --- a/var/spack/repos/builtin/packages/libjson-c/package.py +++ b/var/spack/repos/builtin/packages/libjson-c/package.py @@ -24,6 +24,7 @@ ############################################################################## from spack import * + class LibjsonC(Package): """ A JSON implementation in C """ homepage = "https://github.com/json-c/json-c/wiki" @@ -34,5 +35,5 @@ class LibjsonC(Package): def install(self, spec, prefix): configure('--prefix=%s' % prefix) - make() + make(parallel=False) make("install") diff --git a/var/spack/repos/builtin/packages/lua/package.py b/var/spack/repos/builtin/packages/lua/package.py index 761932361b..48c1c6a919 100644 --- a/var/spack/repos/builtin/packages/lua/package.py +++ b/var/spack/repos/builtin/packages/lua/package.py @@ -140,11 +140,11 @@ class Lua(Package): @property 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 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): """ diff --git a/var/spack/repos/builtin/packages/oce/package.py b/var/spack/repos/builtin/packages/oce/package.py index 0f0fcfb733..06b6b7cbb0 100644 --- a/var/spack/repos/builtin/packages/oce/package.py +++ b/var/spack/repos/builtin/packages/oce/package.py @@ -23,20 +23,22 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## from spack import * -import platform, sys +import platform + class Oce(Package): - """ - Open CASCADE Community Edition: - patches/improvements/experiments contributed by users over the official Open CASCADE library. + """Open CASCADE Community Edition: + patches/improvements/experiments contributed by users over the official + Open CASCADE library. """ homepage = "https://github.com/tpaviot/oce" 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' , 'f1a89395c4b0d199bea3db62b85f818d') + version('0.17', 'f1a89395c4b0d199bea3db62b85f818d') version('0.16.1', '4d591b240c9293e879f50d86a0cb2bb3') - version('0.16' , '7a4b4df5a104d75a537e25e7dd387eca') + version('0.16', '7a4b4df5a104d75a537e25e7dd387eca') 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 # https://github.com/tpaviot/oce/issues/605 # 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): options = [] @@ -63,7 +64,8 @@ class Oce(Package): '-DOCE_DISABLE_X11:BOOL=ON', '-DOCE_DRAW:BOOL=OFF', '-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_USE_TCL_TEST_FRAMEWORK:BOOL=OFF', '-DOCE_VISUALISATION:BOOL=OFF', @@ -77,15 +79,8 @@ class Oce(Package): '-DOCE_OSX_USE_COCOA:BOOL=ON', ]) - cmake('.', *options) + options.append('-DCMAKE_INSTALL_NAME_DIR:PATH=%s/lib' % prefix) + cmake('.', *options) make("install/strip") - - # 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) + make("test") diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py index 377bffe723..e7c105d5f5 100644 --- a/var/spack/repos/builtin/packages/openssl/package.py +++ b/var/spack/repos/builtin/packages/openssl/package.py @@ -35,7 +35,7 @@ class Openssl(Package): Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library.""" 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.1r', '1abd905e079542ccae948af37e393d28') @@ -50,21 +50,25 @@ class Openssl(Package): parallel = False def url_for_version(self, version): - # This URL is computed pinging the place where the latest version is 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 + # This URL is computed pinging the place where the latest version is + # 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_url = openssl_urls.get(version, None) # Same idea, but just to avoid issuing the same message multiple times warnings_given_to_user = getattr(Openssl, '_warnings_given', {}) if openssl_url is None: - if self.spec.satisfies('@external'): - # The version @external is reserved to system openssl. In that case return a fake url and exit - openssl_url = '@external (reserved version for system openssl)' + if self.spec.satisfies('@system'): + # The version @system is reserved to system openssl. In that + # case return a fake url and exit + openssl_url = '@system (reserved version for system openssl)' 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 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 # Store the updated dictionary of URLS Openssl._openssl_url = openssl_urls @@ -75,45 +79,55 @@ class Openssl(Package): def check_for_outdated_release(self, version, warnings_given_to_user): latest = 'ftp://ftp.openssl.org/source/openssl-{version}.tar.gz' - older = 'http://www.openssl.org/source/old/{version_number}/openssl-{version_full}.tar.gz' - # Try to use the url where the latest tarballs are stored. If the url does not exist (404), then - # return the url for older format + 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 return the url for + # older format version_number = '.'.join([str(x) for x in version[:-1]]) try: openssl_url = latest.format(version=version) urllib.urlopen(openssl_url) except IOError: - openssl_url = older.format(version_number=version_number, version_full=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 + openssl_url = older.format( + version_number=version_number, version_full=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): tty.warn( - 'This installation depends on an old version of OpenSSL, which may have known security issues. ') - tty.warn('Consider updating to the latest version of this package.') - tty.warn('More details at {homepage}'.format(homepage=Openssl.homepage)) + 'This installation depends on an old version of OpenSSL, ' + 'which may have known security issues. ') + 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 return openssl_url + def install(self, spec, prefix): # 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 # Makefile, leading to build errors. 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, # where it happens automatically?) env['KERNEL_BITS'] = '64' - config = Executable("./config") - config("--prefix=%s" % prefix, - "--openssldir=%s" % join_path(prefix, 'etc', 'openssl'), - "zlib", - "no-krb5", - "shared") + + options = ['zlib', 'no-krb5', 'shared'] + + config = Executable('./config') + config('--prefix=%s' % prefix, + '--openssldir=%s' % join_path(prefix, 'etc', 'openssl'), + *options) + # Remove non-standard compiler options if present. These options are # present e.g. on Darwin. They are non-standard, i.e. most compilers # (e.g. gcc) will not accept them. filter_file(r'-arch x86_64', '', 'Makefile') make() - make("install") + make('install') diff --git a/var/spack/repos/builtin/packages/py-h5py/package.py b/var/spack/repos/builtin/packages/py-h5py/package.py index 0180b658f5..67461babe7 100644 --- a/var/spack/repos/builtin/packages/py-h5py/package.py +++ b/var/spack/repos/builtin/packages/py-h5py/package.py @@ -43,8 +43,8 @@ class PyH5py(Package): # Build dependencies depends_on('py-cython@0.19:') depends_on('pkg-config') - depends_on('hdf5@1.8.4:+mpi', when='+mpi') - depends_on('hdf5@1.8.4:~mpi', when='~mpi') + depends_on('hdf5@1.8.4:') + depends_on('hdf5+mpi', when='+mpi') depends_on('mpi', when='+mpi') # Build and runtime dependencies diff --git a/var/spack/repos/builtin/packages/python/package.py b/var/spack/repos/builtin/packages/python/package.py index 8033c52b91..d019133585 100644 --- a/var/spack/repos/builtin/packages/python/package.py +++ b/var/spack/repos/builtin/packages/python/package.py @@ -47,6 +47,8 @@ class Python(Package): extendable = True + variant('ucs4', default=False, description='Enable UCS4 unicode strings') + depends_on("openssl") depends_on("bzip2") depends_on("readline") @@ -82,6 +84,9 @@ class Python(Package): "LDFLAGS=-L{0}".format(ldflags) ] + if '+ucs4' in spec: + config_args.append('--enable-unicode=ucs4') + if spec.satisfies('@3:'): config_args.append('--without-ensurepip') diff --git a/var/spack/repos/builtin/packages/r-bh/package.py b/var/spack/repos/builtin/packages/r-bh/package.py new file mode 100644 index 0000000000..a0f30b779f --- /dev/null +++ b/var/spack/repos/builtin/packages/r-bh/package.py @@ -0,0 +1,54 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-colorspace/package.py b/var/spack/repos/builtin/packages/r-colorspace/package.py new file mode 100644 index 0000000000..a7622cad95 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-colorspace/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-dichromat/package.py b/var/spack/repos/builtin/packages/r-dichromat/package.py new file mode 100644 index 0000000000..663e5295af --- /dev/null +++ b/var/spack/repos/builtin/packages/r-dichromat/package.py @@ -0,0 +1,42 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-ggplot2/package.py b/var/spack/repos/builtin/packages/r-ggplot2/package.py new file mode 100644 index 0000000000..2d1f53af26 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-ggplot2/package.py @@ -0,0 +1,54 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-gridextra/package.py b/var/spack/repos/builtin/packages/r-gridextra/package.py new file mode 100644 index 0000000000..d215d10678 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-gridextra/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-gtable/package.py b/var/spack/repos/builtin/packages/r-gtable/package.py new file mode 100644 index 0000000000..74dee0b3d5 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-gtable/package.py @@ -0,0 +1,41 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-inline/package.py b/var/spack/repos/builtin/packages/r-inline/package.py new file mode 100644 index 0000000000..35eb8ca76f --- /dev/null +++ b/var/spack/repos/builtin/packages/r-inline/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-labeling/package.py b/var/spack/repos/builtin/packages/r-labeling/package.py new file mode 100644 index 0000000000..02e5da9d85 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-labeling/package.py @@ -0,0 +1,41 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-lattice/package.py b/var/spack/repos/builtin/packages/r-lattice/package.py new file mode 100644 index 0000000000..ba29feefc4 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-lattice/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-magrittr/package.py b/var/spack/repos/builtin/packages/r-magrittr/package.py new file mode 100644 index 0000000000..11476c3d1e --- /dev/null +++ b/var/spack/repos/builtin/packages/r-magrittr/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-mass/package.py b/var/spack/repos/builtin/packages/r-mass/package.py new file mode 100644 index 0000000000..1ab01d2256 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-mass/package.py @@ -0,0 +1,42 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-matrix/package.py b/var/spack/repos/builtin/packages/r-matrix/package.py new file mode 100644 index 0000000000..fbd8a7b4df --- /dev/null +++ b/var/spack/repos/builtin/packages/r-matrix/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-munsell/package.py b/var/spack/repos/builtin/packages/r-munsell/package.py new file mode 100644 index 0000000000..3216c95e00 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-munsell/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-plyr/package.py b/var/spack/repos/builtin/packages/r-plyr/package.py new file mode 100644 index 0000000000..192e7e8b18 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-plyr/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py b/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py new file mode 100644 index 0000000000..b81ec2561c --- /dev/null +++ b/var/spack/repos/builtin/packages/r-rcolorbrewer/package.py @@ -0,0 +1,42 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-rcpp/package.py b/var/spack/repos/builtin/packages/r-rcpp/package.py new file mode 100644 index 0000000000..2428f4af3b --- /dev/null +++ b/var/spack/repos/builtin/packages/r-rcpp/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-rcppeigen/package.py b/var/spack/repos/builtin/packages/r-rcppeigen/package.py new file mode 100644 index 0000000000..3175628a73 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-rcppeigen/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-reshape2/package.py b/var/spack/repos/builtin/packages/r-reshape2/package.py new file mode 100644 index 0000000000..a96a314008 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-reshape2/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-rstan/package.py b/var/spack/repos/builtin/packages/r-rstan/package.py new file mode 100644 index 0000000000..00fd5116d9 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-rstan/package.py @@ -0,0 +1,57 @@ +############################################################################## +# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC. +# Produced at the Lawrence Livermore National Laboratory. +# +# This file is part of Spack. +# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. +# LLNL-CODE-647188 +# +# For details, see https://github.com/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) diff --git a/var/spack/repos/builtin/packages/r-scales/package.py b/var/spack/repos/builtin/packages/r-scales/package.py new file mode 100644 index 0000000000..046a05d48e --- /dev/null +++ b/var/spack/repos/builtin/packages/r-scales/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-stanheaders/package.py b/var/spack/repos/builtin/packages/r-stanheaders/package.py new file mode 100644 index 0000000000..c77b5aa8b6 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-stanheaders/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-stringi/package.py b/var/spack/repos/builtin/packages/r-stringi/package.py new file mode 100644 index 0000000000..22774dedec --- /dev/null +++ b/var/spack/repos/builtin/packages/r-stringi/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/r-stringr/package.py b/var/spack/repos/builtin/packages/r-stringr/package.py new file mode 100644 index 0000000000..01fd969522 --- /dev/null +++ b/var/spack/repos/builtin/packages/r-stringr/package.py @@ -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) diff --git a/var/spack/repos/builtin/packages/ruby/package.py b/var/spack/repos/builtin/packages/ruby/package.py index dd71913fc9..8dc314c171 100644 --- a/var/spack/repos/builtin/packages/ruby/package.py +++ b/var/spack/repos/builtin/packages/ruby/package.py @@ -35,9 +35,20 @@ class Ruby(Package): extendable = True 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): - 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("install") diff --git a/var/spack/repos/builtin/packages/suite-sparse/package.py b/var/spack/repos/builtin/packages/suite-sparse/package.py index dd0dfa3e23..2cc89b843f 100644 --- a/var/spack/repos/builtin/packages/suite-sparse/package.py +++ b/var/spack/repos/builtin/packages/suite-sparse/package.py @@ -33,6 +33,7 @@ class SuiteSparse(Package): url = 'http://faculty.cse.tamu.edu/davis/SuiteSparse/SuiteSparse-4.5.1.tar.gz' version('4.5.1', 'f0ea9aad8d2d1ffec66a5b6bfeff5319') + version('4.5.3', '8ec57324585df3c6483ad7f556afccbd') # FIXME: (see below) # variant('tbb', default=True, description='Build with Intel TBB') @@ -40,34 +41,35 @@ class SuiteSparse(Package): depends_on('blas') depends_on('lapack') - depends_on('metis@5.1.0', when='@4.5.1') + depends_on('metis@5.1.0', when='@4.5.1:') # FIXME: - # in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng flags - # does not seem to be used, which leads to linking errors on Linux. + # in @4.5.1. TBB support in SPQR seems to be broken as TBB-related linkng + # flags does not seem to be used, which leads to linking errors on Linux. # Try re-enabling in future versions. # depends_on('tbb', when='+tbb') def install(self, spec, prefix): - # The build system of SuiteSparse is quite old-fashioned - # It's basically a plain Makefile which include an header (SuiteSparse_config/SuiteSparse_config.mk) - # with a lot of convoluted logic in it. - # Any kind of customization will need to go through filtering of that file + # The build system of SuiteSparse is quite old-fashioned. + # It's basically a plain Makefile which include an header + # (SuiteSparse_config/SuiteSparse_config.mk)with a lot of convoluted + # logic in it. Any kind of customization will need to go through + # filtering of that file make_args = ['INSTALL=%s' % prefix] # inject Spack compiler wrappers make_args.extend([ - 'AUTOCC=no', - 'CC=cc', - 'CXX=c++', - 'F77=f77', + 'AUTOCC=no', + 'CC=cc', + 'CXX=c++', + 'F77=f77', ]) # use Spack's metis in CHOLMOD/Partition module, # otherwise internal Metis will be compiled make_args.extend([ - 'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib, - 'MY_METIS_INC=%s' % spec['metis'].prefix.include, + 'MY_METIS_LIB=-L%s -lmetis' % spec['metis'].prefix.lib, + 'MY_METIS_INC=%s' % spec['metis'].prefix.include, ]) # Intel TBB in SuiteSparseQR @@ -78,10 +80,13 @@ class SuiteSparse(Package): ]) # BLAS arguments require path to libraries - # FIXME : (blas / lapack always provide libblas and liblapack as aliases) - make_args.extend([ - 'BLAS=-lblas', - 'LAPACK=-llapack' - ]) + # FIXME: (blas/lapack always provide libblas and liblapack as aliases) + if '@4.5.1' in spec: + # adding -lstdc++ is clearly an ugly way to do this, but it follows + # with the TCOV path of SparseSuite 4.5.1's Suitesparse_config.mk + make_args.extend([ + 'BLAS=-lblas -lstdc++', + 'LAPACK=-llapack' + ]) make('install', *make_args) |