A flexible package manager that supports multiple versions, configurations, platforms, and compilers.
Go to file
George Hartzell 58567a2182 Adjustments to get gtkplus to build (#3208)
* Hackery to get gtkplus to build

PR #3077 broke gtkplus by introducing gobject-introspection.

This big hack makes things work.  It has problems.

1. Rather than deal with the nasty sbang fooey in the
   g-ir-tool-template.in derived scripts, it just adds a python
   dependency to each package that runs one of the scripts.  This lets
   the `/usr/bin/env python` sbang do the right thing.

2. It stuffs a several directories on to the XDG_DATA_DIRS environment
   variable, which is used for (among other things) locating the .gir
   files.

3. It avoids building the gtkplus demos because I can't make the bit
   that calls `gdk-pixbuf-csource` work.  It doesn't think that it can
   load `.png` files and all of the google hits I found suggest a bad
   `loader.cache` file.  The file's fine and I can strace the command
   and watch it read it in...  Many, many hours wasted here.

   In spite of the demo failing, the tests pass and an emacs built
   with this lib seems to work.

* Fix sbang so everyone needn't depend_on python

Rather than have every package that
`depends_on('gobject-introspection')` also need to
`depend_on('python')`, this commit fixes the
scripts (e.g. `g-ir-scanner`).

The interesting bit is in the gobject-introspection package.  There is
a beefy comment there that is included below.

The commit also removes the now un-necessary dependencies from various
packages.

I have two reservations about this commit:

1. How portable is the "insertion" sed command?  I'm particularly
   worried that some sed's might need the line to insert to be on a
   different line, which I can't imagine how to cram into the
   Makefile.in.

   The solution I see to this is rather than extending the existing
   sed command in the Makefile I could shim in another line in the
   rule and e.g. call a bit of Perl (or Python, I suppose) which would
   end up being much neater.

2. As written it always uses Spack's `.../bin/sbang`, which might or
   might not be a good idea.

   If I use "the solution" from number 1 above, then I can check the
   line length before I munge it.  Otherwise???

---

 This package creates several scripts from                                                                                                |
 toosl/g-ir-tool-template.in.  In their original form these                                                                               |
 scripts end up with a sbang line like                                                                                                    |
                                                                                                                                          |
 `#!/usr/bin/env /path/to/spack/python`.                                                                                                  |
                                                                                                                                          |
 These scripts are generated and then used as part of the build                                                                           |
 (other packages also use the scripts after they've been                                                                                  |
 installed).                                                                                                                              |
                                                                                                                                          |
 The path to the spack python can become too long.  Because these                                                                         |
 tools are used as part of the build, the normal hook that fixes                                                                          |
 this problem can't help us.                                                                                                              |
 This package fixes the problem in two steps:                                                                                             |
 - it rewrites the g-ir-tool-template so that its sbang line                                                                              |
   refers directly to spack's python (filter_file step below); and                                                                        |
 - it patches the Makefile.in so that the generated Makefile has an                                                                       |
   extra sed expression in its TOOL_SUBSTITUTION that results in                                                                          |
   an `#!/bin/bash /path/to/spack/bin/sbang` unconditionally being                                                                        |
   inserted into the scripts as they're generated.                                                                                        |

* Cairo needs python when it's +X

Cairo needs to depend_on python when it's +X.  I think it's an
indirect requirement that's coming in via libxcb).

* Flake8 cleanup

* Make cairo's dep on python be type=build

This seems to be the right thing and seems to produce a result
that works (I can build gtk+ and then emacs+X on top of it).
2017-04-27 11:04:26 -05:00
bin Spack works with Python 3 2017-03-31 13:40:41 -07:00
etc/spack/defaults Allow users to set parallel jobs in config.yaml (#3812) 2017-04-15 08:31:00 -07:00
lib/spack Convert rest docstrings to Google docstrings. (#3994) 2017-04-27 07:45:34 -07:00
share/spack Coverage for multiple Python versions. (#3951) 2017-04-21 17:41:30 -07:00
var/spack Adjustments to get gtkplus to build (#3208) 2017-04-27 11:04:26 -05:00
.codecov.yml qa: adjust thresholds for acceptance (#3105) 2017-02-09 08:31:57 -08:00
.coveragerc unit tests: replace nose with pytest (#2502) 2016-12-29 07:48:48 -08:00
.flake8 Properly ignore flake8 F811 redefinition errors (#3932) 2017-04-25 11:01:25 -07:00
.gitignore unit tests: replace nose with pytest (#2502) 2016-12-29 07:48:48 -08:00
.mailmap Update mail map. So many email aliases. 2016-10-19 22:47:39 -07:00
.travis.yml Coverage for multiple Python versions. (#3951) 2017-04-21 17:41:30 -07:00
LICENSE Correct LLNL LGPL license template for clarity. 2016-05-11 21:22:25 -07:00
pytest.ini unit tests: replace nose with pytest (#2502) 2016-12-29 07:48:48 -08:00
README.md Spack works with Python 3 2017-03-31 13:40:41 -07:00

image

Build Status codecov

Spack is a package management tool designed to support multiple versions and configurations of software on a wide variety of platforms and environments. It was designed for large supercomputing centers, where many users and application teams share common installations of software on clusters with exotic architectures, using libraries that do not have a standard ABI. Spack is non-destructive: installing a new version does not break existing installations, so many configurations can coexist on the same system.

Most importantly, Spack is simple. It offers a simple spec syntax so that users can specify versions and configuration options concisely. Spack is also simple for package authors: package files are written in pure Python, and specs allow package authors to write a single build script for many different builds of the same package.

See the Feature Overview for examples and highlights.

To install spack and install your first package, make sure you have Python (2 or 3). Then:

$ git clone https://github.com/llnl/spack.git
$ cd spack/bin
$ ./spack install libelf

Documentation

Full documentation for Spack is the first place to look.

We've also got a Spack 101 Tutorial, so you can learn Spack yourself, or teach users at your own site.

See also:

Get Involved!

Spack is an open source project. Questions, discussion, and contributions are welcome. Contributions can be anything from new packages to bugfixes, or even new core features.

Mailing list

If you are interested in contributing to spack, the first step is to join the mailing list. We're using a Google Group for this, and you can join it here:

Contributions

Contributing to Spack is relatively easy. Just send us a pull request. When you send your request, make develop the destination branch on the Spack repository.

Your PR must pass Spack's unit tests and documentation tests, and must be PEP 8 compliant. We enforce these guidelines with Travis CI. To run these tests locally, and for helpful tips on git, see our Contribution Guide.

Spack uses a rough approximation of the Git Flow branching model. The develop branch contains the latest contributions, and master is always tagged and points to the latest stable release.

Authors

Many thanks go to Spack's contributors.

Spack was originally written by Todd Gamblin, tgamblin@llnl.gov.

Citing Spack

If you are referencing Spack in a publication, please cite the following paper:

Release

Spack is released under an LGPL license. For more details see the LICENSE file.

LLNL-CODE-647188