Source code for varats.projects.c_projects.gzip
"""Project file for gzip."""
import re
import typing as tp
import benchbuild as bb
from benchbuild.utils.cmd import make
from benchbuild.utils.revision_ranges import block_revisions, RevisionRange
from benchbuild.utils.settings import get_number_of_jobs
from plumbum import local
from varats.paper_mgmt.paper_config import project_filter_generator
from varats.project.project_util import (
get_tagged_commits,
wrap_paths_to_binaries,
ProjectBinaryWrapper,
BinaryType,
verify_binaries,
)
from varats.provider.cve.cve_provider import CVEProviderHook
from varats.provider.release.release_provider import (
ReleaseProviderHook,
ReleaseType,
)
from varats.utils.settings import bb_cfg
[docs]class Gzip(bb.Project, ReleaseProviderHook, CVEProviderHook): # type: ignore
"""Compression and decompression tool Gzip (fetched by Git)"""
NAME = 'gzip'
GROUP = 'c_projects'
DOMAIN = 'compression'
SOURCE = [
block_revisions([
# TODO (se-passau/VaRA#537): glibc < 2.28
# see e.g. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=915151
RevisionRange(
"6ef28aeb035af20818578b1a1bc537f797c27029",
"203e40cc4558a80998d05eb74b373a51e796ca8b", "Needs glibc < 2.28"
)
])(
bb.source.Git(
remote="https://github.com/vulder/gzip.git",
local="gzip",
refspec="HEAD",
limit=None,
shallow=False,
version_filter=project_filter_generator("gzip")
)
),
bb.source.GitSubmodule(
remote="https://github.com/coreutils/gnulib.git",
local="gzip/gnulib",
refspec="HEAD",
limit=None,
shallow=False,
version_filter=project_filter_generator("gzip")
)
]
@property
def binaries(self) -> tp.List[ProjectBinaryWrapper]:
"""Return a list of binaries generated by the project."""
return wrap_paths_to_binaries([("gzip", BinaryType.executable)])
def run_tests(self) -> None:
pass
def compile(self) -> None:
"""Compile the project."""
gzip_version_source = local.path(self.source_of_primary)
self.cflags += [
"-Wno-error=string-plus-int", "-Wno-error=shift-negative-value",
"-Wno-string-plus-int", "-Wno-shift-negative-value"
]
clang = bb.compiler.cc(self)
with local.cwd(gzip_version_source):
with local.env(CC=str(clang)):
bb.watch(local["./bootstrap"])()
bb.watch(local["./configure"])()
bb.watch(make)("-j", get_number_of_jobs(bb_cfg()))
verify_binaries(self)
@classmethod
def get_release_revisions(
cls, release_type: ReleaseType
) -> tp.List[tp.Tuple[str, str]]:
major_release_regex = "^v[0-9]+\\.[0-9]+$"
minor_release_regex = "^v[0-9]+\\.[0-9]+(\\.[0-9]+)?$"
tagged_commits = get_tagged_commits(cls.NAME)
if release_type == ReleaseType.major:
return [(h, tag)
for h, tag in tagged_commits
if re.match(major_release_regex, tag)]
return [(h, tag)
for h, tag in tagged_commits
if re.match(minor_release_regex, tag)]
@classmethod
def get_cve_product_info(cls) -> tp.List[tp.Tuple[str, str]]:
return [("gzip", "gzip"), ("gnu", "gzip")]