From 923d9ae061b7d461c1caabdcb1347a049d18b86e Mon Sep 17 00:00:00 2001 From: patrick96 Date: Tue, 22 Dec 2020 12:19:46 +0100 Subject: [PATCH] Add cmake files for configuring individual targets This makes the code a bit less messy. We barely need if(BUILD_...) guards inside the cmake files, just the root CMakeLists.txt. --- CMakeLists.txt | 19 +++---- cmake/00-components.cmake | 26 ---------- cmake/01-core.cmake | 102 +++++++++--------------------------- cmake/02-opts.cmake | 65 ----------------------- cmake/03-libs.cmake | 70 ------------------------- cmake/cxx.cmake | 96 ++++++++++++++++++++++++++++++++++ cmake/libpoly.cmake | 106 ++++++++++++++++++++++++++++++++++++++ doc/CMakeLists.txt | 9 ++++ lib/CMakeLists.txt | 4 +- src/CMakeLists.txt | 6 +-- 10 files changed, 249 insertions(+), 254 deletions(-) create mode 100644 cmake/cxx.cmake create mode 100644 cmake/libpoly.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 011264e3..700e361f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,24 +30,25 @@ set(CMAKE_MODULE_PATH include(GNUInstallDirs) include(utils) -include(00-components) +include(01-core) include(02-opts) -if (HAS_CXX_COMPILATION) - include(01-core) -endif() -include(03-libs) include(04-targets) if(BUILD_DOC) add_subdirectory(doc) endif() + add_subdirectory(contrib/bash) add_subdirectory(contrib/zsh) -if (BUILD_LIBPOLY) + +# Setup everything that uses a C++ compile (polybar, polybar-msg, tests) +if(HAS_CXX_COMPILATION) + include(cxx) + if(BUILD_LIBPOLY) + include(libpoly) + add_subdirectory(lib) + endif() add_subdirectory(include) - add_subdirectory(lib) -endif() -if (HAS_CXX_COMPILATION) add_subdirectory(src bin) endif() diff --git a/cmake/00-components.cmake b/cmake/00-components.cmake index 88b38b74..e69de29b 100644 --- a/cmake/00-components.cmake +++ b/cmake/00-components.cmake @@ -1,26 +0,0 @@ -option(DISABLE_ALL "Set this to ON disable all targets. Individual targets can be enabled explicitly." OFF) - -# If all targets are disabled, we set the default value for options that are on -# by default to OFF -if (DISABLE_ALL) - set(DEFAULT_ON OFF) -else() - set(DEFAULT_ON ON) -endif() - -option(BUILD_POLYBAR "Build the main polybar executable" ${DEFAULT_ON}) -option(BUILD_POLYBAR_MSG "Build polybar-msg" ${DEFAULT_ON}) -option(BUILD_TESTS "Build testsuite" OFF) -option(BUILD_DOC "Build documentation" ${DEFAULT_ON}) - -if (BUILD_POLYBAR OR BUILD_TESTS) - set(BUILD_LIBPOLY ON) -else() - set(BUILD_LIBPOLY OFF) -endif() - -if (BUILD_LIBPOLY OR BUILD_POLYBAR_MSG) - set(HAS_CXX_COMPILATION ON) -else() - set(HAS_CXX_COMPILATION OFF) -endif() diff --git a/cmake/01-core.cmake b/cmake/01-core.cmake index 282a5590..27980a1b 100644 --- a/cmake/01-core.cmake +++ b/cmake/01-core.cmake @@ -1,12 +1,32 @@ # # Core setup # +option(DISABLE_ALL "Set this to ON disable all targets. Individual targets can be enabled explicitly." OFF) -set(CMAKE_CXX_STANDARD 14) -set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_EXTENSIONS OFF) +# If all targets are disabled, we set the default value for options that are on +# by default to OFF +if (DISABLE_ALL) + set(DEFAULT_ON OFF) +else() + set(DEFAULT_ON ON) +endif() -set(THREADS_PREFER_PTHREAD_FLAG ON) +option(BUILD_POLYBAR "Build the main polybar executable" ${DEFAULT_ON}) +option(BUILD_POLYBAR_MSG "Build polybar-msg" ${DEFAULT_ON}) +option(BUILD_TESTS "Build testsuite" OFF) +option(BUILD_DOC "Build documentation" ${DEFAULT_ON}) + +if (BUILD_POLYBAR OR BUILD_TESTS) + set(BUILD_LIBPOLY ON) +else() + set(BUILD_LIBPOLY OFF) +endif() + +if (BUILD_LIBPOLY OR BUILD_POLYBAR_MSG) + set(HAS_CXX_COMPILATION ON) +else() + set(HAS_CXX_COMPILATION OFF) +endif() # Export compile commands used for custom targets set(CMAKE_EXPORT_COMPILE_COMMANDS ON) @@ -17,77 +37,3 @@ if(NOT CMAKE_BUILD_TYPE) message_colored(STATUS "No build type specified; using ${CMAKE_BUILD_TYPE}" 33) endif() string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER) - -# Compiler flags -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic") - -if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - # Need dprintf() for FreeBSD 11.1 and older - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WITH_DPRINTF") - # libinotify uses c99 extension, so suppress this error - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c99-extensions") - # Ensures that libraries from dependencies in LOCALBASE are used - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") -endif() - -if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=parentheses-equality") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-zero-length-array") -endif() - -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g2") - -if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -fdata-sections -ffunction-sections") - set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -Wl,--gc-sections,--icf=safe") -endif() - -# Check compiler -if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.4.0") - message_colored(FATAL_ERROR "Compiler not supported (Requires clang-3.4+ or gcc-5.1+)" 31) - else() - message_colored(STATUS "Using supported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}" 32) - endif() -elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) - if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.1.0") - message_colored(FATAL_ERROR "Compiler not supported (Requires clang-3.4+ or gcc-5.1+)" 31) - else() - message_colored(STATUS "Using supported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}" 32) - endif() -else() - message_colored(WARNING "Using unsupported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION} !" 31) -endif() - -# Set compiler and linker flags for preferred C++ library -if(CXXLIB_CLANG) - message_colored(STATUS "Linking against libc++" 32) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lc++ -lc++abi") -elseif(CXXLIB_GCC) - message_colored(STATUS "Linking against libstdc++" 32) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++") -endif() - -# Custom build type ; SANITIZE -SET(CMAKE_CXX_FLAGS_SANITIZE "-O0 -g -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" - CACHE STRING "Flags used by the C++ compiler during sanitize builds." FORCE) -SET(CMAKE_EXE_LINKER_FLAGS_SANITIZE "" - CACHE STRING "Flags used for linking binaries during sanitize builds." FORCE) -SET(CMAKE_SHARED_LINKER_FLAGS_SANITIZE "" - CACHE STRING "Flags used by the shared libraries linker during sanitize builds." FORCE) -MARK_AS_ADVANCED( - CMAKE_CXX_FLAGS_SANITIZE - CMAKE_EXE_LINKER_FLAGS_SANITIZE - CMAKE_SHARED_LINKER_FLAGS_SANITIZE) - -# Custom build type ; Coverage -SET(CMAKE_CXX_FLAGS_COVERAGE - "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_COVERAGE} --coverage") -SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE - "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${CMAKE_EXE_LINKER_FLAGS_COVERAGE}") -SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE - "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${CMAKE_SHARED_LINKER_FLAGS_COVERAGE}") diff --git a/cmake/02-opts.cmake b/cmake/02-opts.cmake index 60326def..5c3ea913 100644 --- a/cmake/02-opts.cmake +++ b/cmake/02-opts.cmake @@ -1,68 +1,3 @@ -set(SPHINX_FLAGS "" CACHE STRING "Flags to pass to sphinx-build") -set(SPHINX_BUILD "sphinx-build" CACHE STRING "Name/Path of the sphinx-build executable to use.") - -if (HAS_CXX_COMPILATION) - option(ENABLE_CCACHE "Enable ccache support" ON) - if(ENABLE_CCACHE) - find_program(BIN_CCACHE ccache) - mark_as_advanced(BIN_CCACHE) - - if(NOT BIN_CCACHE) - message_colored(STATUS "Couldn't locate ccache, disabling ccache..." "33") - else() - # Enable only if the binary is found - message_colored(STATUS "Using compiler cache ${BIN_CCACHE}" "32") - set(CMAKE_CXX_COMPILER_LAUNCHER ${BIN_CCACHE} CACHE STRING "") - endif() - endif() - - option(CXXLIB_CLANG "Link against libc++" OFF) - option(CXXLIB_GCC "Link against stdlibc++" OFF) -endif() - -if (BUILD_LIBPOLY) - checklib(ENABLE_ALSA "pkg-config" alsa) - checklib(ENABLE_CURL "pkg-config" libcurl) - checklib(ENABLE_I3 "binary" i3) - checklib(ENABLE_MPD "pkg-config" libmpdclient) - checklib(WITH_LIBNL "pkg-config" libnl-genl-3.0) - if(WITH_LIBNL) - checklib(ENABLE_NETWORK "pkg-config" libnl-genl-3.0) - set(WIRELESS_LIB "libnl") - else() - checklib(ENABLE_NETWORK "cmake" Libiw) - set(WIRELESS_LIB "wireless-tools") - endif() - checklib(ENABLE_PULSEAUDIO "pkg-config" libpulse) - checklib(WITH_XKB "pkg-config" xcb-xkb) - checklib(WITH_XRM "pkg-config" xcb-xrm) - checklib(WITH_XRANDR_MONITORS "pkg-config" "xcb-randr>=1.12") - checklib(WITH_XCURSOR "pkg-config" "xcb-cursor") - - option(ENABLE_ALSA "Enable alsa support" ON) - option(ENABLE_CURL "Enable curl support" ON) - option(ENABLE_I3 "Enable i3 support" ON) - option(ENABLE_MPD "Enable mpd support" ON) - option(WITH_LIBNL "Use netlink interface for wireless" ON) - option(ENABLE_NETWORK "Enable network support" ON) - option(ENABLE_XKEYBOARD "Enable xkeyboard support" ON) - option(ENABLE_PULSEAUDIO "Enable PulseAudio support" ON) - - option(WITH_XRANDR_MONITORS "xcb-randr monitor support" ON) - option(WITH_XKB "xcb-xkb support" ON) - option(WITH_XRM "xcb-xrm support" ON) - option(WITH_XCURSOR "xcb-cursor support" ON) - - option(DEBUG_LOGGER "Trace logging" ON) - - if(CMAKE_BUILD_TYPE_UPPER MATCHES DEBUG) - option(DEBUG_LOGGER_VERBOSE "Trace logging (verbose)" OFF) - option(DEBUG_HINTS "Debug clickable areas" OFF) - option(DEBUG_WHITESPACE "Debug whitespace" OFF) - option(DEBUG_FONTCONFIG "Debug fontconfig" OFF) - endif() -endif() - set(SETTING_ALSA_SOUNDCARD "default" CACHE STRING "Name of the ALSA soundcard driver") set(SETTING_BSPWM_SOCKET_PATH "/tmp/bspwm_0_0-socket" diff --git a/cmake/03-libs.cmake b/cmake/03-libs.cmake index 9d6e2f96..afd5de97 100644 --- a/cmake/03-libs.cmake +++ b/cmake/03-libs.cmake @@ -1,73 +1,3 @@ # # Check libraries # - -if (BUILD_DOC) - find_program(BIN_SPHINX "${SPHINX_BUILD}") - - if (NOT BIN_SPHINX) - message(FATAL_ERROR "sphinx-build executable '${SPHINX_BUILD}' not found.") - endif() -endif() - -if (BUILD_LIBPOLY) - find_package(Threads REQUIRED) - find_package(CairoFC REQUIRED) - - if (ENABLE_ALSA) - find_package(ALSA REQUIRED) - set(ALSA_VERSION ${ALSA_VERSION_STRING}) - endif() - - if (ENABLE_CURL) - find_package(CURL REQUIRED) - set(CURL_VERSION ${CURL_VERSION_STRING}) - endif() - - if (ENABLE_MPD) - find_package(LibMPDClient REQUIRED) - set(MPD_VERSION ${LibMPDClient_VERSION}) - endif() - - if (ENABLE_NETWORK) - if(WITH_LIBNL) - find_package(LibNlGenl3 REQUIRED) - set(NETWORK_LIBRARY_VERSION ${LibNlGenl3_VERSION}) - else() - find_package(Libiw REQUIRED) - endif() - endif() - - if (ENABLE_PULSEAUDIO) - find_package(LibPulse REQUIRED) - set(PULSEAUDIO_VERSION ${LibPulse_VERSION}) - endif() - - # xcomposite is required - list(APPEND XORG_EXTENSIONS COMPOSITE) - if (WITH_XKB) - list(APPEND XORG_EXTENSIONS XKB) - endif() - if (WITH_XCURSOR) - list(APPEND XORG_EXTENSIONS CURSOR) - endif() - if (WITH_XRM) - list(APPEND XORG_EXTENSIONS XRM) - endif() - - # Set min xrandr version required - if (WITH_XRANDR_MONITORS) - set(XRANDR_VERSION "1.12") - else () - set(XRANDR_VERSION "") - endif() - - # Randr is required - find_package(Xcb ${XRANDR_VERSION} REQUIRED COMPONENTS RANDR) - find_package(Xcb REQUIRED COMPONENTS ${XORG_EXTENSIONS}) - - # FreeBSD Support - if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") - find_package(LibInotify REQUIRED) - endif() -endif() diff --git a/cmake/cxx.cmake b/cmake/cxx.cmake new file mode 100644 index 00000000..751e1a60 --- /dev/null +++ b/cmake/cxx.cmake @@ -0,0 +1,96 @@ +option(ENABLE_CCACHE "Enable ccache support" ON) +if(ENABLE_CCACHE) + find_program(BIN_CCACHE ccache) + mark_as_advanced(BIN_CCACHE) + + if(NOT BIN_CCACHE) + message_colored(STATUS "Couldn't locate ccache, disabling ccache..." "33") + else() + # Enable only if the binary is found + message_colored(STATUS "Using compiler cache ${BIN_CCACHE}" "32") + set(CMAKE_CXX_COMPILER_LAUNCHER ${BIN_CCACHE} CACHE STRING "") + endif() +endif() + +option(CXXLIB_CLANG "Link against libc++" OFF) +option(CXXLIB_GCC "Link against stdlibc++" OFF) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +set(THREADS_PREFER_PTHREAD_FLAG ON) + +# Compiler flags +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wpedantic") + +if (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + # Need dprintf() for FreeBSD 11.1 and older + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D_WITH_DPRINTF") + # libinotify uses c99 extension, so suppress this error + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c99-extensions") + # Ensures that libraries from dependencies in LOCALBASE are used + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib") +endif() + +if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=parentheses-equality") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-zero-length-array") +endif() + +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG") +set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g2") + +if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) + set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} -fdata-sections -ffunction-sections") + set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} -Wl,--gc-sections,--icf=safe") +endif() + +# Check compiler +if(${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "3.4.0") + message_colored(FATAL_ERROR "Compiler not supported (Requires clang-3.4+ or gcc-5.1+)" 31) + else() + message_colored(STATUS "Using supported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}" 32) + endif() +elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) + if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "5.1.0") + message_colored(FATAL_ERROR "Compiler not supported (Requires clang-3.4+ or gcc-5.1+)" 31) + else() + message_colored(STATUS "Using supported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION}" 32) + endif() +else() + message_colored(WARNING "Using unsupported compiler ${CMAKE_CXX_COMPILER_ID}-${CMAKE_CXX_COMPILER_VERSION} !" 31) +endif() + +# Set compiler and linker flags for preferred C++ library +if(CXXLIB_CLANG) + message_colored(STATUS "Linking against libc++" 32) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++") + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lc++ -lc++abi") +elseif(CXXLIB_GCC) + message_colored(STATUS "Linking against libstdc++" 32) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lstdc++") +endif() + +# Custom build type ; SANITIZE +SET(CMAKE_CXX_FLAGS_SANITIZE "-O0 -g -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer -fno-optimize-sibling-calls" + CACHE STRING "Flags used by the C++ compiler during sanitize builds." FORCE) +SET(CMAKE_EXE_LINKER_FLAGS_SANITIZE "" + CACHE STRING "Flags used for linking binaries during sanitize builds." FORCE) +SET(CMAKE_SHARED_LINKER_FLAGS_SANITIZE "" + CACHE STRING "Flags used by the shared libraries linker during sanitize builds." FORCE) +MARK_AS_ADVANCED( + CMAKE_CXX_FLAGS_SANITIZE + CMAKE_EXE_LINKER_FLAGS_SANITIZE + CMAKE_SHARED_LINKER_FLAGS_SANITIZE) + +# Custom build type ; Coverage +SET(CMAKE_CXX_FLAGS_COVERAGE + "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS_COVERAGE} --coverage") +SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE + "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${CMAKE_EXE_LINKER_FLAGS_COVERAGE}") +SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE + "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} ${CMAKE_SHARED_LINKER_FLAGS_COVERAGE}") diff --git a/cmake/libpoly.cmake b/cmake/libpoly.cmake new file mode 100644 index 00000000..83343892 --- /dev/null +++ b/cmake/libpoly.cmake @@ -0,0 +1,106 @@ +# Sets up options and dependencies for libpoly + + +# Automatically enable all optional dependencies that are available on the machine +checklib(ENABLE_ALSA "pkg-config" alsa) +checklib(ENABLE_CURL "pkg-config" libcurl) +checklib(ENABLE_I3 "binary" i3) +checklib(ENABLE_MPD "pkg-config" libmpdclient) +checklib(WITH_LIBNL "pkg-config" libnl-genl-3.0) +if(WITH_LIBNL) + checklib(ENABLE_NETWORK "pkg-config" libnl-genl-3.0) + set(WIRELESS_LIB "libnl") +else() + checklib(ENABLE_NETWORK "cmake" Libiw) + set(WIRELESS_LIB "wireless-tools") +endif() +checklib(ENABLE_PULSEAUDIO "pkg-config" libpulse) +checklib(WITH_XKB "pkg-config" xcb-xkb) +checklib(WITH_XRM "pkg-config" xcb-xrm) +checklib(WITH_XRANDR_MONITORS "pkg-config" "xcb-randr>=1.12") +checklib(WITH_XCURSOR "pkg-config" "xcb-cursor") + +option(ENABLE_ALSA "Enable alsa support" ON) +option(ENABLE_CURL "Enable curl support" ON) +option(ENABLE_I3 "Enable i3 support" ON) +option(ENABLE_MPD "Enable mpd support" ON) +option(WITH_LIBNL "Use netlink interface for wireless" ON) +option(ENABLE_NETWORK "Enable network support" ON) +option(ENABLE_XKEYBOARD "Enable xkeyboard support" ON) +option(ENABLE_PULSEAUDIO "Enable PulseAudio support" ON) + +option(WITH_XRANDR_MONITORS "xcb-randr monitor support" ON) +option(WITH_XKB "xcb-xkb support" ON) +option(WITH_XRM "xcb-xrm support" ON) +option(WITH_XCURSOR "xcb-cursor support" ON) + +option(DEBUG_LOGGER "Trace logging" ON) + +if(CMAKE_BUILD_TYPE_UPPER MATCHES DEBUG) + option(DEBUG_LOGGER_VERBOSE "Trace logging (verbose)" OFF) + option(DEBUG_HINTS "Debug clickable areas" OFF) + option(DEBUG_WHITESPACE "Debug whitespace" OFF) + option(DEBUG_FONTCONFIG "Debug fontconfig" OFF) +endif() + +# Load all packages for enabled components + +find_package(Threads REQUIRED) +find_package(CairoFC REQUIRED) + +if (ENABLE_ALSA) + find_package(ALSA REQUIRED) + set(ALSA_VERSION ${ALSA_VERSION_STRING}) +endif() + +if (ENABLE_CURL) + find_package(CURL REQUIRED) + set(CURL_VERSION ${CURL_VERSION_STRING}) +endif() + +if (ENABLE_MPD) + find_package(LibMPDClient REQUIRED) + set(MPD_VERSION ${LibMPDClient_VERSION}) +endif() + +if (ENABLE_NETWORK) + if(WITH_LIBNL) + find_package(LibNlGenl3 REQUIRED) + set(NETWORK_LIBRARY_VERSION ${LibNlGenl3_VERSION}) + else() + find_package(Libiw REQUIRED) + endif() +endif() + +if (ENABLE_PULSEAUDIO) + find_package(LibPulse REQUIRED) + set(PULSEAUDIO_VERSION ${LibPulse_VERSION}) +endif() + +# xcomposite is required +list(APPEND XORG_EXTENSIONS COMPOSITE) +if (WITH_XKB) + list(APPEND XORG_EXTENSIONS XKB) +endif() +if (WITH_XCURSOR) + list(APPEND XORG_EXTENSIONS CURSOR) +endif() +if (WITH_XRM) + list(APPEND XORG_EXTENSIONS XRM) +endif() + +# Set min xrandr version required +if (WITH_XRANDR_MONITORS) + set(XRANDR_VERSION "1.12") +else () + set(XRANDR_VERSION "") +endif() + +# Randr is required. Searches for randr only because we may do a version check +find_package(Xcb ${XRANDR_VERSION} REQUIRED COMPONENTS RANDR) +find_package(Xcb REQUIRED COMPONENTS ${XORG_EXTENSIONS}) + +# FreeBSD Support +if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + find_package(LibInotify REQUIRED) +endif() diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index f51ad684..59a15396 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,3 +1,12 @@ +set(SPHINX_BUILD "sphinx-build" CACHE STRING "Name/Path of the sphinx-build executable to use.") +set(SPHINX_FLAGS "" CACHE STRING "Flags to pass to sphinx-build") + +find_program(BIN_SPHINX "${SPHINX_BUILD}") + +if(NOT BIN_SPHINX) + message(FATAL_ERROR "sphinx-build executable '${SPHINX_BUILD}' not found.") +endif() + separate_arguments(sphinx_flags UNIX_COMMAND "${SPHINX_FLAGS}") set(doc_path "${CMAKE_CURRENT_SOURCE_DIR}") diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 355ffa86..4ab00adc 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -19,7 +19,7 @@ if(WITH_XKB) endif() add_subdirectory(xpp) -if (NOT TARGET xpp) +if(NOT TARGET xpp) message(FATAL_ERROR "Target xpp not generated") else() get_target_property(_xpp_includes xpp INCLUDE_DIRECTORIES) @@ -32,7 +32,7 @@ endif() if(ENABLE_I3) add_subdirectory(i3ipcpp) - if (NOT TARGET i3ipc++) + if(NOT TARGET i3ipc++) message(FATAL_ERROR "Target i3ipcpp not generated") else() get_target_property(_i3ipcpp_includes i3ipc++ INCLUDE_DIRECTORIES) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2ec5fc92..dcd58307 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,7 +5,7 @@ get_include_dirs(includes_dir) get_sources_dirs(src_dir) -if (BUILD_LIBPOLY) +if(BUILD_LIBPOLY) # Source tree {{{ set(ALSA_SOURCES @@ -169,7 +169,7 @@ if (BUILD_LIBPOLY) # }}} # Target: polybar {{{ - if (BUILD_POLYBAR) + if(BUILD_POLYBAR) add_executable(polybar main.cpp) target_link_libraries(polybar poly) set_target_properties(poly PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) @@ -194,7 +194,5 @@ if(BUILD_POLYBAR_MSG) install(TARGETS polybar-msg DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime) - endif() - # }}}