[PATCH] Add flatpak-builder.

  • Open
  • quality assurance status badge
Details
2 participants
  • Jelle Licht
  • Nicolas Graves
Owner
unassigned
Submitted by
Nicolas Graves
Severity
normal
N
N
Nicolas Graves wrote on 23 Jan 2023 13:06
[PATCH] Add flatpak-builder.
(address . guix-patches@gnu.org)
875ycxwj3s.fsf@ngraves.fr
3 patches to add the tool flatpak-builder, useful for building flatpaks.

--
Best regards,
Nicolas Graves
N
N
Nicolas Graves wrote on 23 Jan 2023 13:21
[PATCH 1/3] gnu: Add debugedit.
(address . 61027@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230123122152.5115-1-ngraves@ngraves.fr
* gnu/packages/debug.scm (debugedit): New variable.
---
gnu/packages/debug.scm | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)

Toggle diff (62 lines)
diff --git a/gnu/packages/debug.scm b/gnu/packages/debug.scm
index 1c4f570fe4..48b927b89d 100644
--- a/gnu/packages/debug.scm
+++ b/gnu/packages/debug.scm
@@ -47,6 +47,7 @@ (define-module (gnu packages debug)
#:use-module (gnu packages check)
#:use-module (gnu packages code)
#:use-module (gnu packages compression)
+ #:use-module (gnu packages elf)
#:use-module (gnu packages flex)
#:use-module (gnu packages gdb)
#:use-module (gnu packages glib)
@@ -56,6 +57,8 @@ (define-module (gnu packages debug)
#:use-module (gnu packages libusb)
#:use-module (gnu packages linux)
#:use-module (gnu packages llvm)
+ #:use-module (gnu packages man)
+ #:use-module (gnu packages m4)
#:use-module (gnu packages ncurses)
#:use-module (gnu packages ninja)
#:use-module (gnu packages perl)
@@ -795,6 +798,38 @@ (define-public cgdb
using cgdb.")
(license license:gpl2+)))
+(define-public debugedit
+ (package
+ (name "debugedit")
+ (version "5.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://sourceware.org/git/debugedit.git")
+ (commit (string-append name "-" version) )))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1jxiizzzvx89dhs99aky48kl5s49i5zr9d7j4753gp0knk4pndjm"))))
+ (build-system gnu-build-system)
+ (arguments '(#:tests? #f))
+ (propagated-inputs (list elfutils))
+ (inputs (list zlib xz))
+ (native-inputs
+ (list
+ autoconf automake m4 util-linux libtool help2man pkg-config))
+ (home-page "https://sourceware.org/git/debugedit.git")
+ (synopsis "Tool for debugging")
+ (description
+ "The debugedit project provides programs and scripts for creating
+debuginfo and source file distributions, collect build-ids and rewrite
+source paths in DWARF data for debugging, tracing and profiling.
+
+It is based on code originally from the rpm project plus libiberty and
+binutils. It depends on the elfutils libelf and libdw libraries to
+read and write ELF files, DWARF data and build-ids.")
+ (license license:lgpl2.1)))
+
(define-public mspdebug
;; Last official release was 24 July 2017
(let ((commit "4c4d94e43bc4a18ecf82070ff81cd38dd5641e3b")
--
2.39.1
N
N
Nicolas Graves wrote on 23 Jan 2023 13:21
[PATCH 2/3] gnu: Add libglnx.
(address . 61027@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230123122152.5115-2-ngraves@ngraves.fr
* gnu/packages/package-management.scm (libglnx): New variable.
---
gnu/packages/package-management.scm | 48 +++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)

Toggle diff (61 lines)
diff --git a/gnu/packages/package-management.scm b/gnu/packages/package-management.scm
index 708e06dfe7..6210be4d5c 100644
--- a/gnu/packages/package-management.scm
+++ b/gnu/packages/package-management.scm
@@ -1924,6 +1924,54 @@ (define-public libostree
the boot loader configuration.")
(license license:lgpl2.0+)))
+(define-public libglnx
+ (let ((commit "4e44fd9c174e4196a86fb6d954722feaff612c88")
+ (revision "0"))
+ (package
+ (name "libglnx")
+ (version (git-version "0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://gitlab.gnome.org/GNOME/libglnx.git")
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0b1aqrls3ql2c820plwg0vnxh4xkixvxbkn8mxbyqar7ni8nz0wj"))))
+ (build-system meson-build-system)
+ (arguments
+ (list
+ ;; Using a "release" build is recommended for performance
+ #:build-type "release"
+ #:phases
+ #~(modify-phases %standard-phases
+ (add-before 'configure 'prepare-install
+ (lambda _
+ ;; Install lib.
+ (substitute* "meson.build"
+ (("^ install : false)")
+ (string-append
+ " install : true)" "\n"
+ "install_headers("
+ (string-join
+ (map (lambda (x) (string-append "'" x "'"))
+ (delete "config.h" (find-files "." "\\.h$")))
+ ", ")
+ ")" )))))
+ (add-after 'install 'install-linglnx-config
+ (lambda _
+ (install-file "libglnx-config.h"
+ (string-append #$output "/include")))))))
+ (native-inputs (list cmake pkg-config))
+ (propagated-inputs (list glib))
+ (home-page "https://gitlab.gnome.org/GNOME/libglnx.git")
+ (synopsis "libglnx is an extension to glib")
+ (description
+ "libglnx is the successor to libgsystem. It is used for modules which
+depend on both Glib and Linux.")
+ (license license:lgpl2.1))))
+
(define-public flatpak
(package
(name "flatpak")
--
2.39.1
N
N
Nicolas Graves wrote on 23 Jan 2023 13:21
[PATCH 3/3] gnu: Add flatpak-builder.
(address . 61027@debbugs.gnu.org)(address . ngraves@ngraves.fr)
20230123122152.5115-3-ngraves@ngraves.fr
* gnu/packages/package-management.scm (flatpak-builder): New variable.
---
gnu/packages/package-management.scm | 103 ++++++++++++++++++++++++++++
1 file changed, 103 insertions(+)

Toggle diff (133 lines)
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
J
J
Jelle Licht wrote on 4 Apr 2023 23:05
(address . 61027@debbugs.gnu.org)(address . ngraves@ngraves.fr)
87zg7n73z6.fsf@fsfe.org
Hi Nicolas,

This particular patch does not apply cleanly (anymore).

I think it may introduce module import cycles as well; any chance you
could have a look at that? If it becomes too much of a mess, moving this
package (and eventually other packages as well) into a new
'gnu/packages/flatpak.scm' file could work.

Some additional nitpicks follow inline.

Nicolas Graves via Guix-patches via <guix-patches@gnu.org> writes:

Toggle quote (10 lines)
> * 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

You are missing a copyright line :-)

Toggle quote (43 lines)
> @@ -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"

Enabling documentation should be workable in a way similar to what we do
for gtk-doc, and I've noticed nix already has a similar patch as well as
the one both us and them use for gtk-doc [1].

Adding docbook-xsl, docbook-xml-4.3, libxslt and libxml2 to
native-inputs should do the trick afterwards (untested).


Toggle quote (9 lines)
> + "--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")
Instead of inverting the test, why not substitute with something like
"if false; then" (untested)?

Toggle quote (57 lines)
> + ((".*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.
This
Toggle quote (22 lines)
> +
> +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

J
J
Jelle Licht wrote on 4 Apr 2023 23:07
(address . 61027@debbugs.gnu.org)(address . ngraves@ngraves.fr)
87wn2r73w5.fsf@fsfe.org
Jelle Licht <jlicht@fsfe.org> writes:

Toggle quote (8 lines)
> Hi Nicolas,
> [snip]
>> + (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.
> This
Complete sentence:
This particular sentence can be removed, as it is implied.

Thanks!
- Jelle
?