The old workflow grepped CMakeLists.txt for the first "VERSION X.Y" match, which was cmake_minimum_required's own version rather than the project's, mangling it to 3.27.0.0 on the first real bump. PLUGIN_VERSION in .env is now the single source of truth for both CMakeLists.txt and flake.nix, and the workflow's bump/commit steps only ever touch that one file. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
70 lines
2.3 KiB
CMake
70 lines
2.3 KiB
CMake
cmake_minimum_required(VERSION 3.27)
|
|
|
|
# PLUGIN_VERSION lives in .env (single source of truth - also read by
|
|
# flake.nix) so .gitea/workflows/version-bump.yml only ever has to touch one
|
|
# file, rather than a "VERSION X.Y" grep/sed that can't tell this project's
|
|
# own version apart from cmake_minimum_required's version above.
|
|
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/.env" HYPR_CHROME_ENV_LINES)
|
|
foreach(HYPR_CHROME_ENV_LINE IN LISTS HYPR_CHROME_ENV_LINES)
|
|
if(HYPR_CHROME_ENV_LINE MATCHES "^PLUGIN_VERSION=(.*)$")
|
|
set(HYPR_CHROME_PLUGIN_VERSION "${CMAKE_MATCH_1}")
|
|
endif()
|
|
endforeach()
|
|
|
|
project(hypr-chrome
|
|
DESCRIPTION "Draws a chamfered HUD-style border frame with a title bar around each window."
|
|
VERSION ${HYPR_CHROME_PLUGIN_VERSION}
|
|
)
|
|
|
|
# Match the Makefile's prior default (CXXFLAGS ?= -O2) so a bare `cmake -B
|
|
# build` still produces an optimized build; pass -DCMAKE_BUILD_TYPE=Debug to
|
|
# override.
|
|
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 23)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
# Lets clangd discover build/compile_commands.json automatically (it checks
|
|
# common build-dir names on its own) - no hand-rolled compile_flags.txt
|
|
# needed.
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(deps REQUIRED IMPORTED_TARGET
|
|
hyprland
|
|
libdrm
|
|
libinput
|
|
libudev
|
|
pixman-1
|
|
wayland-server
|
|
xkbcommon
|
|
)
|
|
|
|
add_library(hypr-chrome SHARED
|
|
src/Main.cpp
|
|
src/ChromeDecoration.cpp
|
|
src/ChromePassElement.cpp
|
|
)
|
|
|
|
target_link_libraries(hypr-chrome PRIVATE rt PkgConfig::deps)
|
|
|
|
set_target_properties(hypr-chrome PROPERTIES
|
|
PREFIX ""
|
|
POSITION_INDEPENDENT_CODE ON
|
|
# hyprctl plugin load/buildAndLoad.sh both expect the built .so at the
|
|
# repo root, not buried in the build tree.
|
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
)
|
|
|
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
# GCC emits STB_GNU_UNIQUE bindings for vague-linkage symbols (header
|
|
# inline/static globals) by default; those break repeated dlopen/dlclose
|
|
# of the same symbol names, which is exactly what reloading this plugin
|
|
# does. Clang doesn't emit them and doesn't support this flag.
|
|
target_compile_options(hypr-chrome PRIVATE --no-gnu-unique)
|
|
endif()
|
|
|
|
install(TARGETS hypr-chrome)
|