guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/01: gnu: ansible: Work around issues with Guix wrapper scripts.


From: guix-commits
Subject: 01/01: gnu: ansible: Work around issues with Guix wrapper scripts.
Date: Tue, 18 Dec 2018 01:20:58 -0500 (EST)

arunisaac pushed a commit to branch master
in repository guix.

commit 01cb4d47570c38812492bbc331b7b818e1b69fbb
Author: Arun Isaac <address@hidden>
Date:   Mon Dec 17 19:32:05 2018 +0530

    gnu: ansible: Work around issues with Guix wrapper scripts.
    
    * gnu/packages/admin.scm (ansible)[source]: Remove
    ansible-wrap-program-hack.patch from patches.
    [arguments]: Add hide-wrapping and fix-symlinks phases.
    * gnu/packages/patches/ansible-wrap-program-hack.patch: Delete file.
    * gnu/local.mk (dist_patch_DATA): Unregister it.
---
 gnu/local.mk                                       |  1 -
 gnu/packages/admin.scm                             | 39 ++++++++++++++++++++--
 .../patches/ansible-wrap-program-hack.patch        | 22 ------------
 3 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 0e2316a..0d60e9b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -579,7 +579,6 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/aegisub-boost68.patch                    \
   %D%/packages/patches/agg-am_c_prototype.patch                        \
   %D%/packages/patches/amule-crypto-6.patch                    \
-  %D%/packages/patches/ansible-wrap-program-hack.patch         \
   %D%/packages/patches/antiword-CVE-2014-8123.patch                    \
   %D%/packages/patches/antlr3-3_1-fix-java8-compilation.patch  \
   %D%/packages/patches/antlr3-3_3-fix-java8-compilation.patch  \
diff --git a/gnu/packages/admin.scm b/gnu/packages/admin.scm
index 01deb09..fa5fa3a 100644
--- a/gnu/packages/admin.scm
+++ b/gnu/packages/admin.scm
@@ -1608,8 +1608,7 @@ of supported upstream metrics systems simultaneously.")
        (uri (pypi-uri "ansible" version))
        (sha256
         (base32
-         "1fsif2jmkrrgiawsd8r6sxrqvh01fvrmdhas0p540a6i9fby3yda"))
-       (patches (search-patches "ansible-wrap-program-hack.patch"))))
+         "1fsif2jmkrrgiawsd8r6sxrqvh01fvrmdhas0p540a6i9fby3yda"))))
     (build-system python-build-system)
     (native-inputs
      `(("python-bcrypt" ,python-bcrypt)
@@ -1626,6 +1625,42 @@ of supported upstream metrics systems simultaneously.")
        ("python-jinja2" ,python-jinja2)
        ("python-pyyaml" ,python-pyyaml)
        ("python-paramiko" ,python-paramiko)))
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         ;; Several ansible commands (ansible-config, ansible-console, etc.)
+         ;; are just symlinks to a single ansible executable. The ansible
+         ;; executable behaves differently based on the value of
+         ;; sys.argv[0]. This does not work well with our wrap phase, and
+         ;; therefore the following two phases are required as a workaround.
+         (add-after 'unpack 'hide-wrapping
+           (lambda _
+             ;; Overwrite sys.argv[0] to hide the wrapper script from it.
+             (substitute* "bin/ansible"
+               (("import traceback" all)
+                (string-append all "
+import re
+sys.argv[0] = re.sub(r'\\.([^/]*)-real$', r'\\1', sys.argv[0])
+")))
+             #t))
+         (add-after 'wrap 'fix-symlinks
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let ((out (assoc-ref outputs "out")))
+               (for-each
+                (lambda (subprogram)
+                  ;; The symlinks point to the ansible wrapper script. Make
+                  ;; them point to the real executable (.ansible-real).
+                  (delete-file (string-append out "/bin/.ansible-" subprogram 
"-real"))
+                  (symlink (string-append out "/bin/.ansible-real")
+                           (string-append out "/bin/.ansible-" subprogram 
"-real"))
+                  ;; The wrapper scripts of the symlinks invoke the ansible
+                  ;; wrapper script. Fix them to invoke the correct executable.
+                  (substitute* (string-append out "/bin/ansible-" subprogram)
+                    (("/bin/ansible")
+                     (string-append "/bin/.ansible-" subprogram "-real"))))
+                (list "config" "console" "doc" "galaxy"
+                      "inventory" "playbook" "pull" "vault")))
+             #t)))))
     (home-page "https://www.ansible.com/";)
     (synopsis "Radically simple IT automation")
     (description "Ansible is a radically simple IT automation system.  It
diff --git a/gnu/packages/patches/ansible-wrap-program-hack.patch 
b/gnu/packages/patches/ansible-wrap-program-hack.patch
deleted file mode 100644
index c2e1028..0000000
--- a/gnu/packages/patches/ansible-wrap-program-hack.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-Ansible changes its behaviour depending on the name of the script that it is
-called as. Make it deal with guix' .real wrapper scripts.
-
-FIXME: Remove once wrapping ansible works properly.
-See http://lists.gnu.org/archive/html/bug-guix/2017-05/msg00015.html.
---- ansible-2.3.0.0/bin/ansible        2017-04-12 16:08:05.000000000 +0200
-+++ ansible-2.3.0.0-fixed/bin/ansible  2017-05-21 20:11:18.720872385 +0200
-@@ -75,7 +75,13 @@
-             # sometimes add that
-             target = target[:-1]
-
--        if len(target) > 1:
-+        if target[-1] == "real" and target[0].startswith('.'):
-+            target = target[:-1]
-+            target[0] = target[0][1:]
-+        if len(target) > 1 and target[1] != "real" :
-+            sub = target[1]
-+            myclass = "%sCLI" % sub.capitalize()
-+        elif len(target) > 2 and target[2] == "real" :
-             sub = target[1]
-             myclass = "%sCLI" % sub.capitalize()
-         elif target[0] == 'ansible':



reply via email to

[Prev in Thread] Current Thread [Next in Thread]