Repository: spack/spack

Issue:
Unify convention to mark external packages provided by the system
 #721 assumes external packages pointing to system libraries to be using the `@system` version, the `openssl` package instead assumes `@external`. I think we should set for one of the two name (I don't mind which) and correct the other.



Discussion:
I agree.  Any votes on which name to use?  If there are no preferences, I nominate that @alalazo do whatever he thinks is best.

I'm tempted to go with `system`, as there's already a concept of "external" packages but they're not necessarily "system" packages.  `system` as you're using it is just a placeholder that means you don't care about versioning for that particular package, and you expect the system to upgrade it in place. "external" packages can also be outside spack as part of the "system", but you can also be specific about their versions, compilers, etc.


Resolving patch:
diff --git a/var/spack/repos/builtin/packages/openssl/package.py b/var/spack/repos/builtin/packages/openssl/package.py
--- 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,24 @@ 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')  # NOQA: ignore=E501
                     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,22 +78,23 @@ def url_for_version(self, version):
 
     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)  # NOQA:ignore=E501
+            # 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))
+                tty.warn('This installation depends on an old version of OpenSSL, which may have known security issues. ')    # NOQA: ignore=E501
+                tty.warn('Consider updating to the latest version of this package.')  # NOQA: ignore=E501
+                tty.warn('More details at {homepage}'.format(homepage=Openssl.homepage))   # NOQA: ignore=E501
                 warnings_given_to_user[version] = True
 
         return openssl_url


Test patch: