Subject: [PATCH v2 3/9] gnu: Add sanitizers-cmake.

From: Simon South <[email-masked]>
Date: Fri, 27 Jan 2023 15:34:28 -0500

* gnu/packages/cmake.scm (sanitizers-cmake): New variable.
---
 gnu/packages/cmake.scm | 45 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/gnu/packages/cmake.scm b/gnu/packages/cmake.scm
index 87fde01f63..f0d25b707d 100644
--- a/gnu/packages/cmake.scm
+++ b/gnu/packages/cmake.scm
@@ -12,6 +12,7 @@
 ;;; Copyright © 2019 Pierre-Moana Levesque <[email-masked]>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <[email-masked]>
 ;;; Copyright © 2021 Ricardo Wurmus <[email-masked]>
+;;; Copyright © 2023 Simon South <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -32,6 +33,7 @@ (define-module (gnu packages cmake)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages)
   #:use-module (guix download)
+  #:use-module (guix gexp)
   #:use-module (guix git-download)
   #:use-module (guix utils)
   #:use-module (guix deprecation)
@@ -422,3 +424,46 @@ (define-public emacs-cmake-mode
     (description "@code{cmakeos-mode} provides an Emacs major mode for editing
 Cmake files.  It supports syntax highlighting, indenting and refilling of
 comments.")))
+
+(define-public sanitizers-cmake
+  (let ((commit "a6748f4f51273d86312e3d27ebe5277c9b1ff870")
+        (revision "0"))
+    (package
+      (name "sanitizers-cmake")
+      (version (git-version "0.0" revision commit))
+      (source (origin
+                (method git-fetch)
+                (uri (git-reference
+                      (url "https://github.com/arsenm/sanitizers-cmake")
+                      (commit commit)))
+                (file-name (git-file-name name version))
+                (sha256
+                 (base32
+                  "0shja5qipcsxgj5v6aic9q3dik0cbahllriigwgpayv5ng3ki1ij"))))
+      (build-system cmake-build-system)
+      (arguments
+       (list
+        #:configure-flags
+        #~(list
+           ;; Enable the "new" behavior established by CMake policy CMP0077,
+           ;; which pertains to CMake's "option()" command.  This is required
+           ;; for the package's test suite to complete successfully.
+           ;; Note this setting may become redundant with future versions of
+           ;; CMake (past 3.24.2).
+           "-DCMAKE_POLICY_DEFAULT_CMP0077=NEW")
+        #:phases
+        #~(modify-phases %standard-phases
+            ;; No install target provided; manually copy files to a suitable
+            ;; folder in the output.
+            (replace 'install
+              (lambda* (#:key source #:allow-other-keys)
+                (copy-recursively
+                 (string-append source "/cmake")
+                 (string-append #$output "/share/" #$name "/cmake")))))))
+      (synopsis "CMake module to enable sanitizers for binary targets")
+      (description "@code{sanitizers-cmake} provides a module for the CMake
+build system that can enable address, memory, thread and undefined-behavior
+sanitizers for binary targets using flags appropriate for the compiler in
+use.")
+      (home-page "https://github.com/arsenm/sanitizers-cmake")
+      (license license:expat))))
-- 
2.38.1