Pārlūkot izejas kodu

Update opencc to 1.1.9 (#8192)

* Update opencc to 1.1.9

* refractor

* add python3

* fix cross build

* fix wasm corner case

---------

Co-authored-by: star9029 <[email protected]>
Chen Linxuan 2 mēneši atpakaļ
vecāks
revīzija
f27ca702a9
1 mainītis faili ar 84 papildinājumiem un 20 dzēšanām
  1. 84 20
      packages/o/opencc/xmake.lua

+ 84 - 20
packages/o/opencc/xmake.lua

@@ -1,40 +1,104 @@
 package("opencc")
-
     set_homepage("https://github.com/BYVoid/OpenCC")
     set_description("Conversion between Traditional and Simplified Chinese.")
+    set_license("Apache-2.0")
+
+    add_urls("https://github.com/BYVoid/OpenCC/archive/refs/tags/ver.$(version).tar.gz")
+    add_urls("https://github.com/BYVoid/OpenCC.git", {alias = "git"})
 
-    set_urls("https://github.com/BYVoid/OpenCC/archive/ver.$(version).zip")
-    add_versions("1.1.2", "b4a53564d0de446bf28c8539a8a17005a3e2b1877647b68003039e77f8f7d9c2")
+    add_versions("1.1.9", "ad4bcd8d87219a240a236d4a55c9decd2132a9436697d2882ead85c8939b0a99")
+    
+    add_versions("git:1.1.9", "ver.1.1.9")
 
-    add_patches("1.1.2", path.join(os.scriptdir(), "patches", "1.1.2", "fix-static.patch"), "a51b58d5d092a057461bc8c7661546cde5c39af3c1f4438abc1d89e1a1df7122")
+    add_configs("darts", {description = "Build DartsDict (ocd format)", default = true, type = "boolean"})
 
-    add_deps("cmake", {kind = "binary"})
-    if not is_plat("bsd") then
-        add_deps("python 3.x", {kind = "binary"})
+    add_deps("cmake", "python 3.x", {kind = "binary"})
+    if is_subhost("windows") then
+        add_deps("pkgconf")
+    else
+        add_deps("pkg-config")
     end
+    add_deps("marisa v0.2.6", "rapidjson", "tclap")
 
     on_load(function (package)
-        if package:is_plat("linux", "mingw") and not package:config("shared") then
-            package:add("links", "opencc", "marisa")
+        if package:config("darts") then
+            package:add("deps", "darts")
+            package:add("defines", "ENABLE_DARTS")
+        end
+        if package:is_cross() then
+            -- use host opencc_dict for cross build
+            package:add("deps", "opencc~host", {kind = "binary", host = true})
+        else
+            package:addenv("PATH", "bin")
         end
         if not package:config("shared") then
             package:add("defines", "Opencc_BUILT_AS_STATIC")
         end
-        package:addenv("PATH", "bin")
     end)
 
-    on_install("windows", "mingw@windows,msys", "linux", "macosx", "bsd", function (package)
-        local configs = {"-DBUILD_DOCUMENTATION=OFF", "-DENABLE_GTEST=OFF"}
-        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
+    on_install(function (package)
+        -- If system have node, cmake will use node to run opencc_dict.js and failed to build
+        if package:is_cross() then
+            io.replace("data/CMakeLists.txt",
+                "COMMAND\n      ${OPENCC_DICT_BIN}",
+                format("COMMAND\n      %s/bin/opencc_dict", path.unix(package:dep("opencc"):installdir())), {plain = true})
+        end
+        io.replace("src/SerializedValues.hpp", "#pragma once", "#pragma once\n#include <cstdint>", {plain = true}) -- fix gcc15
+        io.replace("CMakeLists.txt", "-pthread", "", {plain = true}) -- break opencc tool on wasm
+        io.replace("src/CMakeLists.txt", "set_target_properties(libopencc PROPERTIES POSITION_INDEPENDENT_CODE ON)", "", {plain = true})
+        io.replace("src/CMakeLists.txt", "target_link_libraries(libopencc marisa)", "", {plain = true})
+        local file = io.open("src/CMakeLists.txt", "a")
+        if file then
+            file:write([[
+                if (USE_SYSTEM_MARISA)
+                    include(FindPkgConfig)
+                    pkg_search_module(marisa REQUIRED IMPORTED_TARGET marisa)
+                    target_link_libraries(libopencc PUBLIC PkgConfig::marisa)
+                endif()
+                if (USE_SYSTEM_RAPIDJSON)
+                    find_package(RapidJSON CONFIG REQUIRED)
+                    target_link_libraries(libopencc PUBLIC rapidjson)
+                endif()
+                if (USE_SYSTEM_TCLAP)
+                    include(FindPkgConfig)
+                    pkg_search_module(tclap REQUIRED IMPORTED_TARGET tclap)
+                    target_link_libraries(libopencc PUBLIC PkgConfig::tclap)
+                endif()
+                if (USE_SYSTEM_DARTS)
+                    include(FindPkgConfig)
+                    pkg_search_module(darts REQUIRED IMPORTED_TARGET darts)
+                    target_link_libraries(libopencc PUBLIC PkgConfig::darts)
+                endif()
+            ]])
+            file:close()
+        end
+
+        local configs = {
+            "-DBUILD_DOCUMENTATION=OFF",
+            "-DENABLE_GTEST=OFF",
+            "-DENABLE_BENCHMARK=OFF",
+            "-DBUILD_PYTHON=OFF",
+            "-DUSE_SYSTEM_DARTS=ON",
+            "-DUSE_SYSTEM_RAPIDJSON=ON",
+            "-DUSE_SYSTEM_TCLAP=ON",
+            "-DUSE_SYSTEM_MARISA=ON",
+        }
+        table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release"))
         table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
+        table.insert(configs, "-DENABLE_DARTS=" .. (package:config("darts") and "ON" or "OFF"))
         import("package.tools.cmake").install(package, configs)
     end)
 
-    on_test("windows", "mingw@windows,msys", "linux", "macosx", "bsd", function (package)
-        assert(package:has_cfuncs("opencc_open", {includes = "opencc/opencc.h"}))
-        assert(package:check_cxxsnippets({test = [[
-            void test() {
-                opencc::Config config;
-            }
-        ]]}, {includes = {"opencc/Config.hpp"}}))
+    on_test(function (package)
+        if not package:is_cross() then
+            os.vrun("opencc_dict --version")
+        end
+        if package:is_library() then
+            assert(package:has_cfuncs("opencc_open", {includes = "opencc/opencc.h"}))
+            assert(package:check_cxxsnippets({test = [[
+                void test() {
+                    opencc::Config config;
+                }
+            ]]}, {includes = {"opencc/Config.hpp"}}))
+        end
     end)