Subject: [bug#61027] [PATCH 3/3] gnu: Add flatpak-builder.

From: Nicolas Graves <[email-masked]>
Date: Mon, 23 Jan 2023 13:21:52 +0100

* gnu/packages/package-management.scm (flatpak-builder): New variable.
---
 gnu/packages/package-management.scm | 103 ++++++++++++++++++++++++++++
 1 file changed, 103 insertions(+)

diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 6210be4d5c..bfba2eeacf 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -59,9 +59,11 @@ (define-module (gnu packages package-management)
   #:use-module (gnu packages crypto)
   #:use-module (gnu packages curl)
   #:use-module (gnu packages databases)
+  #:use-module (gnu packages debug)
   #:use-module (gnu packages dejagnu)
   #:use-module (gnu packages dbm)
   #:use-module (gnu packages docbook)
+  #:use-module (gnu packages elf)
   #:use-module (gnu packages file)
   #:use-module (gnu packages freedesktop)
   #:use-module (gnu packages flex)
@@ -83,6 +85,7 @@ (define-module (gnu packages package-management)
   #:use-module (gnu packages lisp)
   #:use-module (gnu packages lua)
   #:use-module (gnu packages man)
+  #:use-module (gnu packages m4)
   #:use-module (gnu packages markup)
   #:use-module (gnu packages nettle)
   #:use-module (gnu packages networking)
@@ -2077,6 +2080,106 @@ (define-public flatpak
 sandboxed desktop applications on GNU/Linux.")
     (license license:lgpl2.1+)))
 
+(define-public flatpak-builder
+  (package
+    (name "flatpak-builder")
+    (version "1.2.3")
+    (source
+     (origin
+       (method git-fetch)
+       (uri (git-reference
+             (url "https://github.com/flatpak/flatpak-builder.git")
+             (commit version)))
+       (file-name (git-file-name name version))
+       (sha256
+        (base32 "07pih8v2i3jzyy8zccdljgi3pgj52bgycrh4h5s20lwdxgnh2hb3"))))
+    (build-system gnu-build-system)
+    (arguments
+     '(#:configure-flags
+       (list
+        "--enable-documentation=no"
+        "--with-system-debugedit")
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'disable-submodules
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((llibglnx (assoc-ref inputs "libglnx")))
+               (substitute* "autogen.sh"
+                 (("^if ! test -f libglnx/README.md; then")
+                  "if test -f libglnx/README.md; then")
+                 ((".*subprojects/libglnx.*") ""))
+               (substitute* "configure.ac"
+                 (("LIBGLNX_CONFIGURE") ""))
+               (substitute* "src/Makefile.am.inc"
+                 (("libglnx.la") "-lglnx"))
+               (substitute* "Makefile.am"
+                 (("^include subprojects/libglnx/Makefile-libglnx.am.inc")
+                  "")
+                 ((".*libglnx_srcpath.*") "")
+                 ((".*/subprojects/debugedit.*") "")
+                 (("-I subprojects/libglnx")
+                  (string-append "-I " llibglnx "/include"))
+                 ((".*subprojects/libglnx.*")
+                  (string-append "  -I " llibglnx "/include"))
+                 (("noinst_LTLIBRARIES .=.*") "")
+                 (("libglnx_libs :=.*")
+                  (string-append "LDFLAGS += -L" llibglnx " -lglnx -static" "\n"))
+                 (("libglnx_cflags :=") "LIBGLNX_CFLAGS = -lglnx"))
+               (substitute*
+                   '("src/builder-cache.c"
+                     "src/builder-cache.h"
+                     "src/builder-extension.c"
+                     "src/builder-flatpak-utils.c"
+                     "src/builder-flatpak-utils.h"
+                     "src/builder-main.c"
+                     "src/builder-manifest.c"
+                     "src/builder-module.c"
+                     "src/builder-post-process.c")
+                 (("\"libglnx/libglnx.h\"") "<libglnx.h>")
+                 (("<libglnx/libglnx.h>") "<libglnx.h>")))))
+         ;; Test are supposed to be done in /var/tmp because of the need for
+         ;; xattrs. Nonetheless, moving it back to /tmp makes tests suceed.
+         (add-before 'check 'allow-tests
+           (lambda _
+             (substitute* '("buildutil/tap-test" "tests/libtest.sh")
+               (("\\/var\\/tmp\\/")
+                "/tmp/")))))))
+    (propagated-inputs (list flatpak debugedit libglnx elfutils))
+    (inputs
+     (list libsoup-minimal-2
+           libostree
+           json-glib
+           curl
+           libyaml))
+    (native-inputs
+     (list autoconf
+           automake
+           m4
+           libtool
+           pkg-config
+           gettext-minimal
+           which))
+    (home-page "https://github.com/flatpak/flatpak-builder.git")
+    (synopsis "Tool to build flatpaks from source")
+    (description "@code{flatpak-builder} is a wrapper around the flatpak build
+command that automates the building of applications and their dependencies.
+It is one option you can use to build applications.
+
+The goal of flatpak-builder is to push as much knowledge about how to build
+modules to the individual upstream projects.  An invocation of flatpak-builder
+proceeds in these stages, each being specified in detail in json format in
+the file MANIFEST :
+
+@itemize
+@item Download all sources
+@item Initialize the application directory with flatpak build-init
+@item Build and install each module with flatpak build
+@item Clean up the final build tree by removing unwanted files and
+e.g. stripping binaries
+@item Finish the application directory with flatpak build-finish
+@end itemize")
+    (license license:lgpl2.1)))
+
 (define-public akku
   (package
     (name "akku")
-- 
2.39.1