From 2283700a99781e32874f940b1b8276d6b6dd4009 Mon Sep 17 00:00:00 2001 From: Linus Dierheimer Date: Mon, 5 Sep 2022 19:56:00 +0200 Subject: [PATCH] Refactor CMakeLists.txt --- CMakeLists.txt | 311 +++++++++---------------------------------------- 1 file changed, 58 insertions(+), 253 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b495153c2..c9b4c1b6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,30 +21,32 @@ endif() # Configure options # ##################### -OPTION(ENABLE_LIBPCI "Enable libpci" ${LINUX}) -OPTION(ENABLE_VULKAN "Enable vulkan" ${LINUX}) -OPTION(ENABLE_WAYLAND "Enable wayland-client" ${LINUX}) -OPTION(ENABLE_XCB_RANDR "Enable xcb-randr" ${LINUX}) -OPTION(ENABLE_XCB "Enable xcb" ${LINUX}) -OPTION(ENABLE_XRANDR "Enable xrandr" ${LINUX}) -OPTION(ENABLE_X11 "Enable x11" ${LINUX}) -OPTION(ENABLE_GIO "Enable gio-2.0" ${LINUX}) -OPTION(ENABLE_DCONF "Enable dconf" ${LINUX}) -OPTION(ENABLE_DBUS "Enable dbus-1" ${LINUX}) -OPTION(ENABLE_XFCONF "Enable libxfconf-0" ${LINUX}) -OPTION(ENABLE_SQLITE3 "Enable sqlite3" ${LINUX}) -OPTION(ENABLE_RPM "Enable rpm" ${LINUX}) -OPTION(ENABLE_IMAGEMAGICK7 "Enable imagemagick 7" ${LINUX}) -OPTION(ENABLE_IMAGEMAGICK6 "Enable imagemagick 6" ${LINUX}) -OPTION(ENABLE_ZLIB "Enable zlib" ${LINUX}) -OPTION(ENABLE_CHAFA "Enable chafa" ${LINUX}) -OPTION(ENABLE_EGL "Enable egl" ${LINUX}) -OPTION(ENABLE_GLX "Enable glx" ${LINUX}) -OPTION(ENABLE_OSMESA "Enable osmesa" ${LINUX}) -OPTION(ENABLE_OPENCL "Enable opencl" ${LINUX}) +include(CMakeDependentOption) -OPTION(BUILD_TESTS "Build tests" OFF) # Also create test executables -OPTION(SET_TWEAK "Add tweak to project version" ON) # This is set to off by github actions for release builds +cmake_dependent_option(ENABLE_LIBPCI "Enable libpci" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_VULKAN "Enable vulkan" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_WAYLAND "Enable wayland-client" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_XCB_RANDR "Enable xcb-randr" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_XCB "Enable xcb" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_XRANDR "Enable xrandr" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_X11 "Enable x11" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_GIO "Enable gio-2.0" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_DCONF "Enable dconf" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_DBUS "Enable dbus-1" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_XFCONF "Enable libxfconf-0" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_SQLITE3 "Enable sqlite3" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_RPM "Enable rpm" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_IMAGEMAGICK7 "Enable imagemagick 7" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_IMAGEMAGICK6 "Enable imagemagick 6" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_CHAFA "Enable chafa" ON "ENABLE_IMAGEMAGICK6 OR ENABLE_IMAGEMAGICK7" OFF) +cmake_dependent_option(ENABLE_ZLIB "Enable zlib" ON "ENABLE_CHAFA" OFF) +cmake_dependent_option(ENABLE_EGL "Enable egl" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_GLX "Enable glx" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_OSMESA "Enable osmesa" ON "LINUX" OFF) +cmake_dependent_option(ENABLE_OPENCL "Enable opencl" ON "LINUX" OFF) + +option(BUILD_TESTS "Build tests" OFF) # Also create test executables +option(SET_TWEAK "Add tweak to project version" ON) # This is set to off by github actions for release builds ############################# # Compile time dependencies # @@ -263,245 +265,48 @@ if(HAVE_SYSINFO_H) target_compile_definitions(libfastfetch PUBLIC FF_HAVE_SYSINFO_H) endif() -if(ENABLE_LIBPCI) - pkg_check_modules(LIBPCI libpci) - if(LIBPCI_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_LIBPCI=1) - else() - message(WARNING "Package libpci not found. Building without support.") - endif() -endif() - -if(ENABLE_VULKAN) - pkg_check_modules(VULKAN vulkan) - if(VULKAN_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_VULKAN=1) - else() - message(WARNING "Package vulkan not found. Building without support.") - endif() -endif() - -if(ENABLE_WAYLAND) - pkg_check_modules (WAYLAND wayland-client) - if(WAYLAND_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_WAYLAND=1) - else() - message(WARNING "Package wayland-client not found. Building without support.") - endif() -endif() - -if(ENABLE_XCB_RANDR) - pkg_check_modules(XCB_RANDR xcb-randr) - if(XCB_RANDR_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_XCB_RANDR=1) - else() - message(WARNING "Package xcb-randr not found. Building without support.") - endif() -endif() - -if(ENABLE_XCB) - pkg_check_modules (XCB xcb) - if(XCB_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_XCB=1) - else() - message(WARNING "Package xcb not found. Building without support.") - endif() -endif() - -if(ENABLE_XRANDR) - pkg_check_modules(XRANDR xrandr) - if(XRANDR_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_XRANDR=1) - else() - message(WARNING "Package xrandr not found. Building without support.") - endif() -endif() - -if(ENABLE_X11) - pkg_check_modules(X11 x11) - if(X11_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_X11=1) - else() - message(WARNING "Package x11 not found. Building without support.") - endif() -endif() - -if(ENABLE_GIO) - pkg_check_modules(GIO gio-2.0) - if(GIO_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_GIO=1) - else() - message(WARNING "Package gio-2.0 not found. Building without support.") - endif() -endif() - -if(ENABLE_DCONF) - pkg_check_modules(DCONF dconf) - if(DCONF_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_DCONF=1) - else() - message(WARNING "Package dconf not found. Building without support.") - endif() -endif() - -if(ENABLE_DBUS) - pkg_check_modules(DBUS dbus-1) - if(DBUS_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_DBUS=1) - else() - message(WARNING "Package dbus-1 not found. Building without support.") - endif() -endif() - -if(ENABLE_XFCONF) - pkg_check_modules(XFCONF libxfconf-0) - if(XFCONF_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_XFCONF=1) - else() - message(WARNING "Package libxfconf-0 not found. Building without support.") - endif() -endif() - -if(ENABLE_SQLITE3) - pkg_check_modules(SQLITE3 sqlite3) - if(SQLITE3_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_SQLITE3=1) - else() - message(WARNING "Package sqlite3 not found. Building without support.") - endif() -endif() - -if(ENABLE_RPM) - pkg_check_modules(RPM rpm) - if(RPM_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_RPM=1) - else() - message(WARNING "Package rpm not found. Building without support.") - endif() -endif() - -if(ENABLE_IMAGEMAGICK7) - pkg_check_modules(IMAGEMAGICK7 MagickCore-7.Q16HDRI) - if(NOT IMAGEMAGICK7_FOUND) - pkg_check_modules(IMAGEMAGICK7 /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16HDRI.pc) - endif() - if(NOT IMAGEMAGICK7_FOUND) - pkg_check_modules(IMAGEMAGICK7 MagickCore-7.Q16) - endif() - if(NOT IMAGEMAGICK7_FOUND) - pkg_check_modules(IMAGEMAGICK7 /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16.pc) +function(ff_check_lib VARNAME) + if(NOT ENABLE_${VARNAME}) + return() endif() - if(IMAGEMAGICK7_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_IMAGEMAGICK7=1) - else() - message(WARNING "Package MagickCore-7.Q16HDRI or MagickCore-7.Q16 not found. Building without support.") - endif() -endif() - -if(ENABLE_IMAGEMAGICK6) - pkg_check_modules(IMAGEMAGICK6 MagickCore-6.Q16HDRI) - if(NOT IMAGEMAGICK6_FOUND) - pkg_check_modules(IMAGEMAGICK6 /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16HDRI.pc) - endif() - if(NOT IMAGEMAGICK6_FOUND) - pkg_check_modules(IMAGEMAGICK6 MagickCore-6.Q16) - endif() - if(NOT IMAGEMAGICK6_FOUND) - pkg_check_modules(IMAGEMAGICK6 /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16.pc) - endif() - - if(IMAGEMAGICK6_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_IMAGEMAGICK6=1) - else() - message(WARNING "Package MagickCore-6.Q16HDRI or MagickCore-6.Q16 not found. Building without support.") - endif() -endif() - -if(ENABLE_ZLIB) - pkg_check_modules(ZLIB zlib) - if(ZLIB_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_ZLIB=1) - else() - message(WARNING "Package zlib not found. Building without support") - endif() -endif() - -if(ENABLE_CHAFA) - if(IMAGEMAGICK6_FOUND OR IMAGEMAGICK7_FOUND) - pkg_check_modules(CHAFA chafa>=1.10) - if(CHAFA_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_CHAFA=1) - else() - message(WARNING "Package chafa>=1.10 not found. Building without support.") + foreach(LIBNAME ${ARGN}) + pkg_check_modules(${VARNAME} ${LIBNAME}) + if(${VARNAME}_FOUND) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_${VARNAME}=1) + target_include_directories(libfastfetch PRIVATE ${${VARNAME}_INCLUDE_DIRS}) + return() endif() - else() - message(WARNING "Chafa not enabled, because neither ImageMagick6 nor ImageMagick7 were found. Building without support.") - endif() -endif() + endforeach() -if(ENABLE_EGL) - pkg_check_modules(EGL egl) - if(EGL_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_EGL=1) - else() - message(WARNING "Package egl not found. Building without support.") - endif() -endif() + message(WARNING "Package ${ARGV1} not found, building without support.") +endfunction() -if(ENABLE_GLX) - pkg_check_modules(GLX glx) - if(GLX_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_GLX=1) - else() - message(WARNING "Package glx not found. Building without support.") - endif() -endif() - -if(ENABLE_OSMESA) - pkg_check_modules(OSMESA osmesa) - if(OSMESA_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_OSMESA=1) - else() - message(WARNING "Package osmesa not found. Building without support.") - endif() -endif() - -if(ENABLE_OPENCL) - pkg_check_modules(OPENCL OpenCL) - if(OPENCL_FOUND) - target_compile_definitions(libfastfetch PRIVATE FF_HAVE_OPENCL=1) - else() - message(WARNING "Package opencl not found. Building without support.") - endif() -endif() +ff_check_lib(LIBPCI libpci) +ff_check_lib(VULKAN vulkan) +ff_check_lib(WAYLAND wayland-client) +ff_check_lib(XCB_RANDR xcb-randr) +ff_check_lib(XCB xcb) +ff_check_lib(XRAND xrandr) +ff_check_lib(X11 x11) +ff_check_lib(GIO gio-2.0) +ff_check_lib(DCONF dconf) +ff_check_lib(DBUS dbus-1) +ff_check_lib(XFCONF libxfconf-0) +ff_check_lib(SQLITE3 sqlite3) +ff_check_lib(RPM rpm) +ff_check_lib(IMAGEMAGICK7 MagickCore-7.Q16HDRI MagickCore-7.Q16 /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16HDRI.pc /usr/lib/imagemagick7/pkgconfig/MagickCore-7.Q16.pc) +ff_check_lib(IMAGEMAGICK6 MagickCore-6.Q16HDRI MagickCore-6.Q16 /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16HDRI.pc /usr/lib/imagemagick6/pkgconfig/MagickCore-6.Q16.pc) +ff_check_lib(ZLIB zlib) +ff_check_lib(CHAFA chafa>=1.10) +ff_check_lib(EGL egl) +ff_check_lib(GLX glx) +ff_check_lib(OSMESA osmesa) +ff_check_lib(OPENCL OpenCL) target_include_directories(libfastfetch PUBLIC ${PROJECT_BINARY_DIR} PUBLIC ${PROJECT_SOURCE_DIR}/src - - PRIVATE ${LIBPCI_INCLUDE_DIRS} - PRIVATE ${VULKAN_INCLUDE_DIRS} - PRIVATE ${WAYLAND_INCLUDE_DIRS} - PRIVATE ${XCB_RANDR_INCLUDE_DIRS} - PRIVATE ${XCB_INCLUDE_DIRS} - PRIVATE ${XRANDR_INCLUDE_DIRS} - PRIVATE ${X11_INCLUDE_DIRS} - PRIVATE ${GIO_INCLUDE_DIRS} - PRIVATE ${DCONF_INCLUDE_DIRS} - PRIVATE ${DBUS_INCLUDE_DIRS} - PRIVATE ${XFCONF_INCLUDE_DIRS} - PRIVATE ${SQLITE3_INCLUDE_DIRS} - PRIVATE ${RPM_INCLUDE_DIRS} - PRIVATE ${IMAGEMAGICK7_INCLUDE_DIRS} - PRIVATE ${IMAGEMAGICK6_INCLUDE_DIRS} - PRIVATE ${ZLIB_INCLUDE_DIRS} - PRIVATE ${CHAFA_INCLUDE_DIRS} - PRIVATE ${VULKAN_INCLUDE_DIRS} - PRIVATE ${EGL_INCLUDE_DIRS} - PRIVATE ${GLX_INCLUDE_DIRS} - PRIVATE ${OSMESA_INCLUDE_DIRS} - PRIVATE ${OPENCL_INCLUDE_DIRS} ) target_link_libraries(libfastfetch