From d9379ceef2a7f6ed7bf49839ed066eca06d2b874 Mon Sep 17 00:00:00 2001 Message-Id: From: Jean-Pierre De Jesus DIAZ 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 ;;; Copyright © 2022 Lu hui ;;; Copyright © 2022 Maxim Cournoyer +;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ ;;; ;;; 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