Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 161 lines 6.1 kB view raw
1{ 2 stdenv, 3 lib, 4 applyPatches, 5 callPackage, 6 cmake, 7 fetchFromGitHub, 8 fetchpatch, 9 glfw, 10 libGL, 11 SDL2, 12 sdl3, 13 vcpkg, 14 vulkan-headers, 15 vulkan-loader, 16 imgui, 17 18 # NOTE: Not coming from vcpkg 19 IMGUI_LINK_GLVND ? 20 !stdenv.hostPlatform.isWindows && (IMGUI_BUILD_OPENGL2_BINDING || IMGUI_BUILD_OPENGL3_BINDING), 21 22 # The intent is to mirror vcpkg's flags[^1], 23 # but we only actually support Linux and glfw3 until someone contributes the rest 24 # [^1]: https://github.com/microsoft/vcpkg/blob/095ee06e7f60dceef7d713e3f8b1c2eb10d650d7/ports/imgui/CMakeLists.txt#L33-L108 25 IMGUI_BUILD_ALLEGRO5_BINDING ? false, 26 IMGUI_BUILD_ANDROID_BINDING ? stdenv.hostPlatform.isAndroid, 27 IMGUI_BUILD_DX9_BINDING ? false, 28 IMGUI_BUILD_DX10_BINDING ? false, 29 IMGUI_BUILD_DX11_BINDING ? false, 30 IMGUI_BUILD_DX12_BINDING ? false, 31 IMGUI_BUILD_GLFW_BINDING ? !stdenv.hostPlatform.isDarwin, 32 IMGUI_BUILD_GLUT_BINDING ? false, 33 IMGUI_BUILD_METAL_BINDING ? stdenv.hostPlatform.isDarwin, 34 IMGUI_BUILD_OPENGL2_BINDING ? false, 35 IMGUI_BUILD_OPENGL3_BINDING ? 36 IMGUI_BUILD_SDL3_BINDING || IMGUI_BUILD_GLFW_BINDING || IMGUI_BUILD_GLUT_BINDING, 37 IMGUI_BUILD_OSX_BINDING ? stdenv.hostPlatform.isDarwin, 38 IMGUI_BUILD_SDL3_BINDING ? !IMGUI_BUILD_GLFW_BINDING && !stdenv.hostPlatform.isDarwin, 39 IMGUI_BUILD_SDL3_RENDERER_BINDING ? IMGUI_BUILD_SDL3_BINDING, 40 IMGUI_BUILD_SDL2_BINDING ? false, 41 IMGUI_BUILD_SDL2_RENDERER_BINDING ? false, 42 IMGUI_BUILD_SDLGPU3_BINDING ? IMGUI_BUILD_SDL3_BINDING && lib.versionAtLeast imgui.version "1.91.8", 43 IMGUI_BUILD_VULKAN_BINDING ? false, 44 IMGUI_BUILD_WIN32_BINDING ? false, 45 IMGUI_FREETYPE ? false, 46 IMGUI_FREETYPE_LUNASVG ? false, 47 IMGUI_USE_WCHAR32 ? false, 48}: 49let 50 vcpkgRevs.postSdl3 = lib.versionAtLeast vcpkg.version "2025.03.19"; 51 vcpkgRevs.others = !vcpkgRevs.postSdl3; 52 vcpkgSource = applyPatches { 53 inherit (vcpkg) src; 54 patches = 55 lib.optionals vcpkgRevs.postSdl3 [ 56 # This patch was not accepted mainstream, as out-of-scope 57 # and also to not encourage dependencies between Nixpkgs and Vcpkg. 58 # Currently @SomeoneSerge is responsible for rebasing it when necessary. 59 # Consider vendoring instead? 60 ./0001-imgui-allow-installing-into-split-outputs.patch 61 ] 62 ++ lib.optionals vcpkgRevs.others [ 63 # Original version of the split-outputs patch 64 fetchpatch 65 { 66 url = "https://github.com/microsoft/vcpkg/commit/4108dd75ce9731a4fdcf50fd05034405156eaddf.patch"; 67 hash = "sha256-jXbR0NfyuO8EESmva5A+H3WmBfCG83OiA8ZCcWsRhQA="; 68 } 69 ]; 70 }; 71in 72 73stdenv.mkDerivation rec { 74 pname = "imgui"; 75 version = "1.91.4"; 76 outputs = [ 77 # Note: no "dev" because vcpkg installs include/ and imgui-config.cmake 78 # into different prefixes but expects the merged layout at import time 79 "out" 80 "lib" 81 ]; 82 83 src = fetchFromGitHub { 84 owner = "ocornut"; 85 repo = "imgui"; 86 tag = "v${version}"; 87 hash = "sha256-6j4keBOAzbBDsV0+R4zTNlsltxz2dJDGI43UIrHXDNM="; 88 }; 89 90 cmakeRules = "${vcpkgSource}/ports/imgui"; 91 postPatch = '' 92 cp "$cmakeRules"/{CMakeLists.txt,*.cmake.in} ./ 93 ''; 94 95 nativeBuildInputs = [ cmake ]; 96 97 propagatedBuildInputs = 98 lib.optionals IMGUI_LINK_GLVND [ libGL ] 99 ++ lib.optionals IMGUI_BUILD_GLFW_BINDING [ glfw ] 100 ++ lib.optionals IMGUI_BUILD_SDL3_BINDING [ sdl3 ] 101 ++ lib.optionals IMGUI_BUILD_SDL2_BINDING [ SDL2 ] 102 ++ lib.optionals IMGUI_BUILD_VULKAN_BINDING [ 103 vulkan-headers 104 vulkan-loader 105 ]; 106 107 cmakeFlags = [ 108 (lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING) 109 (lib.cmakeBool "IMGUI_BUILD_ALLEGRO5_BINDING" IMGUI_BUILD_ALLEGRO5_BINDING) 110 (lib.cmakeBool "IMGUI_BUILD_ANDROID_BINDING" IMGUI_BUILD_ANDROID_BINDING) 111 (lib.cmakeBool "IMGUI_BUILD_DX9_BINDING" IMGUI_BUILD_DX9_BINDING) 112 (lib.cmakeBool "IMGUI_BUILD_DX10_BINDING" IMGUI_BUILD_DX10_BINDING) 113 (lib.cmakeBool "IMGUI_BUILD_DX11_BINDING" IMGUI_BUILD_DX11_BINDING) 114 (lib.cmakeBool "IMGUI_BUILD_DX12_BINDING" IMGUI_BUILD_DX12_BINDING) 115 (lib.cmakeBool "IMGUI_BUILD_GLFW_BINDING" IMGUI_BUILD_GLFW_BINDING) 116 (lib.cmakeBool "IMGUI_BUILD_GLUT_BINDING" IMGUI_BUILD_GLUT_BINDING) 117 (lib.cmakeBool "IMGUI_BUILD_METAL_BINDING" IMGUI_BUILD_METAL_BINDING) 118 (lib.cmakeBool "IMGUI_BUILD_OPENGL2_BINDING" IMGUI_BUILD_OPENGL2_BINDING) 119 (lib.cmakeBool "IMGUI_BUILD_OPENGL3_BINDING" IMGUI_BUILD_OPENGL3_BINDING) 120 (lib.cmakeBool "IMGUI_BUILD_OSX_BINDING" IMGUI_BUILD_OSX_BINDING) 121 (lib.cmakeBool "IMGUI_BUILD_SDL2_BINDING" IMGUI_BUILD_SDL2_BINDING) 122 (lib.cmakeBool "IMGUI_BUILD_SDL3_BINDING" IMGUI_BUILD_SDL3_BINDING) 123 (lib.cmakeBool "IMGUI_BUILD_SDL2_RENDERER_BINDING" IMGUI_BUILD_SDL2_RENDERER_BINDING) 124 (lib.cmakeBool "IMGUI_BUILD_SDL3_RENDERER_BINDING" IMGUI_BUILD_SDL3_RENDERER_BINDING) 125 (lib.cmakeBool "IMGUI_BUILD_SDLGPU3_BINDING" IMGUI_BUILD_SDLGPU3_BINDING) 126 (lib.cmakeBool "IMGUI_BUILD_VULKAN_BINDING" IMGUI_BUILD_VULKAN_BINDING) 127 (lib.cmakeBool "IMGUI_BUILD_WIN32_BINDING" IMGUI_BUILD_WIN32_BINDING) 128 (lib.cmakeBool "IMGUI_FREETYPE" IMGUI_FREETYPE) 129 (lib.cmakeBool "IMGUI_FREETYPE_LUNASVG" IMGUI_FREETYPE_LUNASVG) 130 (lib.cmakeBool "IMGUI_USE_WCHAR32" IMGUI_USE_WCHAR32) 131 ]; 132 133 passthru = { 134 tests = { 135 demo = callPackage ./demo { }; 136 }; 137 }; 138 139 meta = { 140 # These flags haven't been tested: 141 broken = 142 IMGUI_BUILD_SDL2_BINDING # Option removed from Vcpkg' CMakeLists 143 || IMGUI_BUILD_SDL2_RENDERER_BINDING 144 || IMGUI_FREETYPE 145 || IMGUI_FREETYPE_LUNASVG 146 || IMGUI_BUILD_DX9_BINDING 147 || IMGUI_BUILD_DX10_BINDING 148 || IMGUI_BUILD_DX11_BINDING 149 || IMGUI_BUILD_DX12_BINDING 150 || IMGUI_BUILD_WIN32_BINDING 151 || IMGUI_BUILD_ALLEGRO5_BINDING 152 || IMGUI_BUILD_ANDROID_BINDING; 153 description = "Bloat-free Graphical User interface for C++ with minimal dependencies"; 154 homepage = "https://github.com/ocornut/imgui"; 155 license = lib.licenses.mit; # vcpkg licensed as MIT too 156 maintainers = with lib.maintainers; [ 157 SomeoneSerge 158 ]; 159 platforms = lib.platforms.all; 160 }; 161}