-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #558 from adamjstewart/features/pgi
Add Licensed Software Support
- Loading branch information
Showing
7 changed files
with
446 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
import os | ||
|
||
import spack | ||
import llnl.util.tty as tty | ||
from llnl.util.filesystem import join_path | ||
|
||
|
||
def pre_install(pkg): | ||
"""This hook handles global license setup for licensed software.""" | ||
if pkg.license_required: | ||
set_up_license(pkg) | ||
|
||
|
||
def set_up_license(pkg): | ||
"""Prompt the user, letting them know that a license is required. | ||
For packages that rely on license files, a global license file is | ||
created and opened for editing. | ||
For packages that rely on environment variables to point to a | ||
license, a warning message is printed. | ||
For all other packages, documentation on how to set up a license | ||
is printed.""" | ||
|
||
# If the license can be stored in a file, create one | ||
if pkg.license_files: | ||
license_path = pkg.global_license_file | ||
if not os.path.exists(license_path): | ||
# Create a new license file | ||
write_license_file(pkg, license_path) | ||
# Open up file in user's favorite $EDITOR for editing | ||
spack.editor(license_path) | ||
tty.msg("Added global license file %s" % license_path) | ||
else: | ||
# Use already existing license file | ||
tty.msg("Found already existing license %s" % license_path) | ||
|
||
# If not a file, what about an environment variable? | ||
elif pkg.license_vars: | ||
tty.warn("A license is required to use %s. Please set %s to the " | ||
"full pathname to the license file, or port@host if you" | ||
" store your license keys on a dedicated license server" % | ||
(pkg.name, ' or '.join(pkg.license_vars))) | ||
|
||
# If not a file or variable, suggest a website for further info | ||
elif pkg.license_url: | ||
tty.warn("A license is required to use %s. See %s for details" % | ||
(pkg.name, pkg.license_url)) | ||
|
||
# If all else fails, you're on your own | ||
else: | ||
tty.warn("A license is required to use %s" % pkg.name) | ||
|
||
|
||
def write_license_file(pkg, license_path): | ||
"""Writes empty license file. | ||
Comments give suggestions on alternative methods of | ||
installing a license.""" | ||
|
||
comment = pkg.license_comment | ||
|
||
# Global license directory may not already exist | ||
if not os.path.exists(os.path.dirname(license_path)): | ||
os.makedirs(os.path.dirname(license_path)) | ||
license = open(license_path, 'w') | ||
|
||
# License files | ||
license.write("""\ | ||
{0} A license is required to use {1}. | ||
{0} | ||
{0} The recommended solution is to store your license key in this global | ||
{0} license file. After installation, the following symlink(s) will be | ||
{0} added to point to this file (relative to the installation prefix): | ||
{0} | ||
""".format(comment, pkg.name)) | ||
|
||
for filename in pkg.license_files: | ||
license.write("{0}\t{1}\n".format(comment, filename)) | ||
|
||
license.write("{0}\n".format(comment)) | ||
|
||
# Environment variables | ||
if pkg.license_vars: | ||
license.write("""\ | ||
{0} Alternatively, use one of the following environment variable(s): | ||
{0} | ||
""".format(comment)) | ||
|
||
for var in pkg.license_vars: | ||
license.write("{0}\t{1}\n".format(comment, var)) | ||
|
||
license.write("""\ | ||
{0} | ||
{0} If you choose to store your license in a non-standard location, you may | ||
{0} set one of these variable(s) to the full pathname to the license file, or | ||
{0} port@host if you store your license keys on a dedicated license server. | ||
{0} You will likely want to set this variable in a module file so that it | ||
{0} gets loaded every time someone tries to use {1}. | ||
{0} | ||
""".format(comment, pkg.name)) | ||
|
||
# Documentation | ||
if pkg.license_url: | ||
license.write("""\ | ||
{0} For further information on how to acquire a license, please refer to: | ||
{0} | ||
{0}\t{1} | ||
{0} | ||
""".format(comment, pkg.license_url)) | ||
|
||
license.write("""\ | ||
{0} You may enter your license below. | ||
""".format(comment)) | ||
|
||
license.close() | ||
|
||
|
||
def post_install(pkg): | ||
"""This hook symlinks local licenses to the global license for | ||
licensed software.""" | ||
if pkg.license_required: | ||
symlink_license(pkg) | ||
|
||
|
||
def symlink_license(pkg): | ||
"""Create local symlinks that point to the global license file.""" | ||
target = pkg.global_license_file | ||
for filename in pkg.license_files: | ||
link_name = join_path(pkg.prefix, filename) | ||
if os.path.exists(target): | ||
os.symlink(target, link_name) | ||
tty.msg("Added local symlink %s to global license file" % | ||
link_name) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
from spack import * | ||
|
||
|
||
class AllineaForge(Package): | ||
"""Allinea Forge is the complete toolsuite for software development - with | ||
everything needed to debug, profile, optimize, edit and build C, C++ and | ||
Fortran applications on Linux for high performance - from single threads | ||
through to complex parallel HPC codes with MPI, OpenMP, threads or CUDA.""" | ||
|
||
homepage = "http://www.allinea.com/products/develop-allinea-forge" | ||
|
||
version('6.0.4', 'df7f769975048477a36f208d0cd57d7e') | ||
|
||
# Licensing | ||
license_required = True | ||
license_comment = '#' | ||
license_files = ['licences/Licence'] | ||
license_vars = ['ALLINEA_LICENCE_FILE', 'ALLINEA_LICENSE_FILE'] | ||
license_url = 'http://www.allinea.com/user-guide/forge/Installation.html' | ||
|
||
def url_for_version(self, version): | ||
# TODO: add support for other architectures/distributions | ||
url = "http://content.allinea.com/downloads/" | ||
return url + "allinea-forge-%s-Redhat-6.0-x86_64.tar" % version | ||
|
||
def install(self, spec, prefix): | ||
textinstall = which('textinstall.sh') | ||
textinstall('--accept-licence', prefix) |
28 changes: 28 additions & 0 deletions
28
var/spack/repos/builtin/packages/allinea-reports/package.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
from spack import * | ||
|
||
|
||
class AllineaReports(Package): | ||
"""Allinea Performance Reports are the most effective way to characterize | ||
and understand the performance of HPC application runs. One single-page | ||
HTML report elegantly answers a range of vital questions for any HPC site | ||
""" | ||
|
||
homepage = "http://www.allinea.com/products/allinea-performance-reports" | ||
|
||
version('6.0.4', '3f13b08a32682737bc05246fbb2fcc77') | ||
|
||
# Licensing | ||
license_required = True | ||
license_comment = '#' | ||
license_files = ['licences/Licence'] | ||
license_vars = ['ALLINEA_LICENCE_FILE', 'ALLINEA_LICENSE_FILE'] | ||
license_url = 'http://www.allinea.com/user-guide/reports/Installation.html' | ||
|
||
def url_for_version(self, version): | ||
# TODO: add support for other architectures/distributions | ||
url = "http://content.allinea.com/downloads/" | ||
return url + "allinea-reports-%s-Redhat-6.0-x86_64.tar" % version | ||
|
||
def install(self, spec, prefix): | ||
textinstall = which('textinstall.sh') | ||
textinstall('--accept-licence', prefix) |
Oops, something went wrong.