From cd8ca35246f8e7956d6830aea3453473987e3e66 Mon Sep 17 00:00:00 2001 From: star9029 Date: Tue, 28 Oct 2025 11:52:41 +0800 Subject: [PATCH 1/7] pangolin: add package --- packages/p/pangolin/xmake.lua | 71 +++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 packages/p/pangolin/xmake.lua diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua new file mode 100644 index 00000000000..72e5514d3eb --- /dev/null +++ b/packages/p/pangolin/xmake.lua @@ -0,0 +1,71 @@ +package("pangolin") + set_homepage("https://github.com/stevenlovegrove/Pangolin") + set_description("Pangolin is a lightweight portable rapid development library for managing OpenGL display / interaction and abstracting video input.") + set_license("MIT") + + add_urls("https://github.com/stevenlovegrove/Pangolin/archive/refs/tags/$(version).tar.gz", + "https://github.com/stevenlovegrove/Pangolin.git", {submodules = false}) + + add_versions("v0.9.4", "fb95a354dc64bb151881192703db461a59089f7bcdb2c2c9185cfb5393586d97") + + add_configs("tools", {description = "Build tools", default = false, type = "boolean"}) + + if is_plat("linux", "bsd") then + add_syslinks("pthread", "rt") + elseif is_plat("windows", "mingw") then + add_syslinks("shlwapi", "gdi32", "user32", "shell32") + elseif is_plat("macosx") then + add_frameworks("Cocoa") + end + + add_deps("cmake") + add_deps("eigen") + if not is_plat("wasm", "linux") then + add_deps("glew") + elseif is_plat("linux") then + add_deps("libepoxy") + end + -- TODO: unbundle sigslot tinyobjloader + + on_load(function (package) + if package:is_plat("windows") then + package:add("defines", "_WIN_") + elseif package:is_plat("linux") then + package:add("defines", "_LINUX_") + elseif package:is_plat("macosx") then + package:add("defines", "_OSX_") + elseif package:is_plat("wasm") then + package:add("defines", "_EMSCRIPTEN_") + end + + if package:is_plat("wasm") then + package:add("defines", "HAVE_GLES", "HAVE_GLES_2", "HAVE_GLEW") + elseif package:is_plat("linux") then + package:add("defines", "HAVE_EPOXY") + else + package:add("defines", "HAVE_GLEW") + end + end) + + on_install("windows", "linux", "macosx", "mingw", "msys", "wasm", function (package) + local configs = {"-DBUILD_EXAMPLES=OFF"} + 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, "-DBUILD_TOOLS=" .. (package:config("tools") and "ON" or "OFF")) + + local opt = {} + local glew = package:dep("glew") + if glew and not glew:config("shared") then + opt.cxflags = "-DGLEW_STATIC" + end + import("package.tools.cmake").install(package, configs, opt) + end) + + on_test(function (package) + assert(package:check_cxxsnippets({test = [[ + #include + void test() { + pangolin::CreateWindowAndBind("Classic GL Triangle", 500, 500); + } + ]]}, {configs = {languages = "c++17"}})) + end) From b1b8b1d9ea97b9f3406f9596f7bc20cf2062de5e Mon Sep 17 00:00:00 2001 From: star9029 Date: Tue, 28 Oct 2025 17:34:52 +0800 Subject: [PATCH 2/7] Update xmake.lua --- packages/p/pangolin/xmake.lua | 74 ++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 72e5514d3eb..31632d23dfd 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -8,6 +8,27 @@ package("pangolin") add_versions("v0.9.4", "fb95a354dc64bb151881192703db461a59089f7bcdb2c2c9185cfb5393586d97") + add_configs("libpng", { description = "Build support for libpng image input", default = false, type = "boolean"}) + add_configs("libjpeg", { description = "Build support for libjpeg image input", default = false, type = "boolean"}) + add_configs("libtiff", { description = "Build support for libtiff image input", default = false, type = "boolean"}) + add_configs("openexr", { description = "Build support for OpenEXR image input", default = false, type = "boolean"}) + add_configs("lz4", { description = "Build support for lz4 compression", default = false, type = "boolean"}) + add_configs("zstd", { description = "Build support for zstd compression", default = false, type = "boolean"}) + add_configs("libraw", { description = "Build support for libraw (raw images)", default = false, type = "boolean"}) + + add_configs("libdc1394", { description = "Build support for libdc1394 video input", default = false, type = "boolean"}) + add_configs("v4l", { description = "Build support for V4L video input (Linux only)", default = false, type = "boolean"}) + add_configs("ffmpeg", { description = "Build support for ffmpeg video input", default = false, type = "boolean"}) + add_configs("realsense", { description = "Build support for RealSense video input", default = false, type = "boolean"}) + add_configs("realsense2", { description = "Build support for RealSense2 video input", default = false, type = "boolean"}) + add_configs("openni", { description = "Build support for OpenNI video input", default = false, type = "boolean"}) + add_configs("openni2", { description = "Build support for OpenNI2 video input", default = false, type = "boolean"}) + add_configs("libuvc", { description = "Build support for libuvc video input", default = false, type = "boolean"}) + add_configs("uvc_mediafoundation", { description = "Build support for MediaFoundation UVC input (Windows)", default = false, type = "boolean"}) + add_configs("depthsense", { description = "Build support for DepthSense video input", default = false, type = "boolean"}) + add_configs("telicam", { description = "Build support for TeliCam video input", default = false, type = "boolean"}) + add_configs("pleora", { description = "Build support for Pleora video input", default = false, type = "boolean"}) + add_configs("tools", {description = "Build tools", default = false, type = "boolean"}) if is_plat("linux", "bsd") then @@ -15,19 +36,48 @@ package("pangolin") elseif is_plat("windows", "mingw") then add_syslinks("shlwapi", "gdi32", "user32", "shell32") elseif is_plat("macosx") then - add_frameworks("Cocoa") + add_frameworks("Cocoa", "OpenGL") end add_deps("cmake") add_deps("eigen") - if not is_plat("wasm", "linux") then - add_deps("glew") - elseif is_plat("linux") then + if is_plat("linux") then add_deps("libepoxy") + elseif not is_plat("wasm") then + add_deps("glew") end -- TODO: unbundle sigslot tinyobjloader + local deps = { + "libpng", + "libjpeg", + "libtiff", + "openexr", + "lz4", + "zstd", + "libraw", + + "libdc1394", + "v4l", + "ffmpeg", + "realsense", + "realsense2", + "openni", + "openni2", + "libuvc", + "uvc_mediafoundation", + "depthsense", + "telicam", + "pleora", + } on_load(function (package) + for _, dep in ipairs(deps) do + if package:config(dep) then + package:add("deps", dep) + end + end + + package:add("defines", "HAVE_EIGEN") if package:is_plat("windows") then package:add("defines", "_WIN_") elseif package:is_plat("linux") then @@ -48,14 +98,26 @@ package("pangolin") end) on_install("windows", "linux", "macosx", "mingw", "msys", "wasm", function (package) - local configs = {"-DBUILD_EXAMPLES=OFF"} + io.replace("CMakeLists.txt", "-Werror=vla", "", {plain = true}) + io.replace("CMakeLists.txt", "-Werror", "", {plain = true}) + + local configs = {"-DBUILD_EXAMPLES=OFF", "-DBUILD_PANGOLIN_PYTHON=OFF"} 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")) + if package:is_plat("windows") and package:is_debug() and package:config("shared") then + table.insert(configs, "-DCMAKE_COMPILE_PDB_OUTPUT_DIRECTORY=") + end + + for _, dep in ipairs(deps) do + if package:config(dep) then + table.insert(configs, format("-DBUILD_PANGOLIN_%s=%s", dep:upper(), (package:config(dep) and "ON" or "OFF"))) + end + end table.insert(configs, "-DBUILD_TOOLS=" .. (package:config("tools") and "ON" or "OFF")) local opt = {} local glew = package:dep("glew") - if glew and not glew:config("shared") then + if glew and not glew:config("shared") and package:is_plat("windows", "mingw") then opt.cxflags = "-DGLEW_STATIC" end import("package.tools.cmake").install(package, configs, opt) From dc76c11af9e853adae027642076d100212a7a72b Mon Sep 17 00:00:00 2001 From: star9029 Date: Tue, 28 Oct 2025 17:55:39 +0800 Subject: [PATCH 3/7] remove cxflags --- packages/p/pangolin/xmake.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 31632d23dfd..5f1341d7998 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -98,6 +98,7 @@ package("pangolin") end) on_install("windows", "linux", "macosx", "mingw", "msys", "wasm", function (package) + io.replace("CMakeLists.txt", "-Werror=maybe-uninitialized", "", {plain = true}) io.replace("CMakeLists.txt", "-Werror=vla", "", {plain = true}) io.replace("CMakeLists.txt", "-Werror", "", {plain = true}) From c74cd6b3ae083e2a7499e22d757d3e2ae82d70b2 Mon Sep 17 00:00:00 2001 From: star9029 Date: Tue, 28 Oct 2025 18:04:41 +0800 Subject: [PATCH 4/7] Update xmake.lua --- packages/p/pangolin/xmake.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 5f1341d7998..9d3a38032b3 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -110,9 +110,11 @@ package("pangolin") end for _, dep in ipairs(deps) do - if package:config(dep) then - table.insert(configs, format("-DBUILD_PANGOLIN_%s=%s", dep:upper(), (package:config(dep) and "ON" or "OFF"))) + local name = dep + if dep == "openexr" then + name = "libopenexr" end + table.insert(configs, format("-DBUILD_PANGOLIN_%s=%s", name:upper(), (package:config(dep) and "ON" or "OFF"))) end table.insert(configs, "-DBUILD_TOOLS=" .. (package:config("tools") and "ON" or "OFF")) From 1dbffc4116ed4cd02dada33fe85f69c95f52535f Mon Sep 17 00:00:00 2001 From: star9029 Date: Tue, 28 Oct 2025 18:30:34 +0800 Subject: [PATCH 5/7] Update xmake.lua --- packages/p/pangolin/xmake.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 9d3a38032b3..09d8e8c5379 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -101,6 +101,15 @@ package("pangolin") io.replace("CMakeLists.txt", "-Werror=maybe-uninitialized", "", {plain = true}) io.replace("CMakeLists.txt", "-Werror=vla", "", {plain = true}) io.replace("CMakeLists.txt", "-Werror", "", {plain = true}) + if package:config("libraw") then + io.replace("cmake/FindLibraw.cmake", "NAMES raw_r", "NAMES raw", {plain = true}) + io.replace("components/pango_image/CMakeLists.txt", "libraw_INCLUDE_DIR", "libraw_INCLUDE_DIRS", {plain = true}) + if not package:dep("libraw"):config("shared") then + io.replace("components/pango_image/CMakeLists.txt", "HAVE_LIBRAW", "HAVE_LIBRAW LIBRAW_NODLL", {plain = true}) + end + end + -- fix gcc15 + io.replace("components/pango_core/include/pangolin/factory/factory.h", "#include ", "#include \n#include ", {plain = true}) local configs = {"-DBUILD_EXAMPLES=OFF", "-DBUILD_PANGOLIN_PYTHON=OFF"} table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:is_debug() and "Debug" or "Release")) From 0917e7e9dd633d3ada4729c918facd0a618b6194 Mon Sep 17 00:00:00 2001 From: star9029 Date: Wed, 29 Oct 2025 11:22:17 +0800 Subject: [PATCH 6/7] fix link order --- packages/p/pangolin/xmake.lua | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 09d8e8c5379..0db22fe706b 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -31,8 +31,14 @@ package("pangolin") add_configs("tools", {description = "Build tools", default = false, type = "boolean"}) + add_links( + "pango_plot", "pango_tools", "pango_display", "pango_scene", "pango_geometry", "pango_glgeometry", + "pango_windowing", "pango_vars", "pango_opengl", "pango_image", "pango_video", "pango_packetstream", "pango_core", + "tinyobj" + ) + if is_plat("linux", "bsd") then - add_syslinks("pthread", "rt") + add_syslinks("EGL", "pthread", "rt") elseif is_plat("windows", "mingw") then add_syslinks("shlwapi", "gdi32", "user32", "shell32") elseif is_plat("macosx") then @@ -111,6 +117,14 @@ package("pangolin") -- fix gcc15 io.replace("components/pango_core/include/pangolin/factory/factory.h", "#include ", "#include \n#include ", {plain = true}) + local glew = package:dep("glew") + if glew and not glew:config("shared") then + -- Only failed on mingw + io.replace("components/pango_opengl/CMakeLists.txt", + "target_link_libraries(${COMPONENT} PUBLIC ${GLEW_LIBRARY})", + "target_link_libraries(${COMPONENT} PRIVATE ${GLEW_LIBRARY})", {plain = true}) + end + local configs = {"-DBUILD_EXAMPLES=OFF", "-DBUILD_PANGOLIN_PYTHON=OFF"} 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")) @@ -128,7 +142,6 @@ package("pangolin") table.insert(configs, "-DBUILD_TOOLS=" .. (package:config("tools") and "ON" or "OFF")) local opt = {} - local glew = package:dep("glew") if glew and not glew:config("shared") and package:is_plat("windows", "mingw") then opt.cxflags = "-DGLEW_STATIC" end From cf7ca2d66d11634f941d9bd773db677ed7a5b99a Mon Sep 17 00:00:00 2001 From: star9029 Date: Wed, 29 Oct 2025 14:33:24 +0800 Subject: [PATCH 7/7] fix mingw --- packages/p/pangolin/xmake.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/p/pangolin/xmake.lua b/packages/p/pangolin/xmake.lua index 0db22fe706b..dbe10a560d2 100644 --- a/packages/p/pangolin/xmake.lua +++ b/packages/p/pangolin/xmake.lua @@ -118,8 +118,7 @@ package("pangolin") io.replace("components/pango_core/include/pangolin/factory/factory.h", "#include ", "#include \n#include ", {plain = true}) local glew = package:dep("glew") - if glew and not glew:config("shared") then - -- Only failed on mingw + if glew and not glew:config("shared") and package:is_plat("mingw") then io.replace("components/pango_opengl/CMakeLists.txt", "target_link_libraries(${COMPONENT} PUBLIC ${GLEW_LIBRARY})", "target_link_libraries(${COMPONENT} PRIVATE ${GLEW_LIBRARY})", {plain = true})