浏览代码

Auto-update scnlib to 2.0.3 (#4146)

* Update scnlib to 2.0.3

* improve deps

* fix link order

* limit plat

---------

Co-authored-by: star9029 <[email protected]>
ruki 1 年之前
父节点
当前提交
311675e760
共有 1 个文件被更改,包括 84 次插入20 次删除
  1. 84 20
      packages/s/scnlib/xmake.lua

+ 84 - 20
packages/s/scnlib/xmake.lua

@@ -1,46 +1,110 @@
 package("scnlib")
-
     set_homepage("https://scnlib.readthedocs.io/")
     set_description("scnlib is a modern C++ library for replacing scanf and std::istream")
+    set_license("Apache-2.0")
+
+    add_urls("https://github.com/eliaskosunen/scnlib/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/eliaskosunen/scnlib.git")
+
+    add_versions("v2.0.3", "507ed0e988f1d9460a9c921fc21f5a5244185a4015942f235522fbe5c21e6a51")
+    add_versions("v2.0.2", "a485076b8710576cf05fbc086d39499d16804575c0660b0dfaeeaf7823660a17")
+    add_versions("v1.1.2", "5ed3ec742302c7304bf188bde9c4012a65dc8124ff4e1a69b598480d664250e6")
+    add_versions("v0.4", "f23e66b00c9d38671b39b83c082a5b2db1cf05b3e3eff7b4a769487d9ed9d366")
 
-    set_urls("https://github.com/eliaskosunen/scnlib/archive/refs/tags/v$(version).zip")
-    add_versions("2.0.2", "b9d691f218ca17c6f3457ecd795b62820815c021b0d607fba12d55dbb7aa2197")
-    add_versions("1.1.2", "72bf304662b03e00de5b438b9d4697a081e786d589e067817c356174fb2cb06c")
-    add_versions("0.4", "49a84f1439e52666532fbd5da3fa1d652622fc7ac376070e330e15c528d38190")
+    add_configs("header_only", {description = "Use header only version. (deprecated after v2.0.0)", default = false, type = "boolean"})
+    add_configs("exceptions", {description = "Enable exception handling", default = true, type = "boolean"})
+    add_configs("rtti", {description = "Enable rtti", default = true, type = "boolean"})
+    add_configs("regex", {description = "Regex backend to use", type = "string", values = {"std", "boost", "re2"}})
 
-    add_configs("header_only", {description = "Use header only version.", default = false, type = "boolean"})
+    add_deps("fast_float")
+
+    on_check("windows", function (package)
+        import("core.tool.toolchain")
+        import("core.base.semver")
+
+        if package:version():ge("2.0.3") and package:is_arch("arm.*") then
+            local msvc = toolchain.load("msvc", {plat = package:plat(), arch = package:arch()})
+            if msvc then
+                local vs_sdkver = msvc:config("vs_sdkver")
+                assert(vs_sdkver and semver.match(vs_sdkver):gt("10.0.19041"), "package(scnlib): need vs_sdkver > 10.0.19041.0")
+            end
+        end
+    end)
 
     on_load(function (package)
-        if package:config("header_only") then
+        if package:config("header_only") and package:version():lt("2.0.0") then
+            package:set("kind", "library", {headeronly = true})
             package:add("defines", "SCN_HEADER_ONLY=1")
         else
             package:add("deps", "cmake")
         end
+
+        if package:version():ge("2.0.3") then
+            package:add("links", "scn", "simdutf")
+        else
+            package:add("deps", "simdutf")
+        end
+
+        local regex = package:config("regex")
+        if regex and regex ~= "std" then
+            package:add("deps", regex)
+        end
     end)
 
-    on_install("windows", "linux", "macosx", function (package)
-        if package:config("header_only") then
+    on_install("!android and !iphoneos and !wasm", function (package)
+        if package:config("header_only") and package:version():lt("2.0.0") then
             os.cp("include/scn", package:installdir("include"))
             return
         end
-        local configs = {"-DSCN_TESTS=OFF", "-DSCN_DOCS=OFF", "-DSCN_EXAMPLES=OFF", "-DSCN_BENCHMARKS=OFF", "-DSCN_PENDANTIC=OFF", "-DSCN_BUILD_FUZZING=OFF"}
+
+        local configs = {
+            "-DSCN_DISABLE_TOP_PROJECT=ON",
+            "-DSCN_INSTALL=ON",
+            "-DSCN_TESTS=OFF",
+            "-DSCN_DOCS=OFF",
+            "-DSCN_EXAMPLES=OFF",
+            "-DSCN_BENCHMARKS=OFF",
+            "-DSCN_PENDANTIC=OFF",
+            "-DSCN_BUILD_FUZZING=OFF",
+
+            "-DSCN_USE_EXTERNAL_FAST_FLOAT=ON"
+        }
+
+        if package:version():le("2.0.2") then
+            io.replace("cmake/dependencies.cmake", "simdutf 4.0.0", "simdutf", {plain = true})
+            table.insert(configs, "-DSCN_USE_EXTERNAL_SIMDUTF=ON")
+        end
+
+        local regex = package:config("regex")
+        if regex then
+            table.insert(configs, "-DSCN_DISABLE_REGEX=OFF")
+            if regex == "boost" then
+                regex = "Boost"
+            end
+            table.insert(configs, "-DSCN_REGEX_BACKEND=" .. regex)
+        else
+            table.insert(configs, "-DSCN_DISABLE_REGEX=ON")
+        end
+
+        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, "-DSCN_USE_EXCEPTIONS=" .. (package:config("exceptions") and "ON" or "OFF"))
+        table.insert(configs, "-DSCN_USE_RTTI=" .. (package:config("rtti") and "ON" or "OFF"))
+        if package:is_plat("windows") then
+            table.insert(configs, "-DCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY=''")
+            if package:config("shared") then
+                table.insert(configs, "-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON")
+            end
+        end
         import("package.tools.cmake").install(package, configs)
     end)
 
     on_test(function (package)
         assert(package:check_cxxsnippets({test = [[
-            #include <scn/scan.h>
-            #include <cstdio>
-
-            void test()
-            {
-                if (const auto result =
-                        scn::prompt<int>("What's your favorite number? ", "{}")) {
+            void test() {
+                if (const auto result = scn::prompt<int>("What's your favorite number? ", "{}")) {
                     std::printf("%d, interesting\n", result->value());
                 }
-                else {
-                    std::puts("Well, never mind then.");
-                }
             }
         ]]}, {configs = {languages = "c++17"}, includes = "scn/scan.h"}))
     end)