1
0
mirror of https://github.com/facebook/zstd.git synced 2025-03-07 09:26:03 +02:00

[contrib][linux-kernel] Generate SPDX license identifiers (#3294)

Add a `--spdx` option to the freestanding script to prefix
files with a line like (for `.c` files):

    // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause

or (for `.h` and `.S` files):

    /* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */

Given the style of the line to be used depends on the extension,
a simple `sed` insert command would not work.

It also skips the file if an existing SPDX line is there,
as well as raising an error if an unexpected SPDX line appears
anywhere else in the file, as well as for unexpected
file extensions.

I double-checked that all currently generated files appear
to be license as expected with:

    grep -LRF 'This source code is licensed under both the BSD-style license (found in the'  linux/lib/zstd
    grep -LRF 'LICENSE file in the root directory of this source tree) and the GPLv2 (found' linux/lib/zstd

but somebody knowledgable on the licensing of the project should
double-check this is the intended case.

Fixes: https://github.com/facebook/zstd/issues/3293
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>

Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
This commit is contained in:
Miguel Ojeda 2022-10-19 01:35:44 +02:00 committed by GitHub
parent 99d239de32
commit 5c1cdba7dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 27 additions and 1 deletions

View File

@ -431,7 +431,7 @@ class Freestanding(object):
external_xxhash: bool, xxh64_state: Optional[str],
xxh64_prefix: Optional[str], rewritten_includes: [(str, str)],
defs: [(str, Optional[str])], replaces: [(str, str)],
undefs: [str], excludes: [str], seds: [str],
undefs: [str], excludes: [str], seds: [str], spdx: bool,
):
self._zstd_deps = zstd_deps
self._mem = mem
@ -446,6 +446,7 @@ class Freestanding(object):
self._undefs = undefs
self._excludes = excludes
self._seds = seds
self._spdx = spdx
def _dst_lib_file_paths(self):
"""
@ -640,6 +641,27 @@ class Freestanding(object):
for sed in self._seds:
self._process_sed(sed)
def _process_spdx(self):
if not self._spdx:
return
self._log("Processing spdx")
SPDX_C = "// SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause\n"
SPDX_H_S = "/* SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause */\n"
for filepath in self._dst_lib_file_paths():
file = FileLines(filepath)
if file.lines[0] == SPDX_C or file.lines[0] == SPDX_H_S:
continue
for line in file.lines:
if "SPDX-License-Identifier" in line:
raise RuntimeError(f"Unexpected SPDX license identifier: {file.filename} {repr(line)}")
if file.filename.endswith(".c"):
file.lines.insert(0, SPDX_C)
elif file.filename.endswith(".h") or file.filename.endswith(".S"):
file.lines.insert(0, SPDX_H_S)
else:
raise RuntimeError(f"Unexpected file extension: {file.filename}")
file.write()
def go(self):
@ -651,6 +673,7 @@ class Freestanding(object):
self._rewrite_includes()
self._replace_xxh64_prefix()
self._process_seds()
self._process_spdx()
def parse_optional_pair(defines: [str]) -> [(str, Optional[str])]:
@ -689,6 +712,7 @@ def main(name, args):
parser.add_argument("--xxh64-prefix", default=None, help="Alternate XXH64 function prefix (excluding _) e.g. --xxh64-prefix=xxh64")
parser.add_argument("--rewrite-include", default=[], dest="rewritten_includes", action="append", help="Rewrite an include REGEX=NEW (e.g. '<stddef\\.h>=<linux/types.h>')")
parser.add_argument("--sed", default=[], dest="seds", action="append", help="Apply a sed replacement. Format: `s/REGEX/FORMAT/[g]`. REGEX is a Python regex. FORMAT is a Python format string formatted by the regex dict.")
parser.add_argument("--spdx", action="store_true", help="Add SPDX License Identifiers")
parser.add_argument("-D", "--define", default=[], dest="defs", action="append", help="Pre-define this macro (can be passed multiple times)")
parser.add_argument("-U", "--undefine", default=[], dest="undefs", action="append", help="Pre-undefine this macro (can be passed multiple times)")
parser.add_argument("-R", "--replace", default=[], dest="replaces", action="append", help="Pre-define this macro and replace the first ifndef block with its definition")
@ -743,6 +767,7 @@ def main(name, args):
args.undefs,
args.excludes,
args.seds,
args.spdx,
).go()
if __name__ == "__main__":

View File

@ -26,6 +26,7 @@ libzstd:
--rewrite-include '"(\.\./)?zstd_errors.h"=<linux/zstd_errors.h>' \
--sed 's,/\*\*\*,/* *,g' \
--sed 's,/\*\*,/*,g' \
--spdx \
-DZSTD_NO_INTRINSICS \
-DZSTD_NO_UNUSED_FUNCTIONS \
-DZSTD_LEGACY_SUPPORT=0 \