Skip to content
Snippets Groups Projects
Commit f29dd481 authored by Patrick Gartung's avatar Patrick Gartung Committed by Todd Gamblin
Browse files

Add bindist tests for macOS.

parent ef3338a4
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
This test checks creating and install buildcaches This test checks creating and install buildcaches
""" """
import os import os
import sys
import py import py
import pytest import pytest
import argparse import argparse
...@@ -158,8 +159,14 @@ def install_dir_non_default_layout(tmpdir): ...@@ -158,8 +159,14 @@ def install_dir_non_default_layout(tmpdir):
spack.store.layout = real_layout spack.store.layout = real_layout
@pytest.mark.requires_executables( args = ['strings', 'file']
'/usr/bin/gcc', 'patchelf', 'strings', 'file') if sys.platform == 'darwin':
args.extend(['/usr/bin/clang++', 'install_name_tool'])
else:
args.extend(['/usr/bin/g++', 'patchelf'])
@pytest.mark.requires_executables(*args)
@pytest.mark.disable_clean_stage_check @pytest.mark.disable_clean_stage_check
@pytest.mark.maybeslow @pytest.mark.maybeslow
@pytest.mark.usefixtures('default_config', 'cache_directory', @pytest.mark.usefixtures('default_config', 'cache_directory',
...@@ -177,7 +184,6 @@ def test_default_rpaths_create_install_default_layout(tmpdir, ...@@ -177,7 +184,6 @@ def test_default_rpaths_create_install_default_layout(tmpdir,
cspec = Spec('corge') cspec = Spec('corge')
cspec.concretize() cspec.concretize()
# Install patchelf needed for relocate in linux test environment
iparser = argparse.ArgumentParser() iparser = argparse.ArgumentParser()
install.setup_parser(iparser) install.setup_parser(iparser)
# Install some packages with dependent packages # Install some packages with dependent packages
...@@ -253,8 +259,7 @@ def test_default_rpaths_create_install_default_layout(tmpdir, ...@@ -253,8 +259,7 @@ def test_default_rpaths_create_install_default_layout(tmpdir,
mirror.mirror(mparser, margs) mirror.mirror(mparser, margs)
@pytest.mark.requires_executables( @pytest.mark.requires_executables(*args)
'/usr/bin/gcc', 'patchelf', 'strings', 'file')
@pytest.mark.disable_clean_stage_check @pytest.mark.disable_clean_stage_check
@pytest.mark.maybeslow @pytest.mark.maybeslow
@pytest.mark.nomockstage @pytest.mark.nomockstage
...@@ -302,8 +307,7 @@ def test_default_rpaths_install_nondefault_layout(tmpdir, ...@@ -302,8 +307,7 @@ def test_default_rpaths_install_nondefault_layout(tmpdir,
mirror.mirror(mparser, margs) mirror.mirror(mparser, margs)
@pytest.mark.requires_executables( @pytest.mark.requires_executables(*args)
'/usr/bin/gcc', 'patchelf', 'strings', 'file')
@pytest.mark.disable_clean_stage_check @pytest.mark.disable_clean_stage_check
@pytest.mark.maybeslow @pytest.mark.maybeslow
@pytest.mark.nomockstage @pytest.mark.nomockstage
...@@ -356,8 +360,7 @@ def test_relative_rpaths_create_default_layout(tmpdir, ...@@ -356,8 +360,7 @@ def test_relative_rpaths_create_default_layout(tmpdir,
spack.stage.purge() spack.stage.purge()
@pytest.mark.requires_executables( @pytest.mark.requires_executables(*args)
'/usr/bin/gcc', 'patchelf', 'strings', 'file')
@pytest.mark.disable_clean_stage_check @pytest.mark.disable_clean_stage_check
@pytest.mark.maybeslow @pytest.mark.maybeslow
@pytest.mark.nomockstage @pytest.mark.nomockstage
...@@ -382,7 +385,6 @@ def test_relative_rpaths_install_default_layout(tmpdir, ...@@ -382,7 +385,6 @@ def test_relative_rpaths_install_default_layout(tmpdir,
['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel])
mirror.mirror(mparser, margs) mirror.mirror(mparser, margs)
# Install patchelf needed for relocate in linux test environment
iparser = argparse.ArgumentParser() iparser = argparse.ArgumentParser()
install.setup_parser(iparser) install.setup_parser(iparser)
...@@ -422,8 +424,7 @@ def test_relative_rpaths_install_default_layout(tmpdir, ...@@ -422,8 +424,7 @@ def test_relative_rpaths_install_default_layout(tmpdir,
mirror.mirror(mparser, margs) mirror.mirror(mparser, margs)
@pytest.mark.requires_executables( @pytest.mark.requires_executables(*args)
'/usr/bin/gcc', 'patchelf', 'strings', 'file')
@pytest.mark.disable_clean_stage_check @pytest.mark.disable_clean_stage_check
@pytest.mark.maybeslow @pytest.mark.maybeslow
@pytest.mark.nomockstage @pytest.mark.nomockstage
...@@ -449,7 +450,6 @@ def test_relative_rpaths_install_nondefault(tmpdir, ...@@ -449,7 +450,6 @@ def test_relative_rpaths_install_nondefault(tmpdir,
['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel]) ['add', '--scope', 'site', 'test-mirror-rel', 'file://%s' % mirror_path_rel])
mirror.mirror(mparser, margs) mirror.mirror(mparser, margs)
# Install patchelf needed for relocate in linux test environment
iparser = argparse.ArgumentParser() iparser = argparse.ArgumentParser()
install.setup_parser(iparser) install.setup_parser(iparser)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
from spack import * from spack import *
import os import os
import sys
class Corge(Package): class Corge(Package):
...@@ -101,7 +102,6 @@ class Corge ...@@ -101,7 +102,6 @@ class Corge
return 0; return 0;
} }
''' '''
mkdirp(prefix.lib64)
mkdirp('%s/corge' % prefix.include) mkdirp('%s/corge' % prefix.include)
mkdirp('%s/corge' % self.stage.source_path) mkdirp('%s/corge' % self.stage.source_path)
with open('%s/corge_version.h' % self.stage.source_path, 'w') as f: with open('%s/corge_version.h' % self.stage.source_path, 'w') as f:
...@@ -113,6 +113,8 @@ class Corge ...@@ -113,6 +113,8 @@ class Corge
with open('%s/corge/corgegator.cc' % self.stage.source_path, 'w') as f: with open('%s/corge/corgegator.cc' % self.stage.source_path, 'w') as f:
f.write(corgegator_cc) f.write(corgegator_cc)
gpp = which('/usr/bin/g++') gpp = which('/usr/bin/g++')
if sys.platform == 'darwin':
gpp = which('/usr/bin/clang++')
gpp('-Dcorge_EXPORTS', gpp('-Dcorge_EXPORTS',
'-I%s' % self.stage.source_path, '-I%s' % self.stage.source_path,
'-I%s' % spec['quux'].prefix.include, '-I%s' % spec['quux'].prefix.include,
...@@ -127,22 +129,42 @@ class Corge ...@@ -127,22 +129,42 @@ class Corge
'-O2', '-g', '-DNDEBUG', '-fPIC', '-O2', '-g', '-DNDEBUG', '-fPIC',
'-o', 'corgegator.cc.o', '-o', 'corgegator.cc.o',
'-c', 'corge/corgegator.cc') '-c', 'corge/corgegator.cc')
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared', if sys.platform == 'darwin':
'-Wl,-soname,libcorge.so', '-o', 'libcorge.so', 'corge.cc.o', gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-dynamiclib',
'-Wl,-rpath,%s:%s::::' % '-install_name', '@rpath/libcorge.dylib',
(spec['quux'].prefix.lib64, spec['garply'].prefix.lib64), '-o', 'libcorge.dylib', 'corge.cc.o',
'%s/libquux.so' % spec['quux'].prefix.lib64, '-Wl,-rpath,%s' % spec['quux'].prefix.lib64,
'%s/libgarply.so' % spec['garply'].prefix.lib64) '-Wl,-rpath,%s' % spec['garply'].prefix.lib64,
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic', '%s/libquux.dylib' % spec['quux'].prefix.lib64,
'corgegator.cc.o', '-o', 'corgegator', '%s/libgarply.dylib' % spec['garply'].prefix.lib64)
'-Wl,-rpath,%s:%s:%s:::' % (prefix.lib64, gpp('-O2', '-g', '-DNDEBUG', '-rdynamic',
spec['quux'].prefix.lib64, 'corgegator.cc.o', '-o', 'corgegator',
spec['garply'].prefix.lib64), '-Wl,-rpath,%s' % prefix.lib64,
'libcorge.so', '-Wl,-rpath,%s' % spec['quux'].prefix.lib64,
'%s/libquux.so' % spec['quux'].prefix.lib64, '-Wl,-rpath,%s' % spec['garply'].prefix.lib64,
'%s/libgarply.so' % spec['garply'].prefix.lib64) 'libcorge.dylib',
'%s/libquux.dylib' % spec['quux'].prefix.lib64,
'%s/libgarply.dylib' % spec['garply'].prefix.lib64)
mkdirp(prefix.lib64)
copy('libcorge.dylib', '%s/libcorge.dylib' % prefix.lib64)
else:
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared',
'-Wl,-soname,libcorge.so', '-o', 'libcorge.so', 'corge.cc.o',
'-Wl,-rpath,%s:%s::::' %
(spec['quux'].prefix.lib64, spec['garply'].prefix.lib64),
'%s/libquux.so' % spec['quux'].prefix.lib64,
'%s/libgarply.so' % spec['garply'].prefix.lib64)
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic',
'corgegator.cc.o', '-o', 'corgegator',
'-Wl,-rpath,%s' % prefix.lib64,
'-Wl,-rpath,%s' % spec['quux'].prefix.lib64,
'-Wl,-rpath,%s' % spec['garply'].prefix.lib64,
'libcorge.so',
'%s/libquux.so' % spec['quux'].prefix.lib64,
'%s/libgarply.so' % spec['garply'].prefix.lib64)
mkdirp(prefix.lib64)
copy('libcorge.so', '%s/libcorge.so' % prefix.lib64)
copy('corgegator', '%s/corgegator' % prefix.lib64) copy('corgegator', '%s/corgegator' % prefix.lib64)
copy('libcorge.so', '%s/libcorge.so' % prefix.lib64)
copy('%s/corge/corge.h' % self.stage.source_path, copy('%s/corge/corge.h' % self.stage.source_path,
'%s/corge/corge.h' % prefix.include) '%s/corge/corge.h' % prefix.include)
mkdirp(prefix.bin) mkdirp(prefix.bin)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
from spack import * from spack import *
import os import os
import sys
class Garply(Package): class Garply(Package):
...@@ -73,7 +74,6 @@ class Garply ...@@ -73,7 +74,6 @@ class Garply
garply_version_h = '''const int garply_version_major = %s; garply_version_h = '''const int garply_version_major = %s;
const int garply_version_minor = %s; const int garply_version_minor = %s;
''' '''
mkdirp(prefix.lib64)
mkdirp('%s/garply' % prefix.include) mkdirp('%s/garply' % prefix.include)
mkdirp('%s/garply' % self.stage.source_path) mkdirp('%s/garply' % self.stage.source_path)
with open('%s/garply_version.h' % self.stage.source_path, 'w') as f: with open('%s/garply_version.h' % self.stage.source_path, 'w') as f:
...@@ -86,6 +86,8 @@ class Garply ...@@ -86,6 +86,8 @@ class Garply
self.stage.source_path, 'w') as f: self.stage.source_path, 'w') as f:
f.write(garplinator_cc) f.write(garplinator_cc)
gpp = which('/usr/bin/g++') gpp = which('/usr/bin/g++')
if sys.platform == 'darwin':
gpp = which('/usr/bin/clang++')
gpp('-Dgarply_EXPORTS', gpp('-Dgarply_EXPORTS',
'-I%s' % self.stage.source_path, '-I%s' % self.stage.source_path,
'-O2', '-g', '-DNDEBUG', '-fPIC', '-O2', '-g', '-DNDEBUG', '-fPIC',
...@@ -96,13 +98,28 @@ class Garply ...@@ -96,13 +98,28 @@ class Garply
'-O2', '-g', '-DNDEBUG', '-fPIC', '-O2', '-g', '-DNDEBUG', '-fPIC',
'-o', 'garplinator.cc.o', '-o', 'garplinator.cc.o',
'-c', '%s/garply/garplinator.cc' % self.stage.source_path) '-c', '%s/garply/garplinator.cc' % self.stage.source_path)
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared', if sys.platform == 'darwin':
'-Wl,-soname,libgarply.so', '-o', 'libgarply.so', 'garply.cc.o') gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-dynamiclib',
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic', '-Wl,-headerpad_max_install_names', '-o', 'libgarply.dylib',
'garplinator.cc.o', '-o', 'garplinator', '-install_name', '@rpath/libgarply.dylib',
'-Wl,-rpath,%s' % prefix.lib64, 'garply.cc.o')
'libgarply.so') gpp('-O2', '-g', '-DNDEBUG', '-Wl,-search_paths_first',
copy('libgarply.so', '%s/libgarply.so' % prefix.lib64) '-Wl,-headerpad_max_install_names',
'garplinator.cc.o', '-o', 'garplinator',
'-Wl,-rpath,%s' % prefix.lib64,
'libgarply.dylib')
mkdirp(prefix.lib64)
copy('libgarply.dylib', '%s/libgarply.dylib' % prefix.lib64)
else:
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared',
'-Wl,-soname,libgarply.so',
'-o', 'libgarply.so', 'garply.cc.o')
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic',
'garplinator.cc.o', '-o', 'garplinator',
'-Wl,-rpath,%s' % prefix.lib64,
'libgarply.so')
mkdirp(prefix.lib64)
copy('libgarply.so', '%s/libgarply.so' % prefix.lib64)
copy('garplinator', '%s/garplinator' % prefix.lib64) copy('garplinator', '%s/garplinator' % prefix.lib64)
copy('%s/garply/garply.h' % self.stage.source_path, copy('%s/garply/garply.h' % self.stage.source_path,
'%s/garply/garply.h' % prefix.include) '%s/garply/garply.h' % prefix.include)
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
from spack import * from spack import *
import os import os
import sys
class Quux(Package): class Quux(Package):
...@@ -87,7 +88,6 @@ class Quux ...@@ -87,7 +88,6 @@ class Quux
quux_version_h = '''const int quux_version_major = %s; quux_version_h = '''const int quux_version_major = %s;
const int quux_version_minor = %s; const int quux_version_minor = %s;
''' '''
mkdirp(prefix.lib64)
mkdirp('%s/quux' % prefix.include) mkdirp('%s/quux' % prefix.include)
with open('%s/quux_version.h' % self.stage.source_path, 'w') as f: with open('%s/quux_version.h' % self.stage.source_path, 'w') as f:
f.write(quux_version_h % (self.version[0], self.version[1:])) f.write(quux_version_h % (self.version[0], self.version[1:]))
...@@ -98,6 +98,8 @@ class Quux ...@@ -98,6 +98,8 @@ class Quux
with open('%s/quux/quuxifier.cc' % self.stage.source_path, 'w') as f: with open('%s/quux/quuxifier.cc' % self.stage.source_path, 'w') as f:
f.write(quuxifier_cc) f.write(quuxifier_cc)
gpp = which('/usr/bin/g++') gpp = which('/usr/bin/g++')
if sys.platform == 'darwin':
gpp = which('/usr/bin/clang++')
gpp('-Dquux_EXPORTS', gpp('-Dquux_EXPORTS',
'-I%s' % self.stage.source_path, '-I%s' % self.stage.source_path,
'-I%s' % spec['garply'].prefix.include, '-I%s' % spec['garply'].prefix.include,
...@@ -110,18 +112,36 @@ class Quux ...@@ -110,18 +112,36 @@ class Quux
'-O2', '-g', '-DNDEBUG', '-fPIC', '-O2', '-g', '-DNDEBUG', '-fPIC',
'-o', 'quuxifier.cc.o', '-o', 'quuxifier.cc.o',
'-c', 'quux/quuxifier.cc') '-c', 'quux/quuxifier.cc')
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared', if sys.platform == 'darwin':
'-Wl,-soname,libquux.so', '-o', 'libquux.so', 'quux.cc.o', gpp('-fPIC', '-O2', '-g', '-DNDEBUG',
'-Wl,-rpath,%s:%s::::' % (prefix.lib64, '-dynamiclib', '-Wl,-headerpad_max_install_names',
spec['garply'].prefix.lib64), '-o', 'libquux.dylib',
'%s/libgarply.so' % spec['garply'].prefix.lib64) '-install_name', '@rpath/libcorge.dylib',
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic', 'quux.cc.o', '-Wl,-rpath,%s' % prefix.lib64,
'quuxifier.cc.o', '-o', 'quuxifier', '-Wl,-rpath,%s' % spec['garply'].prefix.lib64,
'-Wl,-rpath,%s:%s::::' % (prefix.lib64, '%s/libgarply.dylib' % spec['garply'].prefix.lib64)
spec['garply'].prefix.lib64), gpp('-O2', '-g', '-DNDEBUG',
'libquux.so', 'quuxifier.cc.o', '-o', 'quuxifier',
'%s/libgarply.so' % spec['garply'].prefix.lib64) '-Wl,-rpath,%s' % prefix.lib64,
copy('libquux.so', '%s/libquux.so' % prefix.lib64) '-Wl,-rpath,%s' % spec['garply'].prefix.lib64,
'libquux.dylib',
'%s/libgarply.dylib' % spec['garply'].prefix.lib64)
mkdirp(prefix.lib64)
copy('libquux.dylib', '%s/libquux.dylib' % prefix.lib64)
else:
gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-shared',
'-Wl,-soname,libquux.so', '-o', 'libquux.so', 'quux.cc.o',
'-Wl,-rpath,%s:%s::::' % (prefix.lib64,
spec['garply'].prefix.lib64),
'%s/libgarply.so' % spec['garply'].prefix.lib64)
gpp('-O2', '-g', '-DNDEBUG', '-rdynamic',
'quuxifier.cc.o', '-o', 'quuxifier',
'-Wl,-rpath,%s:%s::::' % (prefix.lib64,
spec['garply'].prefix.lib64),
'libquux.so',
'%s/libgarply.so' % spec['garply'].prefix.lib64)
mkdirp(prefix.lib64)
copy('libquux.so', '%s/libquux.so' % prefix.lib64)
copy('quuxifier', '%s/quuxifier' % prefix.lib64) copy('quuxifier', '%s/quuxifier' % prefix.lib64)
copy('%s/quux/quux.h' % self.stage.source_path, copy('%s/quux/quux.h' % self.stage.source_path,
'%s/quux/quux.h' % prefix.include) '%s/quux/quux.h' % prefix.include)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment