# 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 Quux(Package): """Toy package for testing dependencies""" homepage = "https://www.example.com" url = "https://github.com/gartung/quux/archive/v3.0.0.tar.gz" version('3.0.0', sha256='b91bc96fb746495786bddac2c527039177499f2f76d3fa9dcf0b393859e68484') depends_on('garply') def install(self, spec, prefix): quux_cc = '''#include "quux.h" #include "garply/garply.h" #include "quux_version.h" #include #include const int Quux::version_major = quux_version_major; const int Quux::version_minor = quux_version_minor; Quux::Quux() {} int Quux::get_version() const { return 10 * version_major + version_minor; } int Quux::quuxify() const { int quux_version = get_version(); std::cout << "Quux::quuxify version " << quux_version << " invoked" < int main() { Quux quux; quux.quuxify(); return 0; } ''' quux_version_h = '''const int quux_version_major = %s; const int quux_version_minor = %s; ''' mkdirp('%s/quux' % prefix.include) with open('%s/quux_version.h' % self.stage.source_path, 'w') as f: f.write(quux_version_h % (self.version[0], self.version[1:])) with open('%s/quux/quux.cc' % self.stage.source_path, 'w') as f: f.write(quux_cc % (prefix.config)) with open('%s/quux/quux.h' % self.stage.source_path, 'w') as f: f.write(quux_h) with open('%s/quux/quuxifier.cc' % self.stage.source_path, 'w') as f: f.write(quuxifier_cc) gpp = which('/usr/bin/g++') if sys.platform == 'darwin': gpp = which('/usr/bin/clang++') gpp('-Dquux_EXPORTS', '-I%s' % self.stage.source_path, '-I%s' % spec['garply'].prefix.include, '-O2', '-g', '-DNDEBUG', '-fPIC', '-o', 'quux.cc.o', '-c', 'quux/quux.cc') gpp('-Dquux_EXPORTS', '-I%s' % self.stage.source_path, '-I%s' % spec['garply'].prefix.include, '-O2', '-g', '-DNDEBUG', '-fPIC', '-o', 'quuxifier.cc.o', '-c', 'quux/quuxifier.cc') if sys.platform == 'darwin': gpp('-fPIC', '-O2', '-g', '-DNDEBUG', '-dynamiclib', '-Wl,-headerpad_max_install_names', '-o', 'libquux.dylib', '-install_name', '@rpath/libcorge.dylib', 'quux.cc.o', '-Wl,-rpath,%s' % prefix.lib64, '-Wl,-rpath,%s' % spec['garply'].prefix.lib64, '%s/libgarply.dylib' % spec['garply'].prefix.lib64) gpp('-O2', '-g', '-DNDEBUG', 'quuxifier.cc.o', '-o', 'quuxifier', '-Wl,-rpath,%s' % 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('%s/quux/quux.h' % self.stage.source_path, '%s/quux/quux.h' % prefix.include) mkdirp(prefix.bin) copy('quux_version.h', '%s/quux_version.h' % prefix.bin) os.symlink('%s/quuxifier' % prefix.lib64, '%s/quuxifier' % prefix.bin) os.symlink('%s/garplinator' % spec['garply'].prefix.lib64, '%s/garplinator' % prefix.bin)