[PATCH] gnu: zstd: Fix cross-building to mingw32.

  • Open
  • quality assurance status badge
Details
One participant
  • Efraim Flashner
Owner
unassigned
Submitted by
Efraim Flashner
Severity
normal

Debbugs page

E
E
Efraim Flashner wrote 3 days ago
(address . guix-patches@gnu.org)(name . Efraim Flashner)(address . efraim@flashner.co.il)
174bb50174a1779a66f95dafd90902288adb440d.1731955075.git.efraim@flashner.co.il
* gnu/packages/compression.scm (zstd)[arguments]: Adjust the custom
'adjust-library-locations phase to have separate logic for targeting
mingw32. Adjust the make-flags to add some extra flags when targeting
mingw32.

Change-Id: Ifd32a6bd9157af93c7338dacc96467e2756b9314
---

I tested this to the best of my ability by using it as an input for
ncdu@2.6 on the wip-zig-bootstrap branch and by comparing the outputs to
the pre-compiled release tarball for win64 on Github.


gnu/packages/compression.scm | 45 ++++++++++++++++++++++++++----------
1 file changed, 33 insertions(+), 12 deletions(-)

Toggle diff (76 lines)
diff --git a/gnu/packages/compression.scm b/gnu/packages/compression.scm
index b3eca16191c..fcde956c4f9 100644
--- a/gnu/packages/compression.scm
+++ b/gnu/packages/compression.scm
@@ -7,7 +7,7 @@
;;; Copyright © 2015, 2016, 2017, 2018, 2020, 2021, 2022, 2024 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2015, 2017, 2018 Leo Famulari <leo@famulari.name>
;;; Copyright © 2015 Jeff Mickey <j@codemac.net>
-;;; Copyright © 2015-2023 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015-2024 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2016 Ben Woodcroft <donttrustben@gmail.com>
;;; Copyright © 2016 Danny Milosavljevic <dannym@scratchpost.org>
;;; Copyright © 2016–2022 Tobias Geerinckx-Rice <me@tobias.gr>
@@ -1779,24 +1779,45 @@ (define-public zstd
(static (assoc-ref outputs "static"))
(shared-libs (string-append lib "/lib"))
(static-libs (string-append static "/lib")))
- ;; Move the static library to its own output to save ~1MiB.
(mkdir-p static-libs)
- (for-each (lambda (ar)
- (link ar (string-append static-libs "/"
- (basename ar)))
- (delete-file ar))
- (find-files shared-libs "\\.a$"))
+ ;; This is based on the win64 release zip file from zstd.
+ ,@(if (target-mingw?)
+ `((for-each delete-file (find-files out "\\.so"))
+ (for-each delete-file (find-files shared-libs "\\.so"))
+ (rename-file (string-append shared-libs "/libzstd.a")
+ (string-append static-libs "/libzstd_static.lib"))
+ (delete-file-recursively
+ (string-append shared-libs "/pkgconfig"))
+ ;; no binary for interpreter `sh' found in $PATH
+ (delete-file (string-append out "/bin/zstdgrep"))
+ (delete-file (string-append out "/bin/zstdless"))
+ (delete-file (string-append out "/share/man/man1/zstdgrep.1"))
+ (delete-file (string-append out "/share/man/man1/zstdless.1")))
+ `(;; Move the static library to its own output to save ~1MiB.
+ (for-each (lambda (ar)
+ (link ar (string-append static-libs "/"
+ (basename ar)))
+ (delete-file ar))
+ (find-files shared-libs "\\.a$"))
- ;; Make sure the pkg-config file refers to the right output.
- (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
- (("^prefix=.*")
- ;; Note: The .pc file expects a trailing slash for 'prefix'.
- (string-append "prefix=" lib "/\n")))))))
+ ;; Make sure the pkg-config file refers to the right output.
+ (substitute* (string-append shared-libs "/pkgconfig/libzstd.pc")
+ (("^prefix=.*")
+ ;; Note: The .pc file expects a trailing slash for 'prefix'.
+ (string-append "prefix=" lib "/\n")))))))))
#:make-flags
(list ,(string-append "CC=" (cc-for-target))
(string-append "prefix=" (assoc-ref %outputs "out"))
(string-append "libdir=" (assoc-ref %outputs "lib") "/lib")
(string-append "includedir=" (assoc-ref %outputs "lib") "/include")
+ ,@(if (target-mingw?)
+ `(;; See the note in the Makefile.
+ "TARGET_SYSTEM=Windows"
+ ;; Don't try to link with pthread.
+ "THREAD_LD="
+ ;; This isn't picked up correctly in the Makefiles.
+ "EXT=.exe")
+ '())
;; Auto-detection is over-engineered and buggy.
"PCLIBDIR=lib"
"PCINCDIR=include"

base-commit: 1affd2b5aa7f5467a44cf757c4fc0c6956d3f3c9
--
Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר
GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 74421@patchwise.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 74421
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch