Revision control

Copy as Markdown

Other Tools

# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
SharedLibrary("rnp")
include("../rnpdefs.mozbuild")
@template
def IQuote(*paths):
"""Add a set of paths to the include path via -iquote"""
if CONFIG["CC_TYPE"] == "clang-cl":
flags = ["-Xclang", "-iquote", "-Xclang"]
else:
flags = ["-iquote"]
for p in paths:
CXXFLAGS += flags + [p]
def get_defines(defines):
"""For DEFINES that are False, do not include them in the preprocesser
commandline. Such preprocessor macros will be #undef'd in the output file while
allowing the build code to be explicit (and hopefully more readable)."""
for define, value in defines.items():
if value is True:
yield ("-D%s" % define)
elif value is not False:
yield ("-D%s=%s" % (define, value))
COMPILE_FLAGS["WARNINGS_CFLAGS"] += [
"-Wall",
"-Wextra",
"-Wunreachable-code",
"-Wpointer-arith",
"-Wmissing-declarations",
"-Wno-pedantic",
"-Wno-ignored-qualifiers",
"-Wno-unused-parameter",
"-Wno-missing-field-initializers",
]
if CONFIG["CC_TYPE"] == "clang-cl":
CXXFLAGS += [
"/EHs",
]
LOCAL_INCLUDES = [
"include",
"src",
"src/common",
"src/lib",
"src/libsexp/include"
]
IQuote(
"{}/src/lib".format(OBJDIR),
)
# Set up defines for src/lib/config.h
rnp_defines = {
"RNP_USE_STD_REGEX": True,
"HAVE_BZLIB_H": True,
"HAVE_ZLIB_H": True,
"ENABLE_SM2": False,
"ENABLE_IDEA": True,
"ENABLE_AEAD": False,
"ENABLE_BLOWFISH": True,
"ENABLE_CAST5": True,
"ENABLE_RIPEMD160": True,
}
if CONFIG["MZLA_LIBRNP_BACKEND"] == "botan":
LOCAL_INCLUDES += ["!../botan/build/include"]
if CONFIG["MZLA_SYSTEM_BOTAN"]:
CXXFLAGS += CONFIG["MZLA_BOTAN_CFLAGS"]
rnp_defines.update({
"CRYPTO_BACKEND_BOTAN": True,
"ENABLE_TWOFISH": True,
"ENABLE_BRAINPOOL": True,
})
elif CONFIG["MZLA_LIBRNP_BACKEND"] == "openssl":
CXXFLAGS += CONFIG["MZLA_LIBRNP_OPENSSL_CFLAGS"]
OS_LIBS += CONFIG["MZLA_LIBRNP_OPENSSL_LIBS"]
rnp_defines.update({
"CRYPTO_BACKEND_OPENSSL": True,
"ENABLE_TWOFISH": False,
# Supported, but not with RHEL's OpenSSL, disabled for now;
"ENABLE_BRAINPOOL": False,
})
rnp_defines["PACKAGE_STRING"] = rnp_defines["PACKAGE_STRING"][:-1] + '-openssl"'
if CONFIG["MZLA_LIBRNP_OPENSSL_VERSION"][0] == "3":
rnp_defines["CRYPTO_BACKEND_OPENSSL3"] = True
gen_files_flags = [d for d in get_defines(rnp_defines)]
GeneratedFile(
"src/lib/version.h", "src/lib/config.h",
script="/comm/python/thirdroc/rnp_generated.py",
inputs=["src/lib/version.h.in", "src/lib/config.h.in"],
flags=["-V", f"{SRCDIR}/version.txt",
"-m", CONFIG["MOZ_APP_VERSION_DISPLAY"]] + gen_files_flags
)
if CONFIG["MOZ_SYSTEM_ZLIB"]:
CXXFLAGS += CONFIG["MOZ_ZLIB_CFLAGS"]
else:
LOCAL_INCLUDES += ["../zlib"]
if CONFIG["MZLA_SYSTEM_JSONC"]:
CXXFLAGS += CONFIG["MZLA_JSONC_CFLAGS"]
else:
IQuote("{}/../json-c".format(OBJDIR))
LOCAL_INCLUDES += ["!../json-c", "../json-c"]
if CONFIG["MZLA_SYSTEM_BZIP2"]:
CXXFLAGS += CONFIG["MZLA_BZIP2_CFLAGS"]
else:
LOCAL_INCLUDES += ["../bzip2"]
if CONFIG["CC_TYPE"] == "clang-cl":
LOCAL_INCLUDES += [
"../niwcompat",
]
if CONFIG["TARGET_CPU"] == "x86":
LDFLAGS += ["clang_rt.builtins-i386.lib"]
elif CONFIG["TARGET_CPU"] == "x86_64":
LDFLAGS += ["clang_rt.builtins-x86_64.lib"]
SYMBOLS_FILE = "rnp.symbols"
SOURCES += [
"src/common/file-utils.cpp",
"src/common/str-utils.cpp",
"src/common/time-utils.cpp",
"src/lib/crypto.cpp",
"src/lib/crypto/backend_version.cpp",
"src/lib/crypto/cipher.cpp",
"src/lib/crypto/ec_curves.cpp",
"src/lib/crypto/ecdh_utils.cpp",
"src/lib/crypto/hash_common.cpp",
"src/lib/crypto/hash_sha1cd.cpp",
"src/lib/crypto/mpi.cpp",
"src/lib/crypto/s2k.cpp",
"src/lib/crypto/sha1cd/sha1.c",
"src/lib/crypto/sha1cd/ubc_check.c",
"src/lib/crypto/signatures.cpp",
"src/lib/fingerprint.cpp",
"src/lib/generate-key.cpp",
"src/lib/json-utils.cpp",
"src/lib/key-provider.cpp",
"src/lib/logging.cpp",
"src/lib/pass-provider.cpp",
"src/lib/pgp-key.cpp",
"src/lib/rnp.cpp",
"src/lib/sec_profile.cpp",
"src/lib/utils.cpp",
# librekey
"src/librekey/key_store_g10.cpp",
"src/librekey/key_store_kbx.cpp",
"src/librekey/key_store_pgp.cpp",
"src/librekey/rnp_key_store.cpp",
# librepgp
"src/librepgp/stream-armor.cpp",
"src/librepgp/stream-common.cpp",
"src/librepgp/stream-ctx.cpp",
"src/librepgp/stream-dump.cpp",
"src/librepgp/stream-key.cpp",
"src/librepgp/stream-packet.cpp",
"src/librepgp/stream-parse.cpp",
"src/librepgp/stream-sig.cpp",
"src/librepgp/stream-write.cpp",
# libsexp
"src/libsexp/src/ext-key-format.cpp",
"src/libsexp/src/sexp-char-defs.cpp",
"src/libsexp/src/sexp-error.cpp",
"src/libsexp/src/sexp-input.cpp",
"src/libsexp/src/sexp-object.cpp",
"src/libsexp/src/sexp-output.cpp",
"src/libsexp/src/sexp-simple-string.cpp",
]
if CONFIG["MZLA_LIBRNP_BACKEND"] == "botan":
SOURCES += [
"src/lib/crypto/bn.cpp",
"src/lib/crypto/cipher_botan.cpp",
"src/lib/crypto/dsa.cpp",
"src/lib/crypto/ec.cpp",
"src/lib/crypto/ecdh.cpp",
"src/lib/crypto/ecdsa.cpp",
"src/lib/crypto/eddsa.cpp",
"src/lib/crypto/elgamal.cpp",
"src/lib/crypto/hash.cpp",
"src/lib/crypto/mem.cpp",
"src/lib/crypto/rng.cpp",
"src/lib/crypto/rsa.cpp",
"src/lib/crypto/symmetric.cpp",
]
if CONFIG["MZLA_LIBRNP_BACKEND"] == "openssl":
SOURCES += [
"src/lib/crypto/bn_ossl.cpp",
"src/lib/crypto/cipher_ossl.cpp",
"src/lib/crypto/dl_ossl.cpp",
"src/lib/crypto/dsa_ossl.cpp",
"src/lib/crypto/ec_ossl.cpp",
"src/lib/crypto/ecdh_ossl.cpp",
"src/lib/crypto/ecdsa_ossl.cpp",
"src/lib/crypto/eddsa_ossl.cpp",
"src/lib/crypto/elgamal_ossl.cpp",
"src/lib/crypto/hash_crc24.cpp",
"src/lib/crypto/hash_ossl.cpp",
"src/lib/crypto/mem_ossl.cpp",
"src/lib/crypto/rng_ossl.cpp",
"src/lib/crypto/rsa_ossl.cpp",
"src/lib/crypto/s2k_ossl.cpp",
"src/lib/crypto/symmetric_ossl.cpp",
]
DIRS += ["src/rnp", "src/rnpkeys"]