package("cimgui") set_homepage("https://github.com/cimgui/cimgui") set_description("c-api for imgui (https://github.com/ocornut/imgui) Look at: https://github.com/cimgui for other widgets") set_license("MIT") add_urls("https://github.com/cimgui/cimgui.git") add_versions("2023.08.02", "a21e28e74027796d983f8c8d4a639a4e304251f2") add_configs("imgui", {description = "imgui version", default = "v1.89", type = "string"}) add_configs("target", {description = "options as words in one string: internal for imgui_internal generation, freetype for freetype generation, comments for comments generation, nochar to skip char* function version, noimstrv to skip imstrv", default = "internal noimstrv", type = "string"}) add_configs("glfw", {description = "Enable the glfw backend", default = false, type = "boolean"}) add_configs("opengl2", {description = "Enable the opengl2 backend", default = false, type = "boolean"}) add_configs("opengl3", {description = "Enable the opengl3 backend", default = false, type = "boolean"}) add_configs("sdl2", {description = "Enable the sdl2 backend", default = false, type = "boolean"}) add_configs("vulkan", {description = "Enable the vulkan backend", default = false, type = "boolean"}) add_configs("freetype", {description = "Use FreeType to build and rasterize the font atlas", default = false, type = "boolean"}) add_configs("wchar32", {description = "Use 32-bit for ImWchar (default is 16-bit)", default = false, type = "boolean"}) if is_plat("windows") then add_syslinks("imm32") end add_defines("IMGUI_DISABLE_OBSOLETE_FUNCTIONS=1") add_deps("luajit") on_load(function (package) if package:config("sdl2") then package:add("deps", "libsdl") package:add("defines", "CIMGUI_USE_SDL2") end if package:config("opengl2") then package:add("defines", "CIMGUI_USE_OPENGL2") end if package:config("opengl3") then package:add("defines", "CIMGUI_USE_OPENGL3") end if package:config("glfw") then package:add("deps", "glfw") package:add("defines", "CIMGUI_USE_GLFW") end if package:config("vulkan") then package:add("deps", "vulkansdk") end if package:config("freetype") then package:add("deps", "freetype") package:add("defines", "CIMGUI_FREETYPE=1") end end) on_install("windows|x64", "windows|x86", "linux", "macosx", function (package) os.vrun("git -c core.fsmonitor=false submodule foreach --recursive git checkout " .. package:config("imgui")) local envs = {} local args = {"generator.lua"} if package:is_plat("windows") then import("package.tools.msbuild") table.insert(args, "cl") table.join2(envs, msbuild.buildenvs(package)) else if package:has_tool("cc", "gcc", "gxx") then table.insert(args, "gcc") elseif package:has_tool("cc", "clang", "clangxx") then table.insert(args, "clang") else raise("Compiler not found") end end table.insert(args, package:config("target")) table.join2(args, table.wrap(package:config("cflags"))) table.join2(args, table.wrap(package:config("cxflags"))) for _, define in ipairs(table.wrap(package:config("defines"))) do table.insert(args, "-D" .. define) end local configs = { glfw = package:config("glfw"), opengl2 = package:config("opengl2"), opengl3 = package:config("opengl3"), sdl2 = package:config("sdl2"), vulkan = package:config("vulkan"), freetype = package:config("freetype"), wchar32 = package:config("wchar32") } if configs.sdl2 then table.insert(args, "sdl") end if configs.glfw then table.insert(args, "glfw") end if configs.vulkan then table.insert(args, "vulkan") end if configs.opengl2 then table.insert(args, "opengl2") end if configs.opengl3 then table.insert(args, "opengl3") end os.vrunv("luajit", args, {envs = envs, curdir = "generator"}) os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua") import("package.tools.xmake").install(package, configs) end) on_test(function (package) assert(package:check_csnippets({test = [[ #define CIMGUI_DEFINE_ENUMS_AND_STRUCTS #include void test() { igCreateContext(NULL); } ]]}, {configs = {languages = "c99"}})) end)