buildcaches: fix directory link relocation (#26948)

When relocating a binary distribution, Spack only checks files to see
if they are a link that needs to be relocated. Directories can be
such links as well, however, and need to undergo the same checks
and potential relocation.
This commit is contained in:
Paul Ferrell
2021-10-28 06:34:31 -06:00
committed by GitHub
parent 890095e876
commit 4ee37c37de
3 changed files with 62 additions and 3 deletions

View File

@@ -0,0 +1,45 @@
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
import sys
from spack import *
class Symly(Package):
"""A toy package full of symlinks."""
homepage = "https://www.example.com"
has_code = False
version('3.0.0')
def install(self, spec, prefix):
symly_c = '''
#include <stdio.h>
int main() {
printf("I'm just here to give the build system something to do...");
return 0;
}
'''
mkdirp('%s/symly' % self.stage.source_path)
with open('%s/symly/symly.c' % self.stage.source_path, 'w') as f:
f.write(symly_c)
gcc = which('/usr/bin/gcc')
if sys.platform == 'darwin':
gcc = which('/usr/bin/clang')
mkdirp(prefix.bin)
mkdirp(prefix.lib64)
gcc('-o', 'symly.bin',
'symly/symly.c')
print("prefix.bin", prefix.bin)
copy('symly.bin', '%s/symly' % prefix.bin)
# create a symlinked file.
os.symlink('%s/symly' % prefix.bin,
'%s/symly' % prefix.lib64)
# Create a symlinked directory.
os.symlink(prefix.bin, prefix.include)