Sometimes when remove_file is called on a link, that link is missing
(perhaps ctrl-C happened halfway through a previous action). As
removing a non-existent file is no problem, this patch changes the
behavior so Spack continues rather than stopping with an error.
Currently you would see
ValueError: /path/to/dir is not a link tree!
and now it continues with a warning.
Unlike the compiler binary name search logic, the `setup_environment` in
GCC's package assumes the compiler names are *exactly* `gcc`, `g++`,
etc. In many external installations (Homebrew, Macports) the
installation includes only *suffixed* versions such as `gcc-9`.
This patch uses the GCC compiler search suffixes to actually locate the
correct filenames for the installed compilers, allowing the
Spack-generated module file to have useful definitions of CC, CXX, etc.
It also allows for the possibility that the user's external installation
of GCC is compiled without Fortran support, in which case the `FC`
environment variables are not defined.
bin/spack now needs to have a "-*- python -*-" line after the shebang, so
that emacs will interpret it as a python file instead of as a shell
script. Add one line to the license check limit to accommodate this.
The Python landscape is going to be changing in 2020, and Python 2 will
be end of life. Spack should *prefer* Python 3 to Python 2 by default,
but we still need to run on systems that only have Python2 available.
This is trickier than it sounds, as on some systems, the `python` command
is `python2`; on others it's `python3`, and RHEL8 doesn't even have the
`python` command. Instead, it makes you choose `python3` or
`python2`. You can thus no longer make a simple shebang to handle all the
cases.
This commit makes the `spack` script bilingual. It is still valid
Python, but its shebang is `#!/bin/sh`, and it has a tiny bit of shell
code at the beginning to pick the right python and execute itself with
what it finds.
This has a lot of advantages. I think this will help ensure that Spack
works well in Python3 -- there are cases where we've missed things
because Python2 is still the default `python` on most systems. Also,
with this change, you do not lose the ability to execute the `spack`
script directly with a python interpreter. This is useful for forcing
your own version of python, running coverage tools, and running profiling
tools. i.e., these will not break with this change:
```console
$ python2 $(which spack) <args>
$ coverage run $(which spack) <args>
$ pyinstrument $(which spack) <args>
```
These would not work if we split `spack` into a python file and a shell
script (see #11783). So, this gives us the best of both worlds. We get
to control our interpreter *and* remain a mostly pure python executable.
* The perl-uri-escape package duplicates perl-uri
The Perl URI::Escape module is in the Perl URI package so the Spack
perl-uri-escape package is a duplicate of the perl-uri package. This PR
does the following:
- replace `depends_on('perl-uri-escape')` with `depends_on('perl-uri')`
in packages that dependend on perl-uri-escape
- add the version from perl-uri-escape to perl-uri
- remove the unneeded dependency from perl-uri
- remove the perl-uri-escape package
* Reinstated perl-test-needs dependency
Put the perl-test-needs dependency for perl-uri back in but set it to
type='test'.
* For tests to succeed the type must be ('build', 'test')
Now that Spack injects microarchitecture specific optimizations for
the selected target, packages should avoid adding flags that could
step over those.
This PR adds interproscan-4.8, which has a completely different build
system than version 5. Note that this builds for running on a host as
opposed to a queue system. I am fairly certain that a queue system can
be configured later.
This PR also adds a patch for intrproscan-5 to build when the user
building the packages has a large GID by setting posix mode for tar.
* llvm: fixed issues with syntax and formatting
* use spec.architecture.target.family
* use spec.target instead of spec.architecture.target
* mesa: use == instead of __contains__
A function added to this package ran as part of importing it and
printed a warning for most Spack invocations, this removes the
warning message.
Also:
* Use compilers directly instead of Spack compiler wrappers (since
references to the compiler are embedded in text and binary files
of the installation)
* Add 'cross' variant for setting CROSS environment variable for
build
* Set UPCXX_INSTALL for generated module files
* Set UPCXX_GASNET_CONDUIT/UPCXX_NETWORK in generated module files
on Cray systems
* Also set UPCXX_NETWORK in build environment for Cray systems
The output of subprocess.check_output is a byte string in Python 3. This causes dictionary lookup to fail later on.
A try-except around this function prevented this error from being noticed. Removed this so that more errors can propagate out.