git: 2769cf2656ae - main - x11-toolkits/imgui: New port: Bloat-free Graphical User interface for C++ with minimal dependencies

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Fri, 06 Jan 2023 20:22:53 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=2769cf2656ae925ffc6cbb360d3f70a51ed3e881

commit 2769cf2656ae925ffc6cbb360d3f70a51ed3e881
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2023-01-06 15:31:22 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2023-01-06 20:22:50 +0000

    x11-toolkits/imgui: New port: Bloat-free Graphical User interface for C++ with minimal dependencies
---
 x11-toolkits/Makefile                          |   1 +
 x11-toolkits/imgui/Makefile                    |  70 ++++++++
 x11-toolkits/imgui/distinfo                    |   3 +
 x11-toolkits/imgui/files/CMakeLists.txt        | 232 +++++++++++++++++++++++++
 x11-toolkits/imgui/files/imgui-config.cmake.in |  29 ++++
 x11-toolkits/imgui/pkg-descr                   |  14 ++
 x11-toolkits/imgui/pkg-plist                   |  20 +++
 7 files changed, 369 insertions(+)

diff --git a/x11-toolkits/Makefile b/x11-toolkits/Makefile
index a8d69c865897..bc3f003568ab 100644
--- a/x11-toolkits/Makefile
+++ b/x11-toolkits/Makefile
@@ -49,6 +49,7 @@
     SUBDIR += gtksourceview5
     SUBDIR += gtksourceviewmm3
     SUBDIR += guile-gnome-platform
+    SUBDIR += imgui
     SUBDIR += irrlicht
     SUBDIR += itk
     SUBDIR += iwidgets
