Message ID | 91e06adbec896b8e685d7bc2501da3e7dc932233.1727525522.git.attila@lendvai.name |
---|---|
State | New |
Headers | show |
Series | [bug#73529,core] gnu: patchelf: Build from git sources. | expand |
attila.lendvai@gmail.com writes: > From: Attila Lendvai <attila@lendvai.name> > > Rationale: it makes it much easier to build a pending PR by using > `(commit "pull/544/head")` in the origin, or in general to experiment > with different patchelf versions. It also makes it more resilient > against attacks hidden in release tarballs. > > Change-Id: I94eaedcd826c32b2c90823fe026718213f8d5962 > --- > > sadly, this leads to endless rebuilds... > > gnu/packages/elf.scm | 27 +++++++++++++++------------ > 1 file changed, 15 insertions(+), 12 deletions(-) > > diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm > index dc2db836321..21228a9d878 100644 > --- a/gnu/packages/elf.scm > +++ b/gnu/packages/elf.scm > @@ -278,19 +278,19 @@ (define-public patchelf > (name "patchelf") > (version "0.18.0") > (source (origin > - (method url-fetch) > - (uri (string-append > - "https://github.com/NixOS/patchelf/releases/download/" > - version > - "/patchelf-" version ".tar.bz2")) > - (sha256 > - (base32 > - "02s7ap86rx6yagfh9xwp96sgsj0p6hp99vhiq9wn4mxshakv4lhr")))) > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/NixOS/patchelf") > + (commit version))) > + (file-name (git-file-name "patchelf" version)) i think should "(git-file-name name version)" ? > + (sha256 > + (base32 > + "1v5mh8wdax4a97hw79nvzy0dixkbs0h487xkskkljkkdamq4rj5z")))) > (build-system gnu-build-system) > (arguments > '(#:phases > (modify-phases %standard-phases > - (add-after 'unpack 'fix-tests > + (add-after 'bootstrap 'fix-tests Just a question, why do you need to change to bootstrap here? > ;; Our GCC code ensures that RUNPATH is never empty, it includes > ;; at least glibc/lib and gcc:lib/lib. > (lambda* (#:key inputs #:allow-other-keys) > @@ -298,8 +298,8 @@ (define-public patchelf > ;; Disable checking for an empty runpath: > (("^if test.*") "") > ;; Find libgcc_s.so, which is necessary for the test: > - (("/xxxxxxxxxxxxxxx") (string-append (assoc-ref inputs "gcc:lib") > - "/lib"))) > + (("/xxxxxxxxxxxxxxx") > + (dirname (search-input-file inputs "/lib/libgcc_s.so")))) > (substitute* "tests/replace-needed.sh" > ;; This test assumes that only libc will be linked alongside > ;; libfoo, but we also link libgcc_s. > @@ -312,7 +312,10 @@ (define-public patchelf > (substitute* "tests/Makefile.in" > ((".*shared-rpath\\.sh \\.*") ""))))))) > (native-inputs > - `(("gcc:lib" ,gcc "lib"))) > + (list > + autoconf > + automake > + (list gcc "lib"))) It would be nice to mention removing labels and adding new dependencies in the submission, and etc/committer.scm maybe useful. > (home-page "https://nixos.org/patchelf.html") > (synopsis "Modify the dynamic linker and RPATH of ELF executables") > (description > > base-commit: 4f86fa20179ded1e6314eeba7da17309d501a32f
> > + (file-name (git-file-name "patchelf" version)) > > > i think should "(git-file-name name version)" ? hrm. i tried that at first, but it errored out with `name` being undefined. i retried it just now to double check, and now it works. i must have been confused by something. the updated patch will have `name` in there. > > + (sha256 > > + (base32 > > + "1v5mh8wdax4a97hw79nvzy0dixkbs0h487xkskkljkkdamq4rj5z")))) > > (build-system gnu-build-system) > > (arguments > > '(#:phases > > (modify-phases %standard-phases > > - (add-after 'unpack 'fix-tests > > + (add-after 'bootstrap 'fix-tests > > > Just a question, why do you need to change to bootstrap here? because the last substitute* touches `tests/Makefile.in` which is generated by the bootstrap phase (by the auto* tools). but now that you asked, i've changed it to target `tests/Makefile.am` instead. > > (native-inputs > > - `(("gcc:lib" ,gcc "lib"))) > > + (list > > + autoconf > > + automake > > + (list gcc "lib"))) > > > It would be nice to mention removing labels and adding new dependencies > in the submission, and etc/committer.scm maybe useful. ok, i'll send an updated patch soon. BTW, etc/committer.scm broke on this package. i've sent a patch to fix that: https://issues.guix.gnu.org/73562
diff --git a/gnu/packages/elf.scm b/gnu/packages/elf.scm index dc2db836321..21228a9d878 100644 --- a/gnu/packages/elf.scm +++ b/gnu/packages/elf.scm @@ -278,19 +278,19 @@ (define-public patchelf (name "patchelf") (version "0.18.0") (source (origin - (method url-fetch) - (uri (string-append - "https://github.com/NixOS/patchelf/releases/download/" - version - "/patchelf-" version ".tar.bz2")) - (sha256 - (base32 - "02s7ap86rx6yagfh9xwp96sgsj0p6hp99vhiq9wn4mxshakv4lhr")))) + (method git-fetch) + (uri (git-reference + (url "https://github.com/NixOS/patchelf") + (commit version))) + (file-name (git-file-name "patchelf" version)) + (sha256 + (base32 + "1v5mh8wdax4a97hw79nvzy0dixkbs0h487xkskkljkkdamq4rj5z")))) (build-system gnu-build-system) (arguments '(#:phases (modify-phases %standard-phases - (add-after 'unpack 'fix-tests + (add-after 'bootstrap 'fix-tests ;; Our GCC code ensures that RUNPATH is never empty, it includes ;; at least glibc/lib and gcc:lib/lib. (lambda* (#:key inputs #:allow-other-keys) @@ -298,8 +298,8 @@ (define-public patchelf ;; Disable checking for an empty runpath: (("^if test.*") "") ;; Find libgcc_s.so, which is necessary for the test: - (("/xxxxxxxxxxxxxxx") (string-append (assoc-ref inputs "gcc:lib") - "/lib"))) + (("/xxxxxxxxxxxxxxx") + (dirname (search-input-file inputs "/lib/libgcc_s.so")))) (substitute* "tests/replace-needed.sh" ;; This test assumes that only libc will be linked alongside ;; libfoo, but we also link libgcc_s. @@ -312,7 +312,10 @@ (define-public patchelf (substitute* "tests/Makefile.in" ((".*shared-rpath\\.sh \\.*") ""))))))) (native-inputs - `(("gcc:lib" ,gcc "lib"))) + (list + autoconf + automake + (list gcc "lib"))) (home-page "https://nixos.org/patchelf.html") (synopsis "Modify the dynamic linker and RPATH of ELF executables") (description
From: Attila Lendvai <attila@lendvai.name> Rationale: it makes it much easier to build a pending PR by using `(commit "pull/544/head")` in the origin, or in general to experiment with different patchelf versions. It also makes it more resilient against attacks hidden in release tarballs. Change-Id: I94eaedcd826c32b2c90823fe026718213f8d5962 --- sadly, this leads to endless rebuilds... gnu/packages/elf.scm | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) base-commit: 4f86fa20179ded1e6314eeba7da17309d501a32f