gnu: Add rnp.

* gnu/packages/openpgp.scm (rnp): New variable.
* gnu/packages/patches/rnp-add-version.cmake.patch: New file.
* gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch: New file.
* gnu/packages/patches/rnp-unbundle-googletest.patch: New file.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Justus Winter 2020-07-27 15:44:13 +02:00 committed by Ludovic Courtès
parent e402ccd003
commit 7b7543376b
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
5 changed files with 334 additions and 1 deletions

View File

@ -1503,6 +1503,9 @@ dist_patch_DATA = \
%D%/packages/patches/rtags-separate-rct.patch \
%D%/packages/patches/racket-store-checksum-override.patch \
%D%/packages/patches/retroarch-disable-online-updater.patch \
%D%/packages/patches/rnp-add-version.cmake.patch \
%D%/packages/patches/rnp-disable-ruby-rnp-tests.patch \
%D%/packages/patches/rnp-unbundle-googletest.patch \
%D%/packages/patches/ruby-rack-ignore-failing-test.patch \
%D%/packages/patches/ruby-rubocop-break-dependency-cycle.patch\
%D%/packages/patches/ruby-sanitize-system-libxml.patch \

View File

@ -19,11 +19,19 @@
(define-module (gnu packages openpgp)
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (gnu packages)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages crypto)
#:use-module (gnu packages gnupg)
#:use-module (gnu packages multiprecision))
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages web))
(define-public libtmcg
(package
@ -92,3 +100,87 @@ implementation is in experimental state and should NOT be used in production
environments.")
(home-page "https://www.nongnu.org/dkgpg/")
(license license:gpl2+)))
(define-public rnp
;; Packaging the currently released version requires a large number of
;; patches. For now, we package a snapshot instead.
(let ((commit "203224f0b1505dba17837c03da603e5b98ab125a")
(revision "0")
(last-version "0.13.1")
(day-of-release "2020-07-21"))
(package
(name "rnp")
(version (git-version last-version revision commit))
(source (origin
(method git-fetch)
(uri (git-reference
(url "https://github.com/rnpgp/rnp")
(commit commit)))
(file-name
(string-append name "-" (string-take commit 7) "-checkout"))
(sha256
(base32
"1rnwhc9ys4v4mv584hmmrl0ycnqmsaigpffzm31qq337hz24zqya"))
(patches
(search-patches "rnp-unbundle-googletest.patch"
"rnp-disable-ruby-rnp-tests.patch"
"rnp-add-version.cmake.patch"))))
(build-system cmake-build-system)
(arguments `(#:configure-flags
'("-DBUILD_SHARED_LIBS=on"
"-DBUILD_TESTING=on")
#:phases
(modify-phases %standard-phases
(add-after 'unpack 'fixes
(lambda* (#:key inputs #:allow-other-keys)
(copy-recursively (assoc-ref inputs "googletest-source")
"src/tests/googletest-src")
(substitute* "src/tests/support.cpp"
(("\"cp\"") (string-append "\"" (which "cp") "\"")))
;; Produce a version stamp in the format the upstream
;; project uses for unreleased revisions.
(with-output-to-file "version.txt"
(lambda _
(display
(string-append ,last-version
"-" ,revision
"-g" ,(string-take commit 7)))))
#t))
(replace 'check
(lambda _
;; Some OpenPGP certificates used by the tests expire.
;; To work around that, set the time to roughly the
;; release date.
(invoke "faketime" ,day-of-release "make" "test"))))))
(native-inputs
`(("gnupg" ,gnupg) ; for tests
("googletest-source" ,(package-source googletest)) ; for tests
("libfaketime" ,libfaketime) ; for tests
("pkg-config" ,pkg-config)
("python" ,python)
("python2" ,python-2.7)))
(inputs `(("botan" ,botan)
("bzip2" ,bzip2)
("json-c" ,json-c)
("zlib" ,zlib)))
(synopsis
"RFC4880-compliant OpenPGP library written in C++")
(description
"Set of OpenPGP (RFC4880) tools that works on Linux, *BSD and macOS as a
replacement of GnuPG. It is maintained by Ribose after being forked from
NetPGP, itself originally written for NetBSD.
librnp is the library used by rnp for all OpenPGP functions, useful for
developers to build against. It is a real library, not a wrapper like GPGME
of GnuPG.")
(home-page "https://www.rnpgp.com/")
(license
;; RNP contains code written by Ribose and code derived from netpgp.
(list
;; Ribose's BSD 2-Clause License and NetBSD's BSD 2-Clause License
;; (netpgp).
license:bsd-2
;; Nominet UK's Apache 2.0 Licence (netpgp).
license:asl2.0
;; Nominet UK's BSD 3-Clause License (netpgp).
license:bsd-3)))))

View File

@ -0,0 +1,169 @@
From b4326f4649ceb146d5cc74f8579b68d8dc8f51e6 Mon Sep 17 00:00:00 2001
From: Justus Winter <teythoon@avior.uberspace.de>
Date: Mon, 27 Jul 2020 14:00:25 +0200
Subject: [PATCH 3/3] Add external version.cmake.
This file is maintained in an external repository. It is only
included in released versions. For building snapshots of RNP, a fixed
snapshot of version.cmake is downloaded on demand. To avoid this,
this patch explicitly provides the file.
---
cmake/version.cmake | 146 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 146 insertions(+)
create mode 100644 cmake/version.cmake
diff --git a/cmake/version.cmake b/cmake/version.cmake
new file mode 100644
index 00000000..514027aa
--- /dev/null
+++ b/cmake/version.cmake
@@ -0,0 +1,146 @@
+# Copyright (c) 2018 Ribose Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+# desired length of commit hash
+set(GIT_REV_LEN 7)
+
+# call git, store output in var (can fail)
+macro(_git var)
+ execute_process(
+ COMMAND "${GIT_EXECUTABLE}" ${ARGN}
+ WORKING_DIRECTORY "${source_dir}"
+ RESULT_VARIABLE _git_ec
+ OUTPUT_VARIABLE ${var}
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+ )
+endmacro()
+
+# call git, store output in var (can not fail)
+macro(git var)
+ _git(${var} ${ARGN})
+ if (NOT _git_ec EQUAL 0)
+ string(REPLACE ";" " " args "${ARGN}")
+ message(FATAL_ERROR "Failed to execute: git ${args}")
+ endif()
+endmacro()
+
+function(extract_version_info version var_prefix)
+ # extract the main components
+ # v1.9.0-3-g5b92266+1546836556
+ # v1.9.0-3-g5b92266-dirty+1546836556
+ string(REGEX MATCH "^v?([0-9]+\\.[0-9]+\\.[0-9]+)(-([0-9]+)-g([0-9a-f]+)(-dirty)?)?(\\+([0-9]+))?$" matches "${version}")
+ if (NOT matches)
+ message(FATAL_ERROR "Failed to extract version components.")
+ endif()
+ set(${var_prefix}_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE) # 1.9.0
+ if (NOT CMAKE_MATCH_3)
+ set(CMAKE_MATCH_3 "0")
+ endif()
+ set(${var_prefix}_VERSION_NCOMMITS "${CMAKE_MATCH_3}" PARENT_SCOPE) # 3
+ if (NOT CMAKE_MATCH_4)
+ set(CMAKE_MATCH_4 "0")
+ endif()
+ set(${var_prefix}_VERSION_GIT_REV "${CMAKE_MATCH_4}" PARENT_SCOPE) # 5b92266
+ if (CMAKE_MATCH_5 STREQUAL "-dirty")
+ set(${var_prefix}_VERSION_IS_DIRTY TRUE PARENT_SCOPE)
+ else()
+ set(${var_prefix}_VERSION_IS_DIRTY FALSE PARENT_SCOPE)
+ endif()
+ # timestamp is optional, default to 0
+ if (NOT CMAKE_MATCH_7)
+ set(CMAKE_MATCH_7 "0")
+ endif()
+ set(${var_prefix}_VERSION_COMMIT_TIMESTAMP "${CMAKE_MATCH_7}" PARENT_SCOPE) # 1546836556
+endfunction()
+
+function(determine_version source_dir var_prefix)
+ if (EXISTS "${source_dir}/.git")
+ # for GIT_EXECUTABLE
+ find_package(Git REQUIRED)
+ # get a description of the version, something like:
+ # v1.9.1-0-g38ffe82 (a tagged release)
+ # v1.9.1-0-g38ffe82-dirty (a tagged release with local modifications)
+ # v1.9.0-3-g5b92266 (post-release snapshot)
+ # v1.9.0-3-g5b92266-dirty (post-release snapshot with local modifications)
+ _git(version describe --abbrev=${GIT_REV_LEN} --match "v[0-9]*" --long --dirty)
+ if (NOT _git_ec EQUAL 0)
+ # no annotated tags, fake one
+ git(revision rev-parse --short=${GIT_REV_LEN} --verify HEAD)
+ set(version "v0.0.0-0-g${revision}")
+ # check if dirty (this won't detect untracked files, but should be ok)
+ _git(changes diff-index --quiet HEAD --)
+ if (NOT _git_ec EQUAL 0)
+ string(APPEND version "-dirty")
+ endif()
+ # append the commit timestamp of the most recent commit (only
+ # in non-release branches -- typically master)
+ git(commit_timestamp show -s --format=%ct)
+ string(APPEND version "+${commit_timestamp}")
+ endif()
+ else()
+ # same as above, but used for snapshots
+ file(STRINGS "${source_dir}/version.txt" version)
+ endif()
+ set(local_prefix "_determine_ver")
+ extract_version_info("${version}" "${local_prefix}")
+ foreach(suffix VERSION VERSION_NCOMMITS VERSION_GIT_REV VERSION_IS_DIRTY VERSION_COMMIT_TIMESTAMP)
+ if (NOT DEFINED ${local_prefix}_${suffix})
+ message(FATAL_ERROR "Unable to determine version.")
+ endif()
+ set(${var_prefix}_${suffix} "${${local_prefix}_${suffix}}" PARENT_SCOPE)
+ message(STATUS "${var_prefix}_${suffix}: ${${local_prefix}_${suffix}}")
+ endforeach()
+ # Set VERSION_SUFFIX and VERSION_FULL. When making changes, be aware that
+ # this is used in packaging as well and will affect ordering.
+ # | state | version_full |
+ # |------------------------------------------------|
+ # | exact tag | 0.9.0 |
+ # | exact tag, dirty | 0.9.0+git20180604 |
+ # | after tag | 0.9.0+git20180604.1.085039f |
+ # | no tag | 0.0.0+git20180604.2ee02af |
+ string(TIMESTAMP date "%Y%m%d" UTC)
+ set(version_suffix "")
+ if ((NOT ${local_prefix}_VERSION_NCOMMITS EQUAL 0) OR (${local_prefix}_VERSION STREQUAL "0.0.0"))
+ # 0.9.0+git20150604.4.289818b
+ string(APPEND version_suffix "+git${date}")
+ if (NOT ${local_prefix}_VERSION_NCOMMITS EQUAL 0)
+ string(APPEND version_suffix ".${${local_prefix}_VERSION_NCOMMITS}")
+ endif()
+ string(APPEND version_suffix ".${${local_prefix}_VERSION_GIT_REV}")
+ else()
+ if (${local_prefix}_VERSION_IS_DIRTY)
+ # 0.9.0+git20150604
+ string(APPEND version_suffix "+git${date}")
+ endif()
+ endif()
+ set(version_full "${${local_prefix}_VERSION}${version_suffix}")
+ # set the results
+ set(${var_prefix}_VERSION_SUFFIX "${version_suffix}" PARENT_SCOPE)
+ set(${var_prefix}_VERSION_FULL "${version_full}" PARENT_SCOPE)
+ # for informational purposes
+ message(STATUS "${var_prefix}_VERSION_SUFFIX: ${version_suffix}")
+ message(STATUS "${var_prefix}_VERSION_FULL: ${version_full}")
+endfunction()
+
--
2.20.1

View File

@ -0,0 +1,26 @@
From 40e53d639d86337cf58be3a2b9750b6c97a3c740 Mon Sep 17 00:00:00 2001
From: Justus Winter <teythoon@avior.uberspace.de>
Date: Tue, 21 Jul 2020 16:10:21 +0200
Subject: [PATCH 2/2] Disable ruby-rnp tests.
Prevents cmake from cloning the ruby-rnp repository in order to run its tests.
---
src/tests/CMakeLists.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index d3c4fbe6..e7e1965e 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -125,7 +125,7 @@ gtest_discover_tests(rnp_tests
# ruby-rnp
# cruby does not currently play nice with ASaN et al.
-if (NOT ENABLE_SANITIZERS AND BUILD_SHARED_LIBS AND NOT WIN32)
+if (NOT ENABLE_SANITIZERS AND BUILD_SHARED_LIBS AND NOT WIN32 AND IGNORE)
include(ExternalProject)
set(_sourcedir "${CMAKE_BINARY_DIR}/ruby-rnp")
if (DEFINED ENV{RUBY_RNP_INSTALL})
--
2.20.1

View File

@ -0,0 +1,43 @@
From 4b4697c8dd66bd2b1e4d6b831bbde46e27d62c46 Mon Sep 17 00:00:00 2001
From: Justus Winter <teythoon@avior.uberspace.de>
Date: Tue, 21 Jul 2020 16:10:12 +0200
Subject: [PATCH 1/2] Unbundle googletest.
---
src/tests/CMakeLists.txt | 2 +-
src/tests/gtest-CMakeLists.txt.in | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index 0a841666..d3c4fbe6 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -53,7 +53,7 @@ endif()
# maintain compiler/linker settings on Windows
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
# add to our build (provides gtest_main target)
-add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
+add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/googletest-src
${CMAKE_CURRENT_BINARY_DIR}/googletest-build
EXCLUDE_FROM_ALL)
diff --git a/src/tests/gtest-CMakeLists.txt.in b/src/tests/gtest-CMakeLists.txt.in
index a43e8e5d..3cc0ddd5 100644
--- a/src/tests/gtest-CMakeLists.txt.in
+++ b/src/tests/gtest-CMakeLists.txt.in
@@ -4,9 +4,9 @@ project(googletest-download NONE)
include(ExternalProject)
ExternalProject_Add(googletest
- GIT_REPOSITORY https://github.com/google/googletest.git
- GIT_TAG c43f710
- SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
+# GIT_REPOSITORY https://github.com/google/googletest.git
+# GIT_TAG c43f710
+ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/googletest-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
--
2.20.1