Explorar o código

libintl: add MinGW (#7342)

* libintl: add MinGW

* libintl: fix MinGW build

* try to fix MinGW

* cl

* check shared build for MinGW

* fixup
Saikari hai 6 meses
pai
achega
85a6a742f4

+ 12 - 0
packages/l/libintl/patches/0.22.3/fix-mingw-build-wgetcwd.diff

@@ -0,0 +1,12 @@
+diff --git a/gettext-runtime/intl/dcigettext.c b/gettext-runtime/intl/dcigettext.c
+index 7c122b1..0647f8f 100644
+--- a/gettext-runtime/intl/dcigettext.c
++++ b/gettext-runtime/intl/dcigettext.c
+@@ -66,6 +66,7 @@ extern int errno;
+ #endif
+ 
+ #include <locale.h>
++#include <direct.h>
+ 
+ #ifdef _LIBC
+   /* Guess whether integer division by zero raises signal SIGFPE.

+ 10 - 5
packages/l/libintl/port/0.22.3/xmake.lua

@@ -294,7 +294,7 @@ void test() {
   setlocale(LC_ALL, "en_US.UTF-8");
 }
 ]])
-if is_plat("windows") and is_kind("shared") then
+if is_plat("windows", "mingw") and is_kind("shared") then
     set_configvar("WOE32DLL", 1)
 end
 set_configvar("SETLOCALE_NULL_ALL_MTSAFE", is_plat("windows", "linux") and 1 or 0)
@@ -306,7 +306,7 @@ set_configvar("NEED_SETLOCALE_MTSAFE", is_plat("windows", "linux") and 0 or 1)
 set_configvar("GUARD_PREFIX", "GL", {quote = false})
 set_configvar("PRAGMA_SYSTEM_HEADER", "", {quote = false})
 set_configvar("PRAGMA_COLUMNS", "", {quote = false})
-if is_plat("windows") then
+if is_plat("windows", "mingw") then
     set_configvar("INCLUDE_NEXT", "include", {quote = false})
     set_configvar("NEXT_SEARCH_H", "<search.h>", {quote = false})
 else
@@ -361,7 +361,7 @@ target("intl")
     if is_kind("shared") then
         add_defines("BUILDING_LIBINTL", "BUILDING_DLL")
     end
-    if is_plat("windows") then
+    if is_plat("windows", "mingw") then
         add_syslinks("advapi32")
     end
     set_configvar("HAVE_ICONV", 0)
@@ -407,7 +407,7 @@ target("intl")
               "gettext-runtime/intl/gnulib-lib/tsearch.c",
               "gettext-runtime/intl/gnulib-lib/glthread/lock.c",
               "gettext-runtime/intl/gnulib-lib/glthread/threadlib.c")
-    if is_plat("windows") then
+    if is_plat("windows", "mingw") then
         add_files("gettext-runtime/intl/gnulib-lib/windows-mutex.c",
                   "gettext-runtime/intl/gnulib-lib/windows-rwlock.c",
                   "gettext-runtime/intl/gnulib-lib/windows-recmutex.c",
@@ -419,12 +419,17 @@ target("intl")
         io.gsub("gettext-runtime/intl/gnulib-lib/tsearch.h", "(definition of _GL_WARN_ON_USE.-)\n", "%1\n#include <warn-on-use.h>\n")
         io.replace("gettext-runtime/intl/gnulib-lib/tsearch.c", "#include <search.h>", "#include <tsearch.h>", {plain = true})
         os.cp("gettext-runtime/intl/libgnuintl.h", "gettext-runtime/intl/libintl.h")
+
+        if target:is_plat("mingw") and target:kind() == "shared" then
+            io.gsub("gettext-runtime/intl/export.h", "#define LIBINTL_DLL_EXPORTED.-\n", "#define LIBINTL_DLL_EXPORTED __declspec(dllexport)\n")
+        end
+
         local lines = io.readfile("gettext-runtime/intl/export.h")
         io.replace("gettext-runtime/intl/libgnuintl.h", "#define _LIBINTL_H 1", "#define _LIBINTL_H 1\n" .. lines, {plain = true})
         io.replace("gettext-runtime/intl/libgnuintl.h", "extern", "extern LIBINTL_DLL_EXPORTED", {plain = true})
     end)
     after_install(function (target)
-        io.replace("gettext-runtime/intl/libintl.h", "extern", (target:is_plat("windows") and target:kind() == "shared") and "extern __declspec(dllimport)" or "extern", {plain = true})
+        io.replace("gettext-runtime/intl/libintl.h", "extern", (target:is_plat("windows", "mingw") and target:kind() == "shared") and "extern __declspec(dllimport)" or "extern", {plain = true})
         os.cp("gettext-runtime/intl/libintl.h", path.join(target:installdir(), "include", "libintl.h"))
     end)
 target_end()

+ 6 - 3
packages/l/libintl/xmake.lua

@@ -1,5 +1,4 @@
 package("libintl")
-
     set_homepage("https://www.gnu.org/software/gettext/")
     set_description("GNU gettext runtime")
 
@@ -8,7 +7,11 @@ package("libintl")
     add_versions("0.21", "d20fcbb537e02dcf1383197ba05bd0734ef7bf5db06bdb241eb69b7d16b73192")
     add_versions("0.22.3", "b838228b3f8823a6c1eddf07297197c4db13f7e1b173b9ef93f3f945a63080b6")
 
-    if is_plat("windows") then
+    if is_plat("mingw") then
+        add_patches("0.22.3", "patches/0.22.3/fix-mingw-build-wgetcwd.diff", "4db86b836cf332151558d5cd4553ed2e8a6dc88676b5d66dda486f55dcd6785c")
+    end
+
+    if is_plat("windows", "mingw") then
         add_syslinks("advapi32")
     end
 
@@ -18,7 +21,7 @@ package("libintl")
         end
     end)
 
-    on_install("windows", "macosx", "android", function (package)
+    on_install("windows", "macosx", "android", "mingw", function (package)
         -- on linux libintl is already a part of libc
         os.cp(path.join(os.scriptdir(), "port", package:version_str(), "xmake.lua"), "xmake.lua")
         for _, conffile in ipairs({"gettext-runtime/config.h.in", "gettext-runtime/intl/config.h.in"}) do