Files
spack/var/spack/repos/builtin.mock/packages/garply/package.py
2022-07-31 13:29:20 -07:00

173 lines
4.8 KiB
Python

# Copyright 2013-2022 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.package import *
class Garply(Package):
"""Toy package for testing dependencies"""
homepage = "https://www.example.com"
has_code = False
version("3.0.0")
def install(self, spec, prefix):
garply_h = """#ifndef GARPLY_H_
class Garply
{
private:
static const int version_major;
static const int version_minor;
public:
Garply();
int get_version() const;
int garplinate() const;
};
#endif // GARPLY_H_
"""
garply_cc = """#include "garply.h"
#include "garply_version.h"
#include <iostream>
const int Garply::version_major = garply_version_major;
const int Garply::version_minor = garply_version_minor;
Garply::Garply() {}
int
Garply::get_version() const
{
return 10 * version_major + version_minor;
}
int
Garply::garplinate() const
{
std::cout << "Garply::garplinate version " << get_version()
<< " invoked" << std::endl;
std::cout << "Garply config dir = %s" << std::endl;
return get_version();
}
"""
garplinator_cc = """#include "garply.h"
#include <iostream>
int
main()
{
Garply garply;
garply.garplinate();
return 0;
}
"""
garply_version_h = """const int garply_version_major = %s;
const int garply_version_minor = %s;
"""
mkdirp("%s/garply" % prefix.include)
mkdirp("%s/garply" % self.stage.source_path)
with open("%s/garply_version.h" % self.stage.source_path, "w") as f:
f.write(garply_version_h % (self.version[0], self.version[1:]))
with open("%s/garply/garply.h" % self.stage.source_path, "w") as f:
f.write(garply_h)
with open("%s/garply/garply.cc" % self.stage.source_path, "w") as f:
f.write(garply_cc % prefix.config)
with open("%s/garply/garplinator.cc" % self.stage.source_path, "w") as f:
f.write(garplinator_cc)
gpp = which("/usr/bin/g++")
if sys.platform == "darwin":
gpp = which("/usr/bin/clang++")
gpp(
"-Dgarply_EXPORTS",
"-I%s" % self.stage.source_path,
"-O2",
"-g",
"-DNDEBUG",
"-fPIC",
"-o",
"garply.cc.o",
"-c",
"%s/garply/garply.cc" % self.stage.source_path,
)
gpp(
"-Dgarply_EXPORTS",
"-I%s" % self.stage.source_path,
"-O2",
"-g",
"-DNDEBUG",
"-fPIC",
"-o",
"garplinator.cc.o",
"-c",
"%s/garply/garplinator.cc" % self.stage.source_path,
)
if sys.platform == "darwin":
gpp(
"-fPIC",
"-O2",
"-g",
"-DNDEBUG",
"-dynamiclib",
"-Wl,-headerpad_max_install_names",
"-o",
"libgarply.dylib",
"-install_name",
"@rpath/libgarply.dylib",
"garply.cc.o",
)
gpp(
"-O2",
"-g",
"-DNDEBUG",
"-Wl,-search_paths_first",
"-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)
os.link("%s/libgarply.dylib" % prefix.lib64, "%s/libgarply.dylib.3.0" % 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)
os.link("%s/libgarply.so" % prefix.lib64, "%s/libgarply.so.3.0" % prefix.lib64)
copy("garplinator", "%s/garplinator" % prefix.lib64)
copy("%s/garply/garply.h" % self.stage.source_path, "%s/garply/garply.h" % prefix.include)
mkdirp(prefix.bin)
copy("garply_version.h", "%s/garply_version.h" % prefix.bin)
os.symlink("%s/garplinator" % prefix.lib64, "%s/garplinator" % prefix.bin)