unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#56253] [PATCH]: gnu: vpnc: Fix cross-compilation.
@ 2022-06-27 10:52 Jean Pierre De Jesus DIAZ via Guix-patches via
  2022-06-27 11:27 ` Maxime Devos
  2022-06-29 11:04 ` Jean Pierre De Jesus DIAZ via Guix-patches via
  0 siblings, 2 replies; 8+ messages in thread
From: Jean Pierre De Jesus DIAZ via Guix-patches via @ 2022-06-27 10:52 UTC (permalink / raw)
  To: 56253

[-- Attachment #1: Type: text/plain, Size: 681 bytes --]

Fix cross-compilation for `vpnc'.

The error was because the `Makefile' tried to execute the resulting binary and
failed as a result. This is done to generate the manpage.

The solution I found was to compile twice the binary, one for the host and the
other for the target, this way the manpage is generated and installed first and
the binary for the target is built later. When not cross-compiling this is not
done.

The error can be seen by executing:

guix build vpnc \
           --target=aarch64-linux-gnu

I'm not entirely sure that I've made a correct git message, so feel free to
modify it if doesn't match the standards.


—
Jean-Pierre De Jesus DIAZ

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-gnu-vpnc-Fix-cross-compilation.patch --]
[-- Type: text/x-patch; name=0001-gnu-vpnc-Fix-cross-compilation.patch, Size: 7210 bytes --]

From d9379ceef2a7f6ed7bf49839ed066eca06d2b874 Mon Sep 17 00:00:00 2001
Message-Id: <d9379ceef2a7f6ed7bf49839ed066eca06d2b874.1656326922.git.me@jeandudey.tech>
From: Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
Date: Mon, 27 Jun 2022 12:41:35 +0200
Subject: [PATCH] gnu: vpnc: Fix cross-compilation.

* gnu/packages/vpn.scm (vpnc): Fix cross-compilation of package. Use
  G-Exps. Remove substitutions in favour of `#:make-flags`. Fix manpage
  generation error when cross-compiling, as the manpage generation
  depends on the executable being built for the host machine it is built
  twice for the host and the target machine, when not cross-compiling
  the package is built only one time. Add bsd-2 to license section and
  list the files as comments that are bsd-2. Remove duplicate
  installation of license files.
---
 gnu/packages/vpn.scm | 95 +++++++++++++++++++++++++++++++++++---------
 1 file changed, 76 insertions(+), 19 deletions(-)

diff --git a/gnu/packages/vpn.scm b/gnu/packages/vpn.scm
index e33821c97f..01f29996f2 100644
--- a/gnu/packages/vpn.scm
+++ b/gnu/packages/vpn.scm
@@ -21,6 +21,7 @@
 ;;; Copyright © 2022 Josselin Poiret <josselin.poiret@protonmail.ch>
 ;;; Copyright © 2022 Lu hui <luhux76@gmail.com>
 ;;; Copyright © 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -477,25 +478,76 @@ (define-public vpnc
             (sha256 (base32
                      "1128860lis89g1s21hqxvap2nq426c9j4bvgghncc1zj0ays7kj6"))))
    (build-system gnu-build-system)
