From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nikita Karetnikov Subject: Re: Toward 0.2 Date: Sun, 03 Mar 2013 00:17:37 +0400 Message-ID: <87mwula74u.fsf@karetnikov.org> References: <877gm7f01v.fsf@gnu.org> <87obfigz7g.fsf@karetnikov.org> <87y5el6hph.fsf@gnu.org> <87fw0rom1n.fsf@karetnikov.org> <87ehgbql5w.fsf@gnu.org> <87hal5ftyu.fsf@karetnikov.org> <874nh4ju7b.fsf@gnu.org> <87hakzwdzu.fsf@karetnikov.org> <87wqtu3n0z.fsf@gnu.org> <87ehg0rwfd.fsf@karetnikov.org> <87bob38ord.fsf@gnu.org> <87sj4f6u39.fsf@karetnikov.org> <87hakv6ndr.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="==-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" Return-path: Received: from eggs.gnu.org ([208.118.235.92]:55774) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UBsrc-0005XS-LX for bug-guix@gnu.org; Sat, 02 Mar 2013 15:17:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UBsrZ-0007C9-NB for bug-guix@gnu.org; Sat, 02 Mar 2013 15:17:00 -0500 In-Reply-To: <87hakv6ndr.fsf@gnu.org> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?= =?utf-8?Q?s?= message of "(unknown date)") List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org Sender: bug-guix-bounces+gcggb-bug-guix=m.gmane.org@gnu.org To: Ludovic =?utf-8?Q?Court=C3=A8s?= Cc: bug-guix@gnu.org --==-=-= Content-Type: multipart/mixed; boundary="=-=-=" --=-=-= What about this patch? Is there a way to compose the following part somehow to prevent a possible race condition? (rename-file prog prog-real) (with-output-to-file prog (lambda () (format #t "#!~a~%~a~%exec ~a~%" (which "bash") (string-join (map export-variable vars) "\n") (canonicalize-path prog-real)))) (chmod prog #o755))) --=-=-= Content-Type: text/x-diff; charset=utf-8 Content-Disposition: attachment; filename=0001-utils-Add-wrap-program.patch Content-Transfer-Encoding: quoted-printable From=206bd8c169c320ffe9dd13a85a6f63a60b8508bc3c Mon Sep 17 00:00:00 2001 From: Nikita Karetnikov Date: Sat, 2 Mar 2013 20:08:39 +0000 Subject: [PATCH] utils: Add 'wrap-program'. * guix/build/utils.scm (wrap-program): New procedure. =2D-- guix/build/utils.scm | 40 +++++++++++++++++++++++++++++++++++++++- 1 files changed, 39 insertions(+), 1 deletions(-) diff --git a/guix/build/utils.scm b/guix/build/utils.scm index 6921e31..2bff789 100644 =2D-- a/guix/build/utils.scm +++ b/guix/build/utils.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright =C2=A9 2012, 2013 Ludovic Court=C3=A8s +;;; Copyright =C2=A9 2013 Nikita Karetnikov ;;; ;;; This file is part of GNU Guix. ;;; @@ -49,7 +50,8 @@ patch-shebang patch-makefile-SHELL fold-port-matches =2D remove-store-references)) + remove-store-references + wrap-program)) =20 ;;; @@ -605,6 +607,42 @@ known as `nuke-refs' in Nixpkgs." (put-u8 out (char->integer char)) result)))))) =20 +(define* (wrap-program prog #:rest vars) + "Rename PROG to .PROG-real and make PROG a wrapper." + (let ((prog-real (string-append "." prog "-real"))) + (define (export-variable lst) + ;; Return a string that exports an environment variable. + (match lst + ((var sep '=3D rest) + (format #f "export ~a=3D\"~a\"" + var (string-join rest sep))) + ((var sep 'prefix rest) + (format #f "export ~a=3D\"~a${~a~a+~a}$~a\"" + var (string-join rest sep) var sep sep var)) + ((var sep 'suffix rest) + (format #f "export ~a=3D\"$~a${~a~a+~a}~a\"" + var var var sep sep (string-join rest sep))) + ((var '=3D rest) + (format #f "export ~a=3D\"~a\"" + var (string-join rest ":"))) + ((var 'prefix rest) + (format #f "export ~a=3D\"~a${~a:+:}$~a\"" + var (string-join rest ":") var var)) + ((var 'suffix rest) + (format #f "export ~a=3D\"$~a${~a:+:}~a\"" + var var var (string-join rest ":"))))) + + (rename-file prog prog-real) + + (with-output-to-file prog (lambda () + (format #t + "#!~a~%~a~%exec ~a~%" + (which "bash") + (string-join (map export-variable = vars) + "\n") + (canonicalize-path prog-real)))) + (chmod prog #o755))) + ;;; Local Variables: ;;; eval: (put 'call-with-output-file/atomic 'scheme-indent-function 1) ;;; eval: (put 'with-throw-handler 'scheme-indent-function 1) =2D-=20 1.7.5.4 --=-=-=-- --==-=-= Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) iQIcBAEBAgAGBQJRMl5mAAoJEM+IQzI9IQ38//cP/Rrs1kXb5umJbI24kYuW0Ikr cbsXuSBYwJQnu87zCZRIXt9LL3CGH5x3xzpRLo2IBLrYG1lzESyZL4hkv4LZtkB1 m4bgaGF0KmdR/KlunSNSf7Cb8JVLC28R67UO0DIxPeaeZz5PhdRTFz56uOKFqnlb 8gnkfmR9YYfJRJEDI2Y9QMGgRUe8BO6O+I4TYbDfl8FD2kRv8tPzLx6eaYyHRngq CIzNki0PC8m6x4HncS2Jc2ySpXef5o6bJLv2FSrrWApqGmYvxWDf91evrOwProHf /liSAAYNyj3KFgoXot+BLuxx9tS3ja44WtGvNs7DbsK0VbnpHiK1pPMofWQT1WJy P0Ubkw2vTurQeZqFqwPCNubKGj3/xkxC3DQwtdDfDujfj1/o+2vR6D1WuKRDSLRs Ngqof6365rW4vvwoNOjKi/dJdIWc3eoWioA6hsmgLeMFjJyFXaWTxUd573y53BV6 HpzQxCjCGa9PQuty17h2kwmkaymxt3giGTMwP+W3ihSr1IzSH/IY8rd9HQiB2vh9 kIhAW6CL/Jllxc84/iL6gIx22ghBqlzenMayO4V/7vbvZ0kGHRHQP+Dd3gjDN+zE u3lCXiPfyCHQq1OkAwy62vZL4t6VH1Xk9KYGw/dt+QZ6NCL9VWGV03DAx0OC1oYf GltbeouuQN74u4qBjxS1 =wdJ/ -----END PGP SIGNATURE----- --==-=-=--