Files
nixpkgs/pkgs/by-name/im/imgui/package.nix
Dark Steveneq 646b892680
Some checks failed
Periodic Merges (6h) / master → staging-nixos (push) Failing after 12m50s
Periodic Merges (6h) / master → staging-next (push) Failing after 12m54s
Periodic Merges (24h) / merge-base(master,staging) → haskell-updates (push) Failing after 11m54s
Periodic Merges (6h) / staging-next → staging (push) Failing after 12m13s
Periodic Merges (24h) / staging-next-25.05 → staging-25.05 (push) Failing after 13m24s
Periodic Merges (24h) / release-25.05 → staging-next-25.05 (push) Failing after 14m28s
push sheeet
2025-10-09 14:15:47 +02:00

162 lines
6.0 KiB
Nix

{
stdenv,
lib,
applyPatches,
callPackage,
cmake,
fetchFromGitHub,
fetchpatch,
glfw,
libGL,
SDL2,
sdl3,
vcpkg,
vulkan-headers,
vulkan-loader,
imgui,
# NOTE: Not coming from vcpkg
IMGUI_LINK_GLVND ?
!stdenv.hostPlatform.isWindows && (IMGUI_BUILD_OPENGL2_BINDING || IMGUI_BUILD_OPENGL3_BINDING),
# The intent is to mirror vcpkg's flags[^1],
# but we only actually support Linux and glfw3 until someone contributes the rest
# [^1]: https://github.com/microsoft/vcpkg/blob/095ee06e7f60dceef7d713e3f8b1c2eb10d650d7/ports/imgui/CMakeLists.txt#L33-L108
IMGUI_BUILD_ALLEGRO5_BINDING ? false,
IMGUI_BUILD_ANDROID_BINDING ? stdenv.hostPlatform.isAndroid,
IMGUI_BUILD_DX9_BINDING ? false,
IMGUI_BUILD_DX10_BINDING ? false,
IMGUI_BUILD_DX11_BINDING ? false,
IMGUI_BUILD_DX12_BINDING ? false,
IMGUI_BUILD_GLFW_BINDING ? !stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_GLUT_BINDING ? false,
IMGUI_BUILD_METAL_BINDING ? stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_OPENGL2_BINDING ? false,
IMGUI_BUILD_OPENGL3_BINDING ?
IMGUI_BUILD_SDL3_BINDING || IMGUI_BUILD_GLFW_BINDING || IMGUI_BUILD_GLUT_BINDING,
IMGUI_BUILD_OSX_BINDING ? stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_SDL3_BINDING ? !IMGUI_BUILD_GLFW_BINDING && !stdenv.hostPlatform.isDarwin,
IMGUI_BUILD_SDL3_RENDERER_BINDING ? IMGUI_BUILD_SDL3_BINDING,
IMGUI_BUILD_SDL2_BINDING ? false,
IMGUI_BUILD_SDL2_RENDERER_BINDING ? false,
IMGUI_BUILD_SDLGPU3_BINDING ? IMGUI_BUILD_SDL3_BINDING && lib.versionAtLeast imgui.version "1.91.8",
IMGUI_BUILD_VULKAN_BINDING ? false,
IMGUI_BUILD_WIN32_BINDING ? false,
IMGUI_FREETYPE ? false,
IMGUI_FREETYPE_LUNASVG ? false,
IMGUI_USE_WCHAR32 ? false,
}:
let
vcpkgRevs.postSdl3 = lib.versionAtLeast vcpkg.version "2025.03.19";
vcpkgRevs.others = !vcpkgRevs.postSdl3;
vcpkgSource = applyPatches {
inherit (vcpkg) src;
patches =
lib.optionals vcpkgRevs.postSdl3 [
# This patch was not accepted mainstream, as out-of-scope
# and also to not encourage dependencies between Nixpkgs and Vcpkg.
# Currently @SomeoneSerge is responsible for rebasing it when necessary.
# Consider vendoring instead?
./0001-imgui-allow-installing-into-split-outputs.patch
]
++ lib.optionals vcpkgRevs.others [
# Original version of the split-outputs patch
fetchpatch
{
url = "https://github.com/microsoft/vcpkg/commit/4108dd75ce9731a4fdcf50fd05034405156eaddf.patch";
hash = "sha256-jXbR0NfyuO8EESmva5A+H3WmBfCG83OiA8ZCcWsRhQA=";
}
];
};
in
stdenv.mkDerivation rec {
pname = "imgui";
version = "1.91.4";
outputs = [
# Note: no "dev" because vcpkg installs include/ and imgui-config.cmake
# into different prefixes but expects the merged layout at import time
"out"
"lib"
];
src = fetchFromGitHub {
owner = "ocornut";
repo = "imgui";
tag = "v${version}";
hash = "sha256-6j4keBOAzbBDsV0+R4zTNlsltxz2dJDGI43UIrHXDNM=";
};
cmakeRules = "${vcpkgSource}/ports/imgui";
postPatch = ''
cp "$cmakeRules"/{CMakeLists.txt,*.cmake.in} ./
'';
nativeBuildInputs = [ cmake ];
propagatedBuildInputs =
lib.optionals IMGUI_LINK_GLVND [ libGL ]
++ lib.optionals IMGUI_BUILD_GLFW_BINDING [ glfw ]
++ lib.optionals IMGUI_BUILD_SDL3_BINDING [ sdl3 ]
++ lib.optionals IMGUI_BUILD_SDL2_BINDING [ SDL2 ]
++ lib.optionals IMGUI_BUILD_VULKAN_BINDING [
vulkan-headers
vulkan-loader
];
cmakeFlags = [
(lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING)
(lib.cmakeBool "IMGUI_BUILD_ALLEGRO5_BINDING" IMGUI_BUILD_ALLEGRO5_BINDING)
(lib.cmakeBool "IMGUI_BUILD_ANDROID_BINDING" IMGUI_BUILD_ANDROID_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX9_BINDING" IMGUI_BUILD_DX9_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX10_BINDING" IMGUI_BUILD_DX10_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX11_BINDING" IMGUI_BUILD_DX11_BINDING)
(lib.cmakeBool "IMGUI_BUILD_DX12_BINDING" IMGUI_BUILD_DX12_BINDING)
(lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING)
(lib.cmakeBool "IMGUI_BUILD_GLUT_BINDING" IMGUI_BUILD_GLUT_BINDING)
(lib.cmakeBool "IMGUI_BUILD_METAL_BINDING" IMGUI_BUILD_METAL_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OPENGL2_BINDING" IMGUI_BUILD_OPENGL2_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OPENGL3_BINDING" IMGUI_BUILD_OPENGL3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_OSX_BINDING" IMGUI_BUILD_OSX_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL2_BINDING" IMGUI_BUILD_SDL2_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL3_BINDING" IMGUI_BUILD_SDL3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL2_RENDERER_BINDING" IMGUI_BUILD_SDL2_RENDERER_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDL3_RENDERER_BINDING" IMGUI_BUILD_SDL3_RENDERER_BINDING)
(lib.cmakeBool "IMGUI_BUILD_SDLGPU3_BINDING" IMGUI_BUILD_SDLGPU3_BINDING)
(lib.cmakeBool "IMGUI_BUILD_VULKAN_BINDING" IMGUI_BUILD_VULKAN_BINDING)
(lib.cmakeBool "IMGUI_BUILD_WIN32_BINDING" IMGUI_BUILD_WIN32_BINDING)
(lib.cmakeBool "IMGUI_FREETYPE" IMGUI_FREETYPE)
(lib.cmakeBool "IMGUI_FREETYPE_LUNASVG" IMGUI_FREETYPE_LUNASVG)
(lib.cmakeBool "IMGUI_USE_WCHAR32" IMGUI_USE_WCHAR32)
];
passthru = {
tests = {
demo = callPackage ./demo { };
};
};
meta = {
# These flags haven't been tested:
broken =
IMGUI_BUILD_SDL2_BINDING # Option removed from Vcpkg' CMakeLists
|| IMGUI_BUILD_SDL2_RENDERER_BINDING
|| IMGUI_FREETYPE
|| IMGUI_FREETYPE_LUNASVG
|| IMGUI_BUILD_DX9_BINDING
|| IMGUI_BUILD_DX10_BINDING
|| IMGUI_BUILD_DX11_BINDING
|| IMGUI_BUILD_DX12_BINDING
|| IMGUI_BUILD_WIN32_BINDING
|| IMGUI_BUILD_ALLEGRO5_BINDING
|| IMGUI_BUILD_ANDROID_BINDING;
description = "Bloat-free Graphical User interface for C++ with minimal dependencies";
homepage = "https://github.com/ocornut/imgui";
license = lib.licenses.mit; # vcpkg licensed as MIT too
maintainers = with lib.maintainers; [
SomeoneSerge
];
platforms = lib.platforms.all;
};
}