Subject: Re: [PATCH v2] gnu: Add type-safe.

From: Liliana Marie Prikler <[email-masked]>
Date: Sat, 17 Feb 2024 09:43:53 +0100

Am Donnerstag, dem 15.02.2024 um 14:25 +0000 schrieb Paul A. Patience:
> * gnu/packages/cpp.scm (type-safe): New variable.
> 
> Change-Id: I96a690b41af78e331744daacba1cf5ee77f8257a
> ---
> This patch addresses the issue raised by Skylar Ferris.
Hi, the convention when renewing patches is to keep the order of the
old.  Even if you don't resend all of them (which many for the record
do), it makes sense to still calls this v2 2/2 unless 1/2 is already
pushed.

>  gnu/packages/cpp.scm | 60
> ++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 60 insertions(+)
> 
> diff --git a/gnu/packages/cpp.scm b/gnu/packages/cpp.scm
> index 2456de5002..f7e502d1bf 100644
> --- a/gnu/packages/cpp.scm
> +++ b/gnu/packages/cpp.scm
> @@ -3074,3 +3074,63 @@ (define-public debug-assert
>  @code{DEBUG_ASSERT()} macro, which among other features can be
> selectively
>  enabled in different parts of your code.")
>        (license license:zlib))))
> +
> +(define-public type-safe
> +  (package
> +    (name "type-safe")
> +    (version "0.2.3")
> +    (source
> +     (origin
> +       (method git-fetch)
> +       (uri (git-reference
> +             (url "https://github.com/foonathan/type_safe")
> +             (commit (string-append "v" version))))
> +       (file-name (git-file-name name version))
> +       (sha256
> +        (base32
> "0ijd5grkbzfcmkqydka5ncl7ab4rc3307qr0ywwgzqsifr3ks0fd"))
> +       (modules '((guix build utils)))
> +       ;; Remove bundled debug_assert.
> +       ;; Keep external/external.cmake because it enables
> +       ;; TYPE_SAFE_HAS_IMPORTED_TARGETS, required for installing
> the CMake
> +       ;; config files.
> +       (snippet #~(delete-file-recursively
> "external/debug_assert"))))
You could also rewrite the top-level CMake file so that this is not an
issue.  Alternatively, use the (let ((keep …)) …) pattern, so that the
code is self-explanatory.
> +    (build-system cmake-build-system)
> +    (arguments
> +     (list #:configure-flags
> +           #~(list "-DTYPE_SAFE_BUILD_TEST_EXAMPLE=ON"
> +                   "-DTYPE_SAFE_BUILD_DOC=OFF") ; needs standardese
Can we package that or is there some bootstrapping issue?
> +           #:phases
> +           #~(modify-phases %standard-phases
> +               (add-after 'unpack 'fix-dependencies
> +                 (lambda _
> +                   (substitute*
> +                       (list "include/type_safe/detail/assert.hpp"
> +                            
> "include/type_safe/detail/force_inline.hpp")
> +                     (("#include <debug_assert.hpp>")
> +                      (string-append "#include <"
> +                                     #$(this-package-input "debug-
> assert")
> +                                     "/include/debug_assert.hpp>")))
Use search-input-file.
> +                   (substitute* "test/CMakeLists.txt"
> +                     (("^if\\(NOT EXISTS .*/catch\\.hpp\\)")
> "if(FALSE)")
> +                    
> (("^(target_include_directories\\(type_safe_test) .*"
> +                       all prefix)
> +                      (string-append all prefix " PRIVATE \""
> +                                     #$(this-package-native-input
> "catch2")
> +                                     "/include/catch2\")\n")))))
Use search-input-directory.
> +               (add-after 'install 'fix-cmake-config
> +                 (lambda _
> +                   (substitute* (string-append
> +                                 #$output
> +                                 "/lib/cmake/type_safe/type_safe-
> config.cmake")
> +                     (("^(find_dependency\\(debug_assert)\\)" _
> prefix)
> +                      (string-append prefix " PATHS \""
> +                                     #$(this-package-input "debug-
> assert")
> +                                    
> "/lib/cmake/debug_assert\")"))))))))
In general, I'd encourage writing a patch to fix both this and the
issues pointed out above.  Note, that CMake has its way of locating
packages per cmake files or pkgconfig, so hard-coding directories as
done here is typically *not* needed.
> +    (native-inputs (list catch2))
> +    (inputs (list debug-assert))
> +    (home-page "https://github.com/foonathan/type_safe")
> +    (synopsis "C++ abstractions for preventing bugs via the type
> system")
> +    (description "type_safe is a C++ header-only library which
> provides
> +abstractions for defining more appropriate types, thus allowing
> C++'s type
> +system to prevent more bugs.")
> +    (license license:expat)))

Cheers