-   (inputs (list libgcrypt perl vpnc-scripts))
+   ;; libgcrypt and vpnc-scripts are duplicated on both inputs because when
+   ;; cross-compiling we build vpnc for the host (to generate the manpage)
+   ;; and the target system.
+   (native-inputs (list libgcrypt perl vpnc-scripts))
+   (inputs (list libgcrypt vpnc-scripts))
    (arguments
-    `(#:tests? #f ; there is no check target
-      #:phases
-      (modify-phases %standard-phases
-        (add-after 'unpack 'use-store-paths
-          (lambda* (#:key inputs outputs #:allow-other-keys)
-            (let ((out          (assoc-ref outputs "out"))
-                  (vpnc-scripts (assoc-ref inputs  "vpnc-scripts")))
-              (substitute* "config.c"
-                (("/etc/vpnc/vpnc-script")
-                 (string-append vpnc-scripts "/etc/vpnc/vpnc-script")))
-              (substitute* "Makefile"
-                (("ETCDIR=.*")
-                 (string-append "ETCDIR=" out "/etc/vpnc\n"))
-                (("PREFIX=.*")
-                 (string-append "PREFIX=" out "\n")))
-              #t)))
-        (delete 'configure))))          ; no configure script
+     (list #:tests? #f ;; There is no check target
+           #:make-flags
+           #~(let ((out (assoc-ref %outputs "out")))
+               (list (string-append "CC=" #$(cc-for-target))
+                     (string-append "ETCDIR=" out "/etc/vpnc")
+                     (string-append "PREFIX=" out)))
+           #:phases
+           #~(modify-phases %standard-phases
+               (delete 'configure) ;; No configure script.
+               (add-after 'unpack 'use-store-paths
+                 (lambda* (#:key inputs outputs #:allow-other-keys)
+                   (let ((vpnc-scripts (assoc-ref inputs  "vpnc-scripts")))
+                     (substitute* "config.c"
+                       (("/etc/vpnc/vpnc-script")
+                        (string-append vpnc-scripts "/etc/vpnc/vpnc-script"))))))
+               (add-before 'build 'build-manpage
+                 (lambda* (#:key outputs parallel-build? target
+                           #:allow-other-keys)
+                   ;; The Makefile tries to generate the manpage by executing
+                   ;; the resulting binary, so, when cross-compiling the vpnc
+                   ;; package must be built first on the host to generate the
+                   ;; manpage. This step is not necessary when the target is
+                   ;; the host.
+                   (when target
+                     (apply invoke "make" "vpnc.8" "CC=gcc"
+                            (if parallel-build?
+                               (list "-j" (number->string (parallel-job-count)))
+                               '()))
+                     (install-file "vpnc.8"
+                                   (string-append (assoc-ref outputs "out")
+                                                  "/share/man/man8"))
+                     (invoke "make" "clean"))))
+               (replace 'build
+                 (lambda* (#:key inputs make-flags parallel-build? target
+                           #:allow-other-keys)
+                   ;; When cross-compiling, the bash script 'libgcrypt-config'
+                   ;; must be accessible during the configure phase.
+                   (when target
+                     (setenv "PATH"
+                             (string-append
+                               (dirname
+                                 (search-input-file inputs
+                                                    "bin/libgcrypt-config"))
+                               ":" (getenv "PATH"))))
+                   (apply invoke "make" "vpnc" "cisco-decrypt" "vpnc-script"
+                          (append make-flags
+                                  ;; Build manpage only if not cross-compiling.
+                                  (if (not target) (list "vpnc.8") '())
+                                  (if parallel-build?
+                                    (list "-j" (number->string (parallel-job-count)))
+                                    '())))))
+               (add-before 'install 'patch-install
+                 (lambda* (#:key target #:allow-other-keys)
+                   ;; When cross-compiling the manpage is already installed by
+                   ;; this point.
+                   (when target
+                     (substitute* "Makefile"
+                       (("all : \\$\\(BINS\\) vpnc\\.8 vpnc-script")
+                        "all : $(BINS) vpnc-script")
+                       (("install -m644 vpnc\\.8.*") "")))
+                   ;; Remove installation of COPYING as 'install-license-files
+                   ;; phase does it with a proper version number.
+                   (substitute* "Makefile"
+                     (("install -m644 COPYING.*") "")))))))
    (synopsis "Client for Cisco VPN concentrators")
    (description
     "vpnc is a VPN client compatible with Cisco's EasyVPN equipment.
@@ -503,7 +555,12 @@ (define-public vpnc
 shared-secret IPSec authentication with Xauth, AES (256, 192, 128), 3DES,
 1DES, MD5, SHA1, DH1/2/5 and IP tunneling.  It runs entirely in userspace.
 Only \"Universal TUN/TAP device driver support\" is needed in the kernel.")
-   (license license:gpl2+) ; some file are bsd-2, see COPYING
+   (license (list license:gpl2+
+                  ;; dh.c
+                  ;; dh.h
+                  ;; math_group.c
+                  ;; math_group.h
+                  license:bsd-2))
    (home-page "https://www.unix-ag.uni-kl.de/~massar/vpnc/")))
 
 (define-public vpnc-scripts
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-07-04 10:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-27 10:52 [bug#56253] [PATCH]: gnu: vpnc: Fix cross-compilation Jean Pierre De Jesus DIAZ via Guix-patches via
2022-06-27 11:27 ` Maxime Devos
2022-06-29 11:09   ` Maxime Devos
2022-06-29 11:04 ` Jean Pierre De Jesus DIAZ via Guix-patches via
2022-06-29 11:09   ` Maxime Devos
     [not found]     ` <E8aSXjBDzXnEnG_vsKAVAnIJCpw8ynAH8Ea99oyvrOj7BSa_UM7a5jhnbz8qkgIO6MYnDVnv88hTaPmqRhj69gbbSOIpctK1gRD9MExRmp8=@jeandudey.tech>
2022-06-29 18:35       ` Maxime Devos
2022-06-29 19:01         ` Jean Pierre De Jesus DIAZ via Guix-patches via
2022-07-04 10:28           ` bug#56253: " Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).