File CMakeLists.txt of Package failed_maim
cmake_minimum_required(VERSION 3.5)
project(maim VERSION 5.8.0 LANGUAGES CXX)
# Require a modern C++ standard so system headers (icu, string_view, etc.)
# that expect C++14/C++17 compile correctly.
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Use pkg-config when available for X11 / Xrender and fall back to Find modules.
include(FindPkgConfig)
# Try to acquire X11/Xrender via pkg-config (preferred)
pkg_check_modules(PKG_X11 QUIET x11)
pkg_check_modules(PKG_XRENDER QUIET xrender)
# Find PNG and JPEG with CMake modules
find_package(PNG REQUIRED)
find_package(JPEG REQUIRED)
find_package(Threads REQUIRED)
# Collect sources
file(GLOB_RECURSE MAIM_SOURCES
"${CMAKE_SOURCE_DIR}/src/*.cpp"
"${CMAKE_SOURCE_DIR}/src/*.c"
"${CMAKE_SOURCE_DIR}/src/*.cc"
)
if (MAIM_SOURCES STREQUAL "")
message(FATAL_ERROR "No source files found in src/ - cannot build maim.")
endif()
add_executable(maim ${MAIM_SOURCES})
# Include directories: prefer pkg-config variables if present
if (PKG_X11_FOUND)
foreach(dir ${PKG_X11_INCLUDE_DIRS})
target_include_directories(maim PRIVATE ${dir})
endforeach()
foreach(lib ${PKG_X11_LIBRARY_DIRS})
link_directories(${lib})
endforeach()
endif()
if (PKG_XRENDER_FOUND)
foreach(dir ${PKG_XRENDER_INCLUDE_DIRS})
target_include_directories(maim PRIVATE ${dir})
endforeach()
foreach(lib ${PKG_XRENDER_LIBRARY_DIRS})
link_directories(${lib})
endforeach()
endif()
# Add PNG/JPEG include dirs if provided by their find modules
if (PNG_FOUND)
target_include_directories(maim PRIVATE ${PNG_INCLUDE_DIRS})
endif()
if (JPEG_FOUND)
target_include_directories(maim PRIVATE ${JPEG_INCLUDE_DIRS})
endif()
# Link libraries: prefer pkg-config libs, fall back to standard variables
set(MAIM_LIBS "")
if (PKG_X11_FOUND)
list(APPEND MAIM_LIBS ${PKG_X11_LIBRARIES})
endif()
if (PKG_XRENDER_FOUND)
list(APPEND MAIM_LIBS ${PKG_XRENDER_LIBRARIES})
endif()
if (PNG_LIBRARY)
list(APPEND MAIM_LIBS ${PNG_LIBRARY})
elseif (PNG_LIBRARIES)
list(APPEND MAIM_LIBS ${PNG_LIBRARIES})
endif()
if (JPEG_LIBRARY)
list(APPEND MAIM_LIBS ${JPEG_LIBRARY})
elseif (JPEG_LIBRARIES)
list(APPEND MAIM_LIBS ${JPEG_LIBRARIES})
endif()
# Common system libs typically used by maim
find_library(LIBX11 NAMES X11)
find_library(LIBXRENDER NAMES Xrender)
find_library(LIBXEXT NAMES Xext)
if (LIBX11)
list(APPEND MAIM_LIBS ${LIBX11})
endif()
if (LIBXRENDER)
list(APPEND MAIM_LIBS ${LIBXRENDER})
endif()
if (LIBXEXT)
list(APPEND MAIM_LIBS ${LIBXEXT})
endif()
# Threads
list(APPEND MAIM_LIBS Threads::Threads)
target_link_libraries(maim PRIVATE ${MAIM_LIBS})
# Ensure verbose output when building via make
set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
set(CMAKE_VERBOSE_MAKEFILE ON)