From 8ae50ae8bbdd823c4ac3108c7bc835a543329eb3 Mon Sep 17 00:00:00 2001 From: Pramod S Kumbhar Date: Fri, 16 Feb 2018 02:26:37 +0100 Subject: [PATCH] Use abspath to avoid permission errors(#7241) Fixes #5189 When working with non-normalized paths containing ".." on some file systems, Spack was found to encounter a permission error when writing to the path. This normalizes a path written by the intel-parallel-studio package and also normalizes all paths written by the license install hook (for all packages) to avoid this issue for intel-parallel-studio. --- lib/spack/spack/hooks/licensing.py | 1 + .../repos/builtin/packages/intel-parallel-studio/package.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/spack/spack/hooks/licensing.py b/lib/spack/spack/hooks/licensing.py index 9b5a2728ed..515935e8d4 100644 --- a/lib/spack/spack/hooks/licensing.py +++ b/lib/spack/spack/hooks/licensing.py @@ -157,6 +157,7 @@ def symlink_license(pkg): target = pkg.global_license_file for filename in pkg.license_files: link_name = join_path(pkg.prefix, filename) + link_name = os.path.abspath(link_name) license_dir = os.path.dirname(link_name) if not os.path.exists(license_dir): mkdirp(license_dir) diff --git a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py index ccfac3c9a9..e8ac829757 100644 --- a/var/spack/repos/builtin/packages/intel-parallel-studio/package.py +++ b/var/spack/repos/builtin/packages/intel-parallel-studio/package.py @@ -433,6 +433,7 @@ def rpath_configuration(self): for compiler in ['icc', 'icpc', 'ifort']: cfgfilename = os.path.join( self.prefix, self.bin_dir, '{0}.cfg'.format(compiler)) + cfgfilename = os.path.abspath(cfgfilename) with open(cfgfilename, 'w') as f: f.write('-Xlinker -rpath -Xlinker {0}\n'.format(lib_dir)) @@ -443,7 +444,7 @@ def fix_psxevars(self): bindir = glob.glob(join_path( self.prefix, 'parallel_studio*', 'bin'))[0] - + bindir = os.path.abspath(bindir) if self.version[1] > 2016: filter_file('^SCRIPTPATH=.*', 'SCRIPTPATH={0}'.format(self.prefix), os.path.join(bindir, 'psxevars.sh'),