diff --git a/x11-toolkits/imgui/Makefile b/x11-toolkits/imgui/Makefile
new file mode 100644
index 000000000000..47fef33f2471
--- /dev/null
+++ b/x11-toolkits/imgui/Makefile
@@ -0,0 +1,70 @@
+PORTNAME=	imgui
+DISTVERSIONPREFIX=	v
+DISTVERSION=	1.89.2
+CATEGORIES=	x11-toolkits
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Bloat-free Graphical User interface for C++ with minimal dependencies
+WWW=		https://github.com/ocornut/imgui
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE.txt
+
+USES=		cmake
+USE_LDCONFIG=	yes
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	ocornut
+
+CMAKE_ON=	BUILD_SHARED_LIBS
+
+OPTIONS_DEFINE=			FREETYPE WCHAR32
+OPTIONS_MULTI=			BACKENDS
+OPTIONS_MULTI_BACKENDS=		ALLEGRO5 GLFW OPENGL2 OPENGL3 SDL2 SDL2_RENDERER VULKAN
+OPTIONS_DEFAULT=		GLFW OPENGL2 OPENGL3
+OPTIONS_SUB=			yes
+
+## general options
+
+FREETYPE_CMAKE_BOOL=		IMGUI_FREETYPE
+FREETYPE_LIB_DEPENDS=		libfreetype.so:print/freetype2
+
+WCHAR32_DESC=			Use wchar32
+WCHAR32_CMAKE_BOOL=		IMGUI_USE_WCHAR32
+
+## backend options
+
+ALLEGRO5_DESC=			Install Allegro5 backend
+ALLEGRO5_CMAKE_BOOL=		IMGUI_BUILD_ALLEGRO5_BINDING
+ALLEGRO5_LIB_DEPENDS=		liballegro.so:devel/allegro5 # even though binary doesn't link to liballegro.so for some reason
+
+GLFW_DESC=			Install GLFW backend
+GLFW_CMAKE_BOOL=		IMGUI_BUILD_GLFW_BINDING
+GLFW_LIB_DEPENDS=		libglfw.so:graphics/glfw
+
+OPENGL2_DESC=			Install OPENGL2 backend
+OPENGL2_USES=			localbase
+OPENGL2_CMAKE_BOOL=		IMGUI_BUILD_OPENGL2_BINDING
+
+OPENGL3_DESC=			Install OPENGL3 backend
+OPENGL3_USES=			localbase
+OPENGL3_CMAKE_BOOL=		IMGUI_BUILD_OPENGL3_BINDING
+
+SDL2_DESC=			Install SDL2 backend
+SDL2_USES=			localbase sdl
+SDL2_USE=			SDL=sdl2
+SDL2_CMAKE_BOOL=		IMGUI_BUILD_SDL2_BINDING
+
+SDL2_RENDERER_DESC=		Install SDL2 renderer backend
+SDL2_RENDERER_USES=		sdl
+SDL2_RENDERER_USE=		SDL=sdl2
+SDL2_RENDERER_CMAKE_BOOL=	IMGUI_BUILD_SDL2_RENDERER_BINDING
+
+VULKAN_DESC=			Install Vulkan renderer backend
+VULKAN_CMAKE_BOOL=		IMGUI_BUILD_VULKAN_BINDING
+VULKAN_LIB_DEPENDS=		libvulkan.so:graphics/vulkan-loader
+
+post-patch:
+	@${CP} ${FILESDIR}/CMakeLists.txt ${FILESDIR}/imgui-config.cmake.in ${WRKSRC}
+
+.include <bsd.port.mk>
diff --git a/x11-toolkits/imgui/distinfo b/x11-toolkits/imgui/distinfo
new file mode 100644
index 000000000000..21be812c6c66
--- /dev/null
+++ b/x11-toolkits/imgui/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1673030195
+SHA256 (ocornut-imgui-v1.89.2_GH0.tar.gz) = e110beffda505e6954feb7b13541d35a7c12a176b9723290c853684713df6a67
+SIZE (ocornut-imgui-v1.89.2_GH0.tar.gz) = 1521797
diff --git a/x11-toolkits/imgui/files/CMakeLists.txt b/x11-toolkits/imgui/files/CMakeLists.txt
new file mode 100644
index 000000000000..7c91260afea6
--- /dev/null
+++ b/x11-toolkits/imgui/files/CMakeLists.txt
@@ -0,0 +1,232 @@
+# from https://raw.githubusercontent.com/microsoft/vcpkg/master/ports/imgui/CMakeLists.txt
+
+cmake_minimum_required(VERSION 3.16)
+project(imgui CXX)
+
+set(CMAKE_DEBUG_POSTFIX d)
+
+if(APPLE)
+    set(CMAKE_CXX_STANDARD 11)
+    enable_language(OBJCXX)
+endif()
+
+add_library(${PROJECT_NAME} "")
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+target_include_directories(
+    ${PROJECT_NAME}
+    PUBLIC
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
+        $<INSTALL_INTERFACE:include>
+)
+
+target_sources(
+    ${PROJECT_NAME}
+    PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui_demo.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui_draw.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui_tables.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui_widgets.cpp
+        ${CMAKE_CURRENT_SOURCE_DIR}/misc/cpp/imgui_stdlib.cpp
+)
+
+target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11)
+
+if(IMGUI_BUILD_ALLEGRO5_BINDING)
+    find_path(ALLEGRO5_INCLUDE_DIRS allegro5/allegro.h)
+    target_include_directories(${PROJECT_NAME} PRIVATE ${ALLEGRO5_INCLUDE_DIRS})
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.cpp)
+endif()
+
+if(IMGUI_BUILD_DX9_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.cpp)
+endif()
+
+if(IMGUI_BUILD_DX10_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.cpp)
+endif()
+
+if(IMGUI_BUILD_DX11_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.cpp)
+endif()
+
+if(IMGUI_BUILD_DX12_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.cpp)
+endif()
+
+if(IMGUI_BUILD_GLFW_BINDING)
+    find_package(glfw3 CONFIG REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC glfw)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.cpp)
+endif()
+
+if(IMGUI_BUILD_GLUT_BINDING)
+    find_package(GLUT REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC GLUT::GLUT)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.cpp)
+endif()
+
+if(IMGUI_BUILD_METAL_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.mm)
+    set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.mm PROPERTIES COMPILE_FLAGS -fobjc-weak)
+endif()
+
+if(IMGUI_BUILD_OPENGL2_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.cpp)
+endif()
+
+if(IMGUI_BUILD_OPENGL3_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp)
+endif()
+
+if(IMGUI_BUILD_OSX_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.mm)
+endif()
+
+if(IMGUI_BUILD_SDL2_BINDING)
+    find_package(SDL2 CONFIG REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl.cpp)
+endif()
+
+if(IMGUI_BUILD_SDL2_RENDERER_BINDING)
+    find_package(SDL2 CONFIG REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC SDL2::SDL2)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer.cpp)
+endif()
+
+if(IMGUI_BUILD_VULKAN_BINDING)
+    find_package(Vulkan REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC Vulkan::Vulkan)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.cpp)
+endif()
+
+if(IMGUI_BUILD_WIN32_BINDING)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.cpp)
+endif()
+
+if(IMGUI_FREETYPE)
+    find_package(freetype CONFIG REQUIRED)
+    target_link_libraries(${PROJECT_NAME} PUBLIC freetype)
+    target_sources(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.cpp)
+    target_compile_definitions(${PROJECT_NAME} PUBLIC IMGUI_ENABLE_FREETYPE)
+endif()
+
+if(IMGUI_USE_WCHAR32)
+    target_compile_definitions(${PROJECT_NAME} PUBLIC IMGUI_USE_WCHAR32)
+endif()
+
+list(REMOVE_DUPLICATES BINDINGS_SOURCES)
+
+install(
+    TARGETS ${PROJECT_NAME}
+    EXPORT ${PROJECT_NAME}_target
+    ARCHIVE DESTINATION lib
+    LIBRARY DESTINATION lib
+    RUNTIME DESTINATION bin
+)
+
+foreach(BINDING_TARGET ${BINDING_TARGETS})
+    install(
+        TARGETS ${BINDING_TARGET}
+        EXPORT ${PROJECT_NAME}_target
+        ARCHIVE DESTINATION lib
+        LIBRARY DESTINATION lib
+        RUNTIME DESTINATION bin
+    )
+endforeach()
+
+if(NOT IMGUI_SKIP_HEADERS)
+    install(FILES
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/imconfig.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/imgui_internal.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/imstb_textedit.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/imstb_rectpack.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/imstb_truetype.h
+        ${CMAKE_CURRENT_SOURCE_DIR}/misc/cpp/imgui_stdlib.h
+        DESTINATION include
+    )
+
+    if(IMGUI_BUILD_ALLEGRO5_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_allegro5.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_DX9_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx9.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_DX10_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx10.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_DX11_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx11.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_DX12_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_dx12.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_GLFW_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glfw.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_GLUT_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_glut.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_METAL_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_metal.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_OPENGL2_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl2.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_OPENGL3_BINDING)
+        install(
+            FILES
+                ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3.h
+                ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_opengl3_loader.h
+            DESTINATION
+                include
+        )
+    endif()
+
+    if(IMGUI_BUILD_OSX_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_osx.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_SDL2_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdl.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_SDL2_RENDERER_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_sdlrenderer.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_VULKAN_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_vulkan.h DESTINATION include)
+    endif()
+
+    if(IMGUI_BUILD_WIN32_BINDING)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/backends/imgui_impl_win32.h DESTINATION include)
+    endif()
+
+    if(IMGUI_FREETYPE)
+        install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/misc/freetype/imgui_freetype.h DESTINATION include)
+    endif()
+endif()
+
+include(CMakePackageConfigHelpers)
+configure_package_config_file(imgui-config.cmake.in imgui-config.cmake INSTALL_DESTINATION share/imgui)
+
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/imgui-config.cmake DESTINATION share/imgui)
+
+install(
+    EXPORT ${PROJECT_NAME}_target
+    NAMESPACE ${PROJECT_NAME}::
+    FILE ${PROJECT_NAME}-targets.cmake
+    DESTINATION share/${PROJECT_NAME}
+)
diff --git a/x11-toolkits/imgui/files/imgui-config.cmake.in b/x11-toolkits/imgui/files/imgui-config.cmake.in
new file mode 100644
index 000000000000..6d9933db7287
--- /dev/null
+++ b/x11-toolkits/imgui/files/imgui-config.cmake.in
@@ -0,0 +1,29 @@
+# from https://raw.githubusercontent.com/microsoft/vcpkg/master/ports/imgui/imgui-config.cmake.in
+
+cmake_policy(SET CMP0012 NEW)
+
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+if (@IMGUI_BUILD_GLFW_BINDING@)
+    find_dependency(glfw3 CONFIG)
+endif()
+
+if (@IMGUI_BUILD_GLUT_BINDING@)
+    find_dependency(GLUT)
+endif()
+
+if (@IMGUI_BUILD_SDL2_BINDING@ OR @IMGUI_BUILD_SDL2_RENDERER_BINDING@)
+    find_dependency(SDL2 CONFIG)
+endif()
+
+if (@IMGUI_BUILD_VULKAN_BINDING@)
+    find_dependency(Vulkan)
+endif()
+
+if (@IMGUI_FREETYPE@)
+    find_dependency(freetype CONFIG)
+endif()
+
+include("${CMAKE_CURRENT_LIST_DIR}/imgui-targets.cmake")
diff --git a/x11-toolkits/imgui/pkg-descr b/x11-toolkits/imgui/pkg-descr
new file mode 100644
index 000000000000..14bdea6f9bea
--- /dev/null
+++ b/x11-toolkits/imgui/pkg-descr
@@ -0,0 +1,14 @@
+Dear ImGui is a bloat-free graphical user interface library for C++. It outputs
+optimized vertex buffers that you can render anytime in your 3D-pipeline-enabled
+application. It is fast, portable, renderer agnostic, and self-contained
+(no external dependencies).
+
+Dear ImGui is designed to enable fast iterations and to empower programmers to
+create content creation tools and visualization / debug tools (as opposed to UI
+for the average end-user). It favors simplicity and productivity toward this
+goal and lacks certain features commonly found in more high-level libraries.
+
+Dear ImGui is particularly suited to integration in game engines (for tooling),
+real-time 3D applications, fullscreen applications, embedded applications, or
+any applications on console platforms where operating system features are
+non-standard.
diff --git a/x11-toolkits/imgui/pkg-plist b/x11-toolkits/imgui/pkg-plist
new file mode 100644
index 000000000000..7b37d848bf7b
--- /dev/null
+++ b/x11-toolkits/imgui/pkg-plist
@@ -0,0 +1,20 @@
+include/imconfig.h
+include/imgui.h
+%%FREETYPE%%include/imgui_freetype.h
+%%ALLEGRO5%%include/imgui_impl_allegro5.h
+%%GLFW%%include/imgui_impl_glfw.h
+%%OPENGL2%%include/imgui_impl_opengl2.h
+%%OPENGL3%%include/imgui_impl_opengl3.h
+%%OPENGL3%%include/imgui_impl_opengl3_loader.h
+%%SDL2%%include/imgui_impl_sdl.h
+%%SDL2_RENDERER%%include/imgui_impl_sdlrenderer.h
+%%VULKAN%%include/imgui_impl_vulkan.h
+include/imgui_internal.h
+include/imgui_stdlib.h
+include/imstb_rectpack.h
+include/imstb_textedit.h
+include/imstb_truetype.h
+lib/libimgui.so
+%%DATADIR%%/imgui-config.cmake
+%%DATADIR%%/imgui-targets-%%CMAKE_BUILD_TYPE%%.cmake
+%%DATADIR%%/imgui-targets.cmake