43556b5d92
* Use GNUInstallDirs instead of hardcoded paths This change should be a no-op in the normal case and at the same time make it easier to customise polybar builds on systems with special needs. * Avoid creating /usr/share/doc/polybar/polybar/* * Include GNUInstallDirs for the doc target itself * cmake: Don't try to set CMAKE_INSTALL_* variables Since we include GNUInstallDirs all these variables are already set * cmake: Print install directories in summary * fix(cmake): Make doc-only work like normal build This is kind of a dirty hack to force CMAKE_INSTALL_DOCDIR to use `polybar` as the project name when only polybar-doc is built. Maybe it is wiser at some point to be able to do a doc only build (and install) that can be done from the top level project. Then we would also not need to include GNUInstallDirs here
168 lines
4.4 KiB
CMake
168 lines
4.4 KiB
CMake
#
|
|
# Build configuration
|
|
#
|
|
cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
|
|
|
|
# Enable ccache by default and as early as possible because project() performs
|
|
# checks on the compiler
|
|
option(ENABLE_CCACHE "Enable ccache support" ON)
|
|
if(ENABLE_CCACHE)
|
|
message(STATUS "Trying to enable ccache")
|
|
find_program(BIN_CCACHE ccache)
|
|
|
|
string(ASCII 27 esc)
|
|
if(NOT BIN_CCACHE)
|
|
message(STATUS "${esc}[33mCouldn't locate ccache, disabling ccache...${esc}[0m")
|
|
else()
|
|
# Enable only if the binary is found
|
|
message(STATUS "${esc}[32mUsing compiler cache ${BIN_CCACHE}${esc}[0m")
|
|
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ${BIN_CCACHE})
|
|
endif()
|
|
endif()
|
|
|
|
project(polybar CXX)
|
|
|
|
# Extract version information from version.txt. The first line that looks like
|
|
# a version string is used, so the file supports comments
|
|
file(STRINGS version.txt version_txt REGEX "^[0-9]+\\.[0-9]+\\.[0-9]+.*$" LIMIT_COUNT 1)
|
|
|
|
# If we are in a git repo we can get the version information from git describe
|
|
execute_process(COMMAND git describe --tags --dirty=-dev
|
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
|
RESULT_VARIABLE git_result
|
|
OUTPUT_VARIABLE git_describe
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE ERROR_QUIET)
|
|
|
|
if(git_result EQUAL "0")
|
|
set(APP_VERSION "${git_describe}")
|
|
else()
|
|
message(STATUS "Could not detect version with git, falling back to built-in version information.")
|
|
set(APP_VERSION "${version_txt}")
|
|
endif()
|
|
|
|
set(CMAKE_MODULE_PATH
|
|
${CMAKE_MODULE_PATH}
|
|
${PROJECT_SOURCE_DIR}/cmake
|
|
${PROJECT_SOURCE_DIR}/cmake/common
|
|
${PROJECT_SOURCE_DIR}/cmake/modules)
|
|
|
|
include(GNUInstallDirs)
|
|
include(utils)
|
|
include(01-core)
|
|
include(02-opts)
|
|
include(03-libs)
|
|
include(04-targets)
|
|
include(05-summary)
|
|
|
|
if(BUILD_DOC)
|
|
add_subdirectory(doc)
|
|
endif()
|
|
add_subdirectory(contrib/bash)
|
|
add_subdirectory(contrib/zsh)
|
|
add_subdirectory(include)
|
|
add_subdirectory(lib)
|
|
add_subdirectory(src bin)
|
|
|
|
# We need to enable testing in the root folder so that 'ctest' and 'make test'
|
|
# can be run in the build directory
|
|
if(BUILD_TESTS)
|
|
enable_testing()
|
|
add_subdirectory(tests)
|
|
endif()
|
|
|
|
|
|
#
|
|
# Generate configuration file
|
|
#
|
|
|
|
set(MODULES_LEFT "bspwm i3")
|
|
set(MODULES_CENTER "mpd")
|
|
set(MODULES_RIGHT "filesystem xbacklight alsa pulseaudio xkeyboard memory cpu wlan eth battery temperature date powermenu")
|
|
|
|
set(FONT_FIXED "fixed:pixelsize=10")
|
|
set(FONT_UNIFONT "unifont:fontformat=truetype")
|
|
set(FONT_SIJI "siji:pixelsize=10")
|
|
|
|
queryfont(FONT_FIXED ${FONT_FIXED} FIELDS family pixelsize)
|
|
queryfont(FONT_UNIFONT ${FONT_UNIFONT} FIELDS family fontformat)
|
|
queryfont(FONT_SIJI ${FONT_SIJI} FIELDS family pixelsize)
|
|
|
|
# Strip disabled modules {{{
|
|
|
|
if(NOT ENABLE_PULSEAUDIO)
|
|
string(REPLACE " pulseaudio" "" MODULES_RIGHT ${MODULES_RIGHT})
|
|
endif()
|
|
if(NOT ENABLE_ALSA)
|
|
string(REPLACE " alsa" "" MODULES_RIGHT ${MODULES_RIGHT})
|
|
endif()
|
|
if(NOT ENABLE_I3)
|
|
string(REPLACE " i3" "" MODULES_LEFT ${MODULES_LEFT})
|
|
endif()
|
|
if(NOT ENABLE_MPD)
|
|
string(REPLACE "mpd" "" MODULES_CENTER ${MODULES_CENTER})
|
|
endif()
|
|
if(NOT ENABLE_NETWORK)
|
|
string(REPLACE " wlan eth" "" MODULES_RIGHT ${MODULES_RIGHT})
|
|
endif()
|
|
if(NOT WITH_XRANDR)
|
|
string(REPLACE "xbacklight " "backlight-acpi " MODULES_RIGHT ${MODULES_RIGHT})
|
|
endif()
|
|
if(NOT WITH_XKB)
|
|
string(REPLACE "xkeyboard " "" MODULES_RIGHT ${MODULES_RIGHT})
|
|
endif()
|
|
|
|
# }}}
|
|
# Get battery/adapter name {{{
|
|
|
|
string(REGEX REPLACE /%battery%.* "" PATH_BAT ${SETTING_PATH_BATTERY})
|
|
string(REGEX REPLACE /%adapter%.* "" PATH_ADP ${SETTING_PATH_ADAPTER})
|
|
file(GLOB BAT_LIST RELATIVE ${PATH_BAT} ${PATH_ADP}/B*)
|
|
file(GLOB ADP_LIST RELATIVE ${PATH_ADP} ${PATH_ADP}/A*)
|
|
if(BAT_LIST)
|
|
list(GET BAT_LIST 0 BATTERY)
|
|
else()
|
|
set(BATTERY BAT0)
|
|
endif()
|
|
if(ADP_LIST)
|
|
list(GET ADP_LIST 0 ADAPTER)
|
|
else()
|
|
set(ADAPTER ADP1)
|
|
endif()
|
|
|
|
# }}}
|
|
# Get network interfaces {{{
|
|
|
|
if(ENABLE_NETWORK)
|
|
file(GLOB IFLIST RELATIVE /sys/class/net /sys/class/net/*)
|
|
foreach(INTERFACE ${IFLIST})
|
|
if(NOT ${INTERFACE} STREQUAL "lo")
|
|
file(GLOB IS_WIRELESS /sys/class/net/${INTERFACE}/wireless)
|
|
if(IS_WIRELESS)
|
|
set(INTERFACE_WLAN ${INTERFACE})
|
|
else()
|
|
set(INTERFACE_ETH ${INTERFACE})
|
|
endif()
|
|
endif()
|
|
endforeach()
|
|
if(NOT INTERFACE_ETH)
|
|
set(INTERFACE_ETH net0)
|
|
endif()
|
|
if(NOT INTERFACE_WLAN)
|
|
set(INTERFACE_WLAN net1)
|
|
endif()
|
|
endif()
|
|
|
|
# }}}
|
|
# Configure and install {{{
|
|
|
|
configure_file(
|
|
${CMAKE_CURRENT_LIST_DIR}/config.cmake
|
|
${CMAKE_CURRENT_LIST_DIR}/config
|
|
ESCAPE_QUOTES @ONLY)
|
|
|
|
install(FILES config
|
|
DESTINATION ${CMAKE_INSTALL_DOCDIR}
|
|
COMPONENT config)
|
|
|
|
# }}}
|