[Replicant] [libsamsung-ipc] [PATCH 3/3] Add guix.scm

Joonas Kylmälä joonas.kylmala at iki.fi
Sun Nov 29 13:12:55 UTC 2020


I have one concern: if we introduce these packaging files and then the
distro wants to modify them because we did it suboptimally now they
first have to maintain a patch to remove our packaging and then
introduce their packaging meaning extra work for the distro maintainer.
This might also interfere with cherry-picking security fixes in case the
commit that does a security fix also changes these guix.scm files, now
the distro maintaner cannot simply cherry-pick it because it would
conflict with their changes.

Joonas

Denis 'GNUtoo' Carikli:
> The guix.scm file can be used to test the build in various
> configurations in a reproducible way.
> 
> Once you have guix installed, and up to date, you can use
> it with the following command:
> $ guix build --file=guix.scm
> 
> The filename (guix.scm) is a convention that is also used in
> other packages to also do build tests in various configurations.
> 
> For more background on the use of guix.scm see the Guix days 2020
> presentation about it[1].
> 
> [1]https://xana.lepiller.eu/guix-days-2020/guix-days-2020-efraim-flashner-build-it-with-guix.webm
> 
> Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>
> ---
>  guix.scm | 194 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 194 insertions(+)
>  create mode 100644 guix.scm
> 
> diff --git a/guix.scm b/guix.scm
> new file mode 100644
> index 0000000..26210f5
> --- /dev/null
> +++ b/guix.scm
> @@ -0,0 +1,194 @@
> +;;; Copyright © 2020 Denis Carikli <GNUtoo at cyberdimension.org>
> +;;;
> +;;; This file is not part of GNU Guix (yet).
> +;;;
> +;;; Part of this file might be moved to Guix when a new release of
> +;;; libsamsung-ipc is made. This will probably not happen before
> +;;; the API and ABI changes are complete, ie when the ipc_client
> +;;; has been passed to all the exported functions when that makes
> +;;; sense.
> +;;;
> +;;; This file is free software; you can redistribute it and/or modify it
> +;;; under the terms of the GNU General Public License as published by
> +;;; the Free Software Foundation; either version 3 of the License, or (at
> +;;; your option) any later version.
> +;;;
> +;;; This file is distributed in the hope that it will be useful, but
> +;;; WITHOUT ANY WARRANTY; without even the implied warranty of
> +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +;;; GNU General Public License for more details.
> +;;;
> +;;; You should have received a copy of the GNU General Public License
> +;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
> +
> +(use-modules
> + (ice-9 popen)
> + (ice-9 rdelim)
> + (sxml ssax input-parse)
> + ((guix licenses) #:prefix license:)
> + (guix build-system android-ndk)
> + (guix build-system gnu)
> + (guix gexp)
> + (guix git-download)
> + (guix packages)
> + (gnu packages android)
> + (gnu packages autotools)
> + (gnu packages disk)
> + (gnu packages linux)
> + (gnu packages llvm)
> + (gnu packages pkg-config)
> + (gnu packages python)
> + (gnu packages python-xyz)
> + (gnu packages tls))
> +
> +(define %strict-cflags "CFLAGS=-Werror -W -Wall -Wunused -Wunused-function")
> +
> +(define %commit
> +  (let* ((port (open-input-pipe
> +                "git --no-pager log --oneline HEAD -1 --format='%H'"))
> +         (str  (read-line port)))
> +    (close-pipe port)
> +    str))
> +
> +(define %local-source
> +  (local-file
> +   (dirname (current-filename)) #:recursive? #t))
> +
> +(define-public libsamsung-ipc
> +  (package
> +    (name "libsamsung-ipc")
> +    (version (git-version "0.0" "HEAD" %commit))
> +    (source %local-source)
> +    (build-system gnu-build-system)
> +    (native-inputs
> +     `(("autoreconf" ,autoconf)
> +       ("aclocal" ,automake)
> +       ("ddrescue", ddrescue)
> +       ("libtool" ,libtool)
> +       ("pkgconfig" ,pkg-config)
> +       ("python" ,python)
> +       ("python-sh" ,python-sh)))
> +    (inputs
> +     `(("openssl" ,openssl)))
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (add-before 'build 'patch-python
> +           (lambda _
> +             (substitute* (find-files "tools" ".*\\.py$")
> +               (("/usr/bin/env python") (which "python3")))
> +           #t)))))
> +    (synopsis "libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol")
> +    (description
> +     "libsamsung-ipc is a free software implementation of the Samsung IPC modem protocol,
> +found in many Samsung smartphones and tablets.")
> +    (home-page "https://www.replicant.us")
> +    (license license:gpl2+)))
> +
> +(define-public libsamsung-ipc-gcc-android
> +  (package
> +   (inherit libsamsung-ipc)
> +    (name "libsamsung-ipc-gcc-android")
> +    (build-system android-ndk-build-system)
> +    (inputs
> +     `(("android-libutils" ,android-libutils)
> +       ("libcrypto" ,openssl)))
> +    (native-inputs '())
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (delete 'bootstrap)
> +         (add-before 'build 'patch-host
> +           (lambda _
> +             (substitute* "Android.mk"
> +               (("BUILD_SHARED_LIBRARY") "BUILD_HOST_SHARED_LIBRARY")
> +               (("BUILD_STATIC_LIBRARY") "BUILD_HOST_STATIC_LIBRARY")
> +               (("BUILD_STATIC_EXECUTABLE") "BUILD_HOST_STATIC_EXECUTABLE"))
> +             #t)))
> +       #:make-flags (list ,%strict-cflags)))))
> +
> +(define-public libsamsung-ipc-gcc-autotools
> +  (package
> +   (inherit libsamsung-ipc)
> +   (name "libsamsung-ipc-gcc-autotools")
> +   (arguments
> +    `(#:phases
> +      (modify-phases %standard-phases
> +                     (add-before 'build 'patch-python
> +                                 (lambda _
> +                                   (substitute* (find-files "tools" ".*\\.py$")
> +                                                (("/usr/bin/env python") (which "python3")))
> +                                   #t)))
> +      #:make-flags (list ,%strict-cflags)))))
> +
> +(define-public libsamsung-ipc-clang-autotools
> +  (package
> +   (inherit libsamsung-ipc)
> +   (name "libsamsung-ipc-gcc-autotools")
> +    (native-inputs
> +     `(("autoreconf" ,autoconf)
> +       ("aclocal" ,automake)
> +       ("ddrescue", ddrescue)
> +       ("libtool" ,libtool)
> +       ("pkgconfig" ,pkg-config)
> +       ("python" ,python)
> +       ("python-sh" ,python-sh)
> +       ("clang" ,clang-10)))
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (add-before 'build 'patch-python
> +           (lambda _
> +             (substitute* (find-files "tools" ".*\\.py$")
> +               (("/usr/bin/env python") (which "python3")))
> +             #t)))
> +     #:make-flags (list ,%strict-cflags)))))
> +
> +(define-public libsamsung-ipc-clang-android
> +  (package
> +   (inherit libsamsung-ipc)
> +    (name "libsamsung-ipc-clang-android")
> +    (build-system android-ndk-build-system)
> +    (inputs
> +     `(("android-libutils" ,android-libutils)
> +       ("libcrypto" ,openssl)
> +       ("clang" ,clang-10)))
> +    (native-inputs '())
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (delete 'bootstrap)
> +         (add-before 'build 'patch-host
> +           (lambda _
> +             (substitute* "Android.mk"
> +               (("BUILD_SHARED_LIBRARY") "BUILD_HOST_SHARED_LIBRARY")
> +               (("BUILD_STATIC_LIBRARY") "BUILD_HOST_STATIC_LIBRARY")
> +               (("BUILD_STATIC_EXECUTABLE") "BUILD_HOST_STATIC_EXECUTABLE"))
> +             #t))
> +         (add-after 'patch-host 'prepare-build-environment
> +                    (lambda* (#:key inputs #:allow-other-keys)
> +                      (setenv "CC" "clang")
> +                      #t)))
> +       #:make-flags (list ,%strict-cflags)))))
> +
> +;; Combinaisons:
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | Package name                   | Compiler | Compiler | Build system | Comments     |
> +;; |                                |          | flags    |              |              |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | libsamsung-ipc                 | GCC      | none     | autotools    | Base package |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | libsamsung-ipc-gcc-android     | GCC      | strict   | Android.mk   |              |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | libsamsung-ipc-gcc-autotools   | GCC      | strict   | autotools    |              |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | libsamsung-ipc-clang-android   | clang    | strict   | Android.mk   |              |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +;; | libsamsung-ipc-clang-autotools | clang    | strict   | autotools    |              |
> +;; +--------------------------------+----------+----------+--------------+--------------+
> +
> +(list libsamsung-ipc
> +      libsamsung-ipc-gcc-android
> +      libsamsung-ipc-gcc-autotools
> +      libsamsung-ipc-clang-android
> +      libsamsung-ipc-clang-autotools)
> 


More information about the Replicant mailing list