git: 2e85df652cae - main - Add libcbor to the build

From: Ed Maste <emaste_at_FreeBSD.org>
Date: Fri, 15 Oct 2021 19:10:34 UTC
The branch main has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=2e85df652caef859c532b7e1e8a178c75f1a4a92

commit 2e85df652caef859c532b7e1e8a178c75f1a4a92
Author:     Ed Maste <emaste@FreeBSD.org>
AuthorDate: 2021-10-07 00:42:40 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2021-10-15 19:10:24 +0000

    Add libcbor to the build
    
    From https://github.com/PJK/libcbor:
    
        libcbor is a C library for parsing and generating CBOR, the general-
        purpose schema-less binary data format.
    
    libcbor will be used by ssh to support FIDO/U2F keys.  It is currently
    intended only for use by ssh, and so is installed as a PRIVATELIB and is
    placed in the ssh pkgbase package.
    
    cbor_export.h and configuration.h were generated by the upstream CMake
    build.  We could create them with bmake rules instead (as NetBSD has
    done) but this is a fine start.
    
    This is currently disabled for the 32-bit library build as libfido2 is
    not compatible with the COMPAT_32BIT hack in usb_ioctl.h, and there is
    no need for libcbor without libfido2.
    
    Reviewed by:    kevans
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D32347
---
 lib/Makefile                             |  3 +++
 lib/libcbor/Makefile                     | 35 ++++++++++++++++++++++++++
 lib/libcbor/cbor/cbor_export.h           | 42 ++++++++++++++++++++++++++++++++
 lib/libcbor/cbor/configuration.h         | 16 ++++++++++++
 share/mk/src.libnames.mk                 |  2 ++
 tools/build/mk/OptionalObsoleteFiles.inc |  3 +++
 6 files changed, 101 insertions(+)

diff --git a/lib/Makefile b/lib/Makefile
index 038763bfcba8..d39bbd37c910 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -215,6 +215,9 @@ SUBDIR.${MK_BHYVE}+=	libvmmapi
 .if ${MACHINE_ARCH} != "powerpc"
 SUBDIR.${MK_OPENMP}+=	libomp
 .endif
+.if !defined(COMPAT_32BIT)
+SUBDIR.${MK_OPENSSH}+=	libcbor
+.endif
 SUBDIR.${MK_OPENSSL}+=	libmp
 SUBDIR.${MK_PF}+=	libpfctl
 SUBDIR.${MK_PMC}+=	libpmc libpmcstat
diff --git a/lib/libcbor/Makefile b/lib/libcbor/Makefile
new file mode 100644
index 000000000000..455efdbfc8ee
--- /dev/null
+++ b/lib/libcbor/Makefile
@@ -0,0 +1,35 @@
+# $FreeBSD$
+
+PACKAGE=ssh
+LIB=	cbor
+PRIVATELIB=
+
+DIST=${SRCTOP}/contrib/libcbor
+.PATH:	${DIST}/src
+
+SRCS=	cbor.c
+SRCS+=	cbor/arrays.c
+SRCS+=	cbor/bytestrings.c
+SRCS+=	cbor/callbacks.c
+SRCS+=	cbor/common.c
+SRCS+=	cbor/encoding.c
+SRCS+=	cbor/floats_ctrls.c
+SRCS+=	cbor/ints.c
+SRCS+=	cbor/maps.c
+SRCS+=	cbor/serialization.c
+SRCS+=	cbor/streaming.c
+SRCS+=	cbor/strings.c
+SRCS+=	cbor/tags.c
+SRCS+=	cbor/internal/builder_callbacks.c
+SRCS+=	cbor/internal/encoders.c
+SRCS+=	cbor/internal/loaders.c
+SRCS+=	cbor/internal/memory_utils.c
+SRCS+=	cbor/internal/stack.c
+SRCS+=	cbor/internal/unicode.c
+
+CFLAGS+= -I${DIST}/src -I${.CURDIR}
+
+WARNS?=	2
+MAN=
+
+.include <bsd.lib.mk>
diff --git a/lib/libcbor/cbor/cbor_export.h b/lib/libcbor/cbor/cbor_export.h
new file mode 100644
index 000000000000..cce2560b8d29
--- /dev/null
+++ b/lib/libcbor/cbor/cbor_export.h
@@ -0,0 +1,42 @@
+
+#ifndef CBOR_EXPORT_H
+#define CBOR_EXPORT_H
+
+#ifdef CBOR_STATIC_DEFINE
+#  define CBOR_EXPORT
+#  define CBOR_NO_EXPORT
+#else
+#  ifndef CBOR_EXPORT
+#    ifdef cbor_EXPORTS
+        /* We are building this library */
+#      define CBOR_EXPORT __attribute__((visibility("default")))
+#    else
+        /* We are using this library */
+#      define CBOR_EXPORT __attribute__((visibility("default")))
+#    endif
+#  endif
+
+#  ifndef CBOR_NO_EXPORT
+#    define CBOR_NO_EXPORT __attribute__((visibility("hidden")))
+#  endif
+#endif
+
+#ifndef CBOR_DEPRECATED
+#  define CBOR_DEPRECATED __attribute__ ((__deprecated__))
+#endif
+
+#ifndef CBOR_DEPRECATED_EXPORT
+#  define CBOR_DEPRECATED_EXPORT CBOR_EXPORT CBOR_DEPRECATED
+#endif
+
+#ifndef CBOR_DEPRECATED_NO_EXPORT
+#  define CBOR_DEPRECATED_NO_EXPORT CBOR_NO_EXPORT CBOR_DEPRECATED
+#endif
+
+#if 0 /* DEFINE_NO_DEPRECATED */
+#  ifndef CBOR_NO_DEPRECATED
+#    define CBOR_NO_DEPRECATED
+#  endif
+#endif
+
+#endif /* CBOR_EXPORT_H */
diff --git a/lib/libcbor/cbor/configuration.h b/lib/libcbor/cbor/configuration.h
new file mode 100644
index 000000000000..a1a964c81e7f
--- /dev/null
+++ b/lib/libcbor/cbor/configuration.h
@@ -0,0 +1,16 @@
+#ifndef LIBCBOR_CONFIGURATION_H
+#define LIBCBOR_CONFIGURATION_H
+
+#define CBOR_MAJOR_VERSION 0
+#define CBOR_MINOR_VERSION 8
+#define CBOR_PATCH_VERSION 0
+
+#define CBOR_CUSTOM_ALLOC 0
+#define CBOR_BUFFER_GROWTH 2
+#define CBOR_MAX_STACK_SIZE 2048
+#define CBOR_PRETTY_PRINTER 1
+
+#define CBOR_RESTRICT_SPECIFIER restrict
+#define CBOR_INLINE_SPECIFIER 
+
+#endif //LIBCBOR_CONFIGURATION_H
diff --git a/share/mk/src.libnames.mk b/share/mk/src.libnames.mk
index e014e12cb3c9..a3cf355de372 100644
--- a/share/mk/src.libnames.mk
+++ b/share/mk/src.libnames.mk
@@ -17,6 +17,7 @@ _PRIVATELIBS=	\
 		atf_cxx \
 		auditd \
 		bsdstat \
+		cbor \
 		devdctl \
 		event1 \
 		gmock \
@@ -687,6 +688,7 @@ LIBCAP_NETDIR=	${OBJTOP}/lib/libcasper/services/cap_net
 LIBCAP_PWDDIR=	${OBJTOP}/lib/libcasper/services/cap_pwd
 LIBCAP_SYSCTLDIR=	${OBJTOP}/lib/libcasper/services/cap_sysctl
 LIBCAP_SYSLOGDIR=	${OBJTOP}/lib/libcasper/services/cap_syslog
+LIBCBORDIR=	${OBJTOP}/lib/libcbor
 LIBBSDXMLDIR=	${OBJTOP}/lib/libexpat
 LIBKVMDIR=	${OBJTOP}/lib/libkvm
 LIBPTHREADDIR=	${OBJTOP}/lib/libthr
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index 57f8ac63e2de..acd578912e77 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -7119,6 +7119,9 @@ OLD_FILES+=usr/bin/ssh-agent
 OLD_FILES+=usr/bin/ssh-copy-id
 OLD_FILES+=usr/bin/ssh-keygen
 OLD_FILES+=usr/bin/ssh-keyscan
+OLD_FILES+=usr/lib/libprivatecbor.a
+OLD_FILES+=usr/lib/libprivatecbor.so
+OLD_LIBS+=usr/lib/libprivatecbor.so.5
 OLD_FILES+=usr/lib/pam_ssh.so
 OLD_LIBS+=usr/lib/pam_ssh.so.6
 OLD_FILES+=usr/lib/libprivatessh.a