Преглед изворни кода

libtcod: add package (#7433)

* libtcod: add library

* re

* retry

* try to fix `C1083: Cannot open include file: 'utf8proc.h': No such file or directory`

* get include from pkgconf & get link lib from cmake

* try fixup link_lib utf8proc

* simplify to find_package

* fix ndk

* fix wasm to static only
Saikari пре 1 месец
родитељ
комит
dfdb70a495

+ 62 - 0
packages/l/libtcod/patches/2.1.1/debundle.diff

@@ -0,0 +1,62 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 009d392..9ff5ee4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -18,6 +18,7 @@ project(
+     LANGUAGES C CXX
+ )
+ 
++include(FindPkgConfig)
+ include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake OPTIONAL RESULT_VARIABLE CONAN_FILE)
+ if(CONAN_FILE)
+     conan_basic_setup(TARGETS)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index a3d309e..afd1b41 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -62,8 +62,10 @@ endif()
+ 
+ set_property(CACHE LIBTCOD_LODEPNG PROPERTY STRINGS "vendored" "find_package" "disable")
+ if(LIBTCOD_LODEPNG STREQUAL "find_package")
+-    find_package(lodepng-c CONFIG REQUIRED)
+-    target_link_libraries(${PROJECT_NAME} PRIVATE lodepng-c)
++    pkg_check_modules(lodepng REQUIRED lodepng)
++    target_link_directories(${PROJECT_NAME} PRIVATE ${lodepng_LIBRARY_DIRS})
++    target_link_libraries(${PROJECT_NAME} PRIVATE ${lodepng_LIBRARIES})
++    target_include_directories(${PROJECT_NAME} PRIVATE ${lodepng_INCLUDE_DIRS})
+ elseif(LIBTCOD_LODEPNG STREQUAL "vendored")
+     message("Will be vendored: LodePNG")
+     target_sources(${PROJECT_NAME} PRIVATE "vendor/lodepng.c")
+@@ -81,7 +83,7 @@ if(LIBTCOD_UTF8PROC STREQUAL "vendored")
+     target_sources(${PROJECT_NAME} PRIVATE "vendor/utf8proc/utf8proc.c")
+ elseif (LIBTCOD_UTF8PROC STREQUAL "find_package")
+     find_package(utf8proc REQUIRED)
+-    target_link_libraries(${PROJECT_NAME} PRIVATE utf8proc)
++    target_link_libraries(${PROJECT_NAME} PRIVATE utf8proc::utf8proc)
+ elseif (LIBTCOD_UTF8PROC STREQUAL "vcpkg")
+     find_package(unofficial-utf8proc CONFIG REQUIRED)
+     target_link_libraries(${PROJECT_NAME} PRIVATE utf8proc)
+@@ -96,8 +98,8 @@ if(LIBTCOD_STB STREQUAL "vendored")
+     message("Will be vendored: stb")
+     target_include_directories(${PROJECT_NAME} PRIVATE "vendor/")
+ elseif(LIBTCOD_STB STREQUAL "find_package" OR LIBTCOD_STB STREQUAL "vcpkg")
+-    find_package(Stb REQUIRED)
+-    target_include_directories(${PROJECT_NAME} PRIVATE ${Stb_INCLUDE_DIR})
++    pkg_check_modules(stb REQUIRED stb)
++    target_include_directories(${PROJECT_NAME} PRIVATE ${stb_INCLUDE_DIRS})
+ else()
+     message(FATAL_ERROR "Unknown option for LIBTCOD_STB: '${LIBTCOD_STB}'")
+ endif()
+diff --git a/src/libtcod/sys_sdl_img_png.c b/src/libtcod/sys_sdl_img_png.c
+index a45cc67..a578e07 100644
+--- a/src/libtcod/sys_sdl_img_png.c
++++ b/src/libtcod/sys_sdl_img_png.c
+@@ -32,7 +32,7 @@
+ #include "sys.h"
+ #ifndef NO_SDL
+ #ifndef TCOD_NO_PNG
+-#if !defined(__HAIKU__) && !defined(__ANDROID__)
++#if !defined(__HAIKU__)
+ #include <stdio.h>
+ #include <stdlib.h>
+ #endif

+ 57 - 0
packages/l/libtcod/xmake.lua

@@ -0,0 +1,57 @@
+package("libtcod")
+    set_homepage("https://github.com/libtcod/libtcod")
+    set_description("A collection of tools and algorithms for developing traditional roguelikes.  Such as field-of-view, pathfinding, and a tile-based terminal emulator.")
+    set_license("BSD-3-Clause")
+
+    add_urls("https://github.com/libtcod/libtcod/archive/refs/tags/$(version).tar.gz",
+             "https://github.com/libtcod/libtcod.git", {submodules = false})
+
+    add_versions("2.1.1", "ee9cc60140f480f72cb2321d5aa50beeaa829b0a4a651e8a37e2ba938ea23caa")
+    add_patches("2.1.1", "patches/2.1.1/debundle.diff", "1e0697f13d179164eac0293db4917425b90ddc0f5275388f59f020ebeeb0aed0")
+
+    if is_plat("wasm") then
+        add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
+    end
+
+    add_deps("cmake")
+    if is_subhost("windows") then
+        add_deps("pkgconf")
+    else
+        add_deps("pkg-config")
+    end
+    add_deps("libsdl3", "zlib", "lodepng", "utf8proc", "stb")
+
+    if is_plat("linux", "bsd") then
+        add_syslinks("pthread")
+    end
+
+    on_load(function (package)
+        if not package:config("shared") then
+            package:add("defines", "LIBTCOD_STATIC")
+        end
+    end)
+
+    on_install(function (package)
+        os.rm("src/vendor/**|stb.c")
+        local configs = {
+            "-DCMAKE_TOOLCHAIN_FILE=OFF",
+            "-DLIBTCOD_SDL3=find_package",
+            "-DLIBTCOD_ZLIB=find_package",
+            "-DLIBTCOD_LODEPNG=find_package",
+            "-DLIBTCOD_UTF8PROC=find_package",
+            "-DLIBTCOD_STB=find_package"
+        }
+        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"))
+        import("package.tools.cmake").install(package, configs)
+    end)
+
+    on_test(function (package)
+        assert(package:check_cxxsnippets({test = [[
+            #include <libtcod.hpp>
+            void test() {
+                tcod::Context g_context;
+                auto sdl_window = g_context.get_sdl_window();
+            }
+        ]]}, {configs = {languages = "c++17"}}))
+    end)

+ 2 - 0
packages/u/utf8proc/xmake.lua

@@ -11,6 +11,8 @@ package("utf8proc")
     add_versions("v2.7.0", "4bb121e297293c0fd55f08f83afab6d35d48f0af4ecc07523ad8ec99aa2b12a1")
     add_versions("v2.8.0", "a0a60a79fe6f6d54e7d411facbfcc867a6e198608f2cd992490e46f04b1bcecc")
 
+    add_patches("v2.10.0", "https://github.com/JuliaStrings/utf8proc/commit/24e2a191247290f46701c5cb723a575442356656.diff", "743578657d1ef89231da7f67d7189b31f0f10a0cb779ffeed6c9007a58db90d8")
+
     add_deps("cmake")
     on_load(function (package)
         if not package:config("shared") then