diff --git a/CMakeLists.txt b/CMakeLists.txt index 0b4ec8b..643785a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,14 @@ project(f00bar C) set(CORE_PLUGINS_AS_SHARED_LIBRARIES 0 CACHE BOOL "Compiles modules, particles and decorations as shared libraries, which are loaded on-demand") +set(ENABLE_X11 1 CACHE BOOL "Enables support for the XCB (X11) backend") +set_property(DIRECTORY . APPEND PROPERTY + COMPILE_DEFINITIONS $<$:ENABLE_X11>) + +set(ENABLE_WAYLAND 1 CACHE BOOL "Enables support for the wayland backend") +set_property(DIRECTORY . APPEND PROPERTY + COMPILE_DEFINITIONS $<$:ENABLE_WAYLAND>) + set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_EXTENSIONS OFF) set(CMAKE_C_STANDARD 11) @@ -27,26 +35,11 @@ pkg_check_modules(fontconfig REQUIRED IMPORTED_TARGET fontconfig) pkg_check_modules(cairo REQUIRED IMPORTED_TARGET cairo cairo-ft) pkg_check_modules(yaml REQUIRED IMPORTED_TARGET yaml-0.1) -set(ENABLE_X11 1 CACHE BOOL "Enables support for the XCB (X11) backend") -set_property(DIRECTORY . APPEND PROPERTY - COMPILE_DEFINITIONS $<$:ENABLE_X11>) - if (ENABLE_X11) pkg_check_modules(xcb REQUIRED IMPORTED_TARGET xcb xcb-aux xcb-cursor xcb-event xcb-ewmh xcb-randr xcb-render cairo-xcb) pkg_check_modules(xcb-errors IMPORTED_TARGET xcb-errors) -endif () -set(ENABLE_WAYLAND 1 CACHE BOOL "Enables support for the wayland backend") -set_property(DIRECTORY . APPEND PROPERTY - COMPILE_DEFINITIONS $<$:ENABLE_WAYLAND>) - -if (ENABLE_WAYLAND) - pkg_check_modules(wayland REQUIRED IMPORTED_TARGET - wayland-client wayland-cursor wlroots) -endif () - -if (ENABLE_X11) add_library(xcb-stuff STATIC EXCLUDE_FROM_ALL xcb.c xcb.h) target_link_libraries(xcb-stuff PkgConfig::xcb) if (XCB_ERRORS_FOUND) @@ -54,60 +47,15 @@ if (ENABLE_X11) target_link_libraries(xcb-stuff PkgConfig::xcb-errors) endif () - add_library(bar-xcb STATIC EXCLUDE_FROM_ALL bar/xcb.c bar/xcb.h) - target_link_libraries(bar-xcb - xcb-stuff PkgConfig::cairo) endif () if (ENABLE_WAYLAND) - function (wayland_protocol _deps) - set(deps "") - foreach (xml_file ${ARGN}) - get_filename_component(base ${xml_file} NAME_WE) - set(out_c ${base}.c) - set(out_h ${base}.h) - - add_custom_command( - OUTPUT ${out_h} - COMMAND wayland-scanner client-header < ${xml_file} > ${out_h} - VERBATIM - MAIN_DEPENDENCY ${xml_file} - ) - add_custom_command( - OUTPUT ${out_c} - COMMAND wayland-scanner private-code < ${xml_file} > ${out_c} - VERBATIM - MAIN_DEPENDENCY ${xml_file} - ) - - list(APPEND deps ${out_h}) - list(APPEND deps ${out_c}) - endforeach () - - set(${_deps} ${deps} PARENT_SCOPE) - endfunction () - - execute_process( - COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=pkgdatadir wayland-protocols - OUTPUT_VARIABLE WAYLAND_PROTOCOLS - OUTPUT_STRIP_TRAILING_WHITESPACE) - - wayland_protocol( - wayland_protos - ${PROJECT_SOURCE_DIR}/external/wlroots/protocol/wlr-layer-shell-unstable-v1.xml - ${WAYLAND_PROTOCOLS}/stable/xdg-shell/xdg-shell.xml - ${WAYLAND_PROTOCOLS}/unstable/xdg-output/xdg-output-unstable-v1.xml - ) - - add_library(wayland-protocols STATIC EXCLUDE_FROM_ALL ${wayland_protos}) - target_include_directories(wayland-protocols PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) - - add_library(bar-wayland STATIC EXCLUDE_FROM_ALL bar/wayland.c bar/wayland.h) - target_compile_definitions(bar-wayland PRIVATE _GNU_SOURCE) - target_link_libraries( - bar-wayland wayland-protocols PkgConfig::wayland PkgConfig::cairo) + pkg_check_modules(wayland REQUIRED IMPORTED_TARGET + wayland-client wayland-cursor wlroots) endif () +add_subdirectory(bar) + add_executable(f00bar config.c config.h config-verify.c config-verify.h @@ -120,14 +68,10 @@ add_executable(f00bar plugin.c plugin.h tag.c tag.h yml.c yml.h - - bar.h - bar/bar.c bar/private.h bar/backend.h ) target_link_libraries(f00bar - $<$:bar-xcb> - $<$:bar-wayland> + bar PkgConfig::cairo PkgConfig::fontconfig PkgConfig::yaml ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS}) @@ -148,8 +92,6 @@ add_subdirectory(modules) add_subdirectory(particles) add_subdirectory(decorations) - - if (NOT CORE_PLUGINS_AS_SHARED_LIBRARIES) target_link_libraries(f00bar ${enabled_decorations}) target_link_libraries(f00bar ${enabled_particles}) diff --git a/bar/CMakeLists.txt b/bar/CMakeLists.txt new file mode 100644 index 0000000..6b5f3ae --- /dev/null +++ b/bar/CMakeLists.txt @@ -0,0 +1,64 @@ +cmake_minimum_required(VERSION 3.7) + +# X11/XCB bar backend +if (ENABLE_X11) + add_library(bar-xcb STATIC EXCLUDE_FROM_ALL xcb.c xcb.h) + target_link_libraries(bar-xcb xcb-stuff PkgConfig::cairo) +endif () + +# Wayland/wlroots bar backend +if (ENABLE_WAYLAND) + function (wayland_protocol _deps) + set(deps "") + foreach (xml_file ${ARGN}) + get_filename_component(base ${xml_file} NAME_WE) + set(out_c ${base}.c) + set(out_h ${base}.h) + + add_custom_command( + OUTPUT ${out_h} + COMMAND wayland-scanner client-header < ${xml_file} > ${out_h} + VERBATIM + MAIN_DEPENDENCY ${xml_file} + ) + add_custom_command( + OUTPUT ${out_c} + COMMAND wayland-scanner private-code < ${xml_file} > ${out_c} + VERBATIM + MAIN_DEPENDENCY ${xml_file} + ) + + list(APPEND deps ${out_h}) + list(APPEND deps ${out_c}) + endforeach () + + set(${_deps} ${deps} PARENT_SCOPE) + endfunction () + + execute_process( + COMMAND ${PKG_CONFIG_EXECUTABLE} --variable=pkgdatadir wayland-protocols + OUTPUT_VARIABLE WAYLAND_PROTOCOLS + OUTPUT_STRIP_TRAILING_WHITESPACE) + + wayland_protocol( + wayland_protos + ${PROJECT_SOURCE_DIR}/external/wlroots/protocol/wlr-layer-shell-unstable-v1.xml + ${WAYLAND_PROTOCOLS}/stable/xdg-shell/xdg-shell.xml + ${WAYLAND_PROTOCOLS}/unstable/xdg-output/xdg-output-unstable-v1.xml + ) + + add_library(wayland-protocols STATIC EXCLUDE_FROM_ALL ${wayland_protos}) + target_include_directories(wayland-protocols PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) + + add_library(bar-wayland STATIC EXCLUDE_FROM_ALL wayland.c wayland.h) + target_compile_definitions(bar-wayland PRIVATE _GNU_SOURCE) + target_link_libraries( + bar-wayland wayland-protocols PkgConfig::wayland PkgConfig::cairo) +endif () + +add_library(bar STATIC EXCLUDE_FROM_ALL bar.c bar.h private.h backend.h) + +target_link_libraries(bar + $<$:bar-xcb> + $<$:bar-wayland> +) diff --git a/bar/backend.h b/bar/backend.h index fc33c37..c07e069 100644 --- a/bar/backend.h +++ b/bar/backend.h @@ -2,7 +2,7 @@ #include -#include "../bar.h" +#include "bar.h" struct backend { bool (*setup)(struct bar *bar); diff --git a/bar/bar.c b/bar/bar.c index 145cfd0..065460b 100644 --- a/bar/bar.c +++ b/bar/bar.c @@ -1,4 +1,4 @@ -#include "../bar.h" +#include "bar.h" #include "private.h" #include diff --git a/bar.h b/bar/bar.h similarity index 94% rename from bar.h rename to bar/bar.h index 3839b01..b4765a2 100644 --- a/bar.h +++ b/bar/bar.h @@ -1,7 +1,7 @@ #pragma once -#include "color.h" -#include "module.h" +#include "../color.h" +#include "../module.h" struct bar { int abort_fd; diff --git a/bar/private.h b/bar/private.h index 5b202ab..647fb20 100644 --- a/bar/private.h +++ b/bar/private.h @@ -3,7 +3,7 @@ #include #include -#include "../bar.h" +#include "../bar/bar.h" #include "backend.h" struct private { diff --git a/config.c b/config.c index fdfc1b4..73590ea 100644 --- a/config.c +++ b/config.c @@ -7,7 +7,7 @@ #include -#include "bar.h" +#include "bar/bar.h" #include "color.h" #include "config-verify.h" #include "module.h" diff --git a/main.c b/main.c index 78ec0ba..56460e1 100644 --- a/main.c +++ b/main.c @@ -14,7 +14,7 @@ #include #include -#include "bar.h" +#include "bar/bar.h" #include "config.h" #include "yml.h" diff --git a/modules/alsa.c b/modules/alsa.c index 01fdc8b..0cb5e41 100644 --- a/modules/alsa.c +++ b/modules/alsa.c @@ -6,7 +6,7 @@ #define LOG_MODULE "alsa" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config-verify.h" #include "../config.h" #include "../plugin.h" diff --git a/modules/backlight.c b/modules/backlight.c index 69c67ae..69cb8f5 100644 --- a/modules/backlight.c +++ b/modules/backlight.c @@ -12,7 +12,7 @@ #define LOG_MODULE "backlight" #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/modules/battery.c b/modules/battery.c index 777260d..2192bb0 100644 --- a/modules/battery.c +++ b/modules/battery.c @@ -13,7 +13,7 @@ #define LOG_MODULE "battery" #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/modules/clock.c b/modules/clock.c index a374239..27e19fd 100644 --- a/modules/clock.c +++ b/modules/clock.c @@ -5,7 +5,7 @@ #include -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/modules/i3.c b/modules/i3.c index 81e2ec8..b4951a2 100644 --- a/modules/i3.c +++ b/modules/i3.c @@ -24,7 +24,7 @@ #define LOG_MODULE "i3" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../particles/dynlist.h" diff --git a/modules/mpd.c b/modules/mpd.c index ac74854..b91c057 100644 --- a/modules/mpd.c +++ b/modules/mpd.c @@ -22,7 +22,7 @@ #define LOG_MODULE "mpd" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/modules/network.c b/modules/network.c index 6da16af..2c6522f 100644 --- a/modules/network.c +++ b/modules/network.c @@ -16,7 +16,7 @@ #define LOG_MODULE "network" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../module.h" diff --git a/modules/removables.c b/modules/removables.c index 5bbaf2c..e05db7d 100644 --- a/modules/removables.c +++ b/modules/removables.c @@ -15,7 +15,7 @@ #define LOG_MODULE "removables" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../particles/dynlist.h" diff --git a/modules/xkb.c b/modules/xkb.c index 04eb74a..ae86c38 100644 --- a/modules/xkb.c +++ b/modules/xkb.c @@ -11,7 +11,7 @@ #define LOG_MODULE "xkb" #define LOG_ENABLE_DBG 0 #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/modules/xwindow.c b/modules/xwindow.c index bb07ea4..a784e37 100644 --- a/modules/xwindow.c +++ b/modules/xwindow.c @@ -15,7 +15,7 @@ #define LOG_MODULE "xwindow" #include "../log.h" -#include "../bar.h" +#include "../bar/bar.h" #include "../config.h" #include "../config-verify.h" #include "../plugin.h" diff --git a/particle.c b/particle.c index 0c926bc..dfca044 100644 --- a/particle.c +++ b/particle.c @@ -10,7 +10,7 @@ #define LOG_MODULE "particle" #define LOG_ENABLE_DBG 0 #include "log.h" -#include "bar.h" +#include "bar/bar.h" void particle_default_destroy(struct particle *particle)