Subject: [bug#56505] [PATCHES] Mingw configuration for openssl

From: Vivien Kraus <[email-masked]>
Date: Fri, 05 Aug 2022 09:58:56 +0200

Hi,

Le vendredi 05 août 2022 à 00:14 +0200, Ludovic Courtès a écrit :
> ‘guix build openssl --target=x86_64-w64-mingw32’ works and the funny
> part is that .dll files end up in bin/, but I think that’s intended
> on
> Windows?

That’s right. Windows does not have shared objects, and DLLs are not.
You cannot use the compiler to link to a DLL as far as I understand, so
you wouldn’t put them in lib. What you have in lib are the so-called
"import libraries" (.dll.a). These are static libraries that pretend to
provide the functionality, but in fact open the DLL at run-time to
fetch the library implementation from the DLL. So DLLs are kind of
resources.

Anyway, you see that in lib/ you have all the .dll.a files… Oops… I may
have forgotten to check this… This is not a huge problem, because all
outputs would be available when building a dependent package, but it’s
still not right I think.

Now, the .dll.a files are smaller than the static libraries, but not
that small. I don’t know why exactly.

Should I open a new issue with this patch, or is it somehow possible to
continue the discussion here?

Best regards,

Vivien
From 1ee8daf446ca874ff4e5daa65d6f4034df51838e Mon Sep 17 00:00:00 2001
From: Vivien Kraus <[email-masked]>
Date: Fri, 5 Aug 2022 09:52:21 +0200
Subject: [PATCH] gnu: openssl: Keep .dll.a files in main output.

* gnu/packages/tls.scm (openssl) [phase move-static-libraries]: Do not move
.dll.a files to the static output when targetting mingw.
---
 gnu/packages/tls.scm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 1e527ecce2..4ee75ace3d 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -507,7 +507,13 @@ (define-public openssl
                (for-each (lambda (file)
                            (install-file file slib)
                            (delete-file file))
-                         (find-files lib "\\.a$")))))
+                         (find-files
+                          lib
+                          #$(if (target-mingw?)
+                                '(lambda (filename _)
+                                   (and (string-suffix? ".a" filename)
+                                        (not (string-suffix? ".dll.a" filename))))
+                                "\\.a$"))))))
          (add-after 'install 'move-extra-documentation
            (lambda _
              ;; Move man pages and full HTML documentation to "doc".

base-commit: cc4c02e346a71ccef897e2d9f04fa2df2529a269
-- 
2.37.1