[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
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 61027@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 61027
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch