66 lines
2.6 KiB
Python
66 lines
2.6 KiB
Python
# Copyright 2013-2024 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)
|
|
|
|
from spack.package import *
|
|
|
|
|
|
class Oclint(Package):
|
|
"""OClint: a static analysis tool for C, C++, and Objective-C code
|
|
|
|
OCLint is a static code analysis tool for improving quality and
|
|
reducing defects by inspecting C, C++ and Objective-C code and
|
|
looking for potential problems"""
|
|
|
|
homepage = "https://oclint.org/"
|
|
url = "https://github.com/oclint/oclint/archive/v0.13.tar.gz"
|
|
|
|
version("0.13", sha256="a0fd188673863e6357d6585b9bb9c3affe737df134b9383a1a5ed021d09ed848")
|
|
|
|
depends_on("python", type=("build"))
|
|
depends_on("git", type=("build"))
|
|
depends_on("subversion", type=("build"))
|
|
depends_on("cmake", type=("build"))
|
|
depends_on("ninja", type=("build"))
|
|
depends_on("llvm@5.0.0:")
|
|
|
|
# Needed to fix a bug in oclint-scripts/bundle script, which
|
|
# attempts to install c++ headers in the wrong location
|
|
# contributed upstream as
|
|
# https://github.com/oclint/oclint/pull/492
|
|
patch("bundle.patch", level=0)
|
|
|
|
def install(self, spec, prefix):
|
|
# Build from source via directions from
|
|
# https://docs.oclint.org/en/stable/intro/build.html,
|
|
cd("oclint-scripts")
|
|
|
|
# ...but instead of using oclint-scripts/make, execute the
|
|
# commands in oclint-scripts/makeWithSystemLLVM so that
|
|
# oclint links to spack-installed LLVM
|
|
build_script = Executable(join_path(".", "build"))
|
|
bundle_script = Executable(join_path(".", "bundle"))
|
|
|
|
# Add the '-no-analytics' argument to the build script because
|
|
# 1) it doesn't detect properly a spack install of OpenSSL,
|
|
# and throws an error due to missing OpenSSL headers
|
|
# 2) the bespoke build system is a pain to patch as it is
|
|
# 3) many sites don't allow software that communicates analytics data
|
|
build_script(
|
|
"-release",
|
|
"-clean",
|
|
"-llvm-root={0}".format(spec["llvm"].prefix),
|
|
"-use-system-compiler",
|
|
"-no-analytics",
|
|
"all",
|
|
)
|
|
bundle_script("-release", "-llvm-root={0}".format(spec["llvm"].prefix))
|
|
|
|
# Copy install tree into the correct locations using the
|
|
# directory layout described in
|
|
cd(join_path("..", "build"))
|
|
install_tree(join_path("oclint-release", "include"), prefix.include)
|
|
install_tree(join_path("oclint-release", "lib"), prefix.lib)
|
|
install_tree(join_path("oclint-release", "bin"), prefix.bin)
|