# # Conky, a system monitor, based on torsmo # # Please see COPYING for details # # Copyright (c) 2005-2024 Brenden Matthews, et. al. (see AUTHORS) All rights # reserved. # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation, either version 3 of the License, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more # details. You should have received a copy of the GNU General Public License # along with this program. If not, see . # include_directories(${conky_includes}) # always include the binary dir include_directories(${CMAKE_CURRENT_BINARY_DIR}) if(BUILD_BUILTIN_CONFIG OR BUILD_OLD_CONFIG) # include config output dir include_directories(${CMAKE_BINARY_DIR}/data) endif(BUILD_BUILTIN_CONFIG OR BUILD_OLD_CONFIG) # ensure build.h and config.h aren't in the way if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/config.h) message( FATAL_ERROR "You must remove the autotools generated file '${CMAKE_CURRENT_SOURCE_DIR}/config.h' in order to build with CMake." ) endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/config.h) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build.h) message( FATAL_ERROR "You must remove the autotools generated file '${CMAKE_CURRENT_SOURCE_DIR}/build.h' in order to build with CMake." ) endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/build.h) if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/defconfig.h) message( FATAL_ERROR "You must remove the autotools generated file '${CMAKE_CURRENT_SOURCE_DIR}/defconfig.h' in order to build with CMake." ) endif(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/defconfig.h) # Generate colour-names.hh with gperf execute_process( INPUT_FILE "${CMAKE_SOURCE_DIR}/data/color-names.yml" OUTPUT_FILE "${CMAKE_BINARY_DIR}/data/color-names.gperf" COMMAND sh "${CMAKE_SOURCE_DIR}/bin/format-colors.sh" ) execute_process( INPUT_FILE "${CMAKE_BINARY_DIR}/data/color-names.gperf" OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/colour-names.hh" COMMAND ${APP_GPERF} --ignore-case -LC++ -Zcolor_name_hash -t -7 -m1 -C -E ) set(conky_sources ${conky_sources} c++wrap.cc c++wrap.hh lua/colour-settings.cc lua/colour-settings.hh content/colours.cc content/colours.hh content/combine.cc content/combine.h common.cc common.h conky.cc conky.h core.cc core.h data/hardware/cpu.cc data/hardware/cpu.h data/hardware/diskio.cc data/hardware/diskio.h data/entropy.cc data/entropy.h data/exec.cc data/exec.h data/fs.cc data/fs.h content/gradient.cc content/gradient.hh data/network/mail.cc data/network/mail.h data/misc.cc data/misc.h data/network/net_stat.cc data/network/net_stat.h content/template.cc content/template.h data/network/mboxscan.cc data/network/mboxscan.h data/network/read_tcpip.cc data/network/read_tcpip.h content/scroll.cc content/scroll.h content/specials.cc content/specials.h data/tailhead.cc data/tailhead.h content/temphelper.cc content/temphelper.h content/text_object.cc content/text_object.h data/timeinfo.cc data/timeinfo.h data/top.cc data/top.h content/algebra.cc content/algebra.h prioqueue.cc prioqueue.h data/proc.cc data/proc.h data/user.cc data/user.h lua/luamm.cc lua/luamm.hh data/data-source.cc data/data-source.hh output/display-output.cc output/display-output.hh output/display-console.cc output/display-console.hh output/display-file.cc output/display-file.hh lua/lua-config.cc lua/lua-config.hh lua/setting.cc lua/setting.hh lua/llua.cc lua/llua.h update-cb.cc update-cb.hh logging.h semaphore.hh ) # Platform specific sources if(OS_LINUX) set(linux_sources data/os/linux.cc data/os/linux.h data/users.cc data/users.h data/hardware/sony.cc data/hardware/sony.h data/hardware/i8k.cc data/hardware/i8k.h ) set(optional_sources ${optional_sources} ${linux_sources}) endif(OS_LINUX) if(OS_FREEBSD) set(freebsd_sources data/os/freebsd.cc data/os/freebsd.h data/hardware/bsdapm.cc data/hardware/bsdapm.h ) set(optional_sources ${optional_sources} ${freebsd_sources}) endif(OS_FREEBSD) if(OS_DRAGONFLY) set(dragonfly_sources data/os/dragonfly.cc data/os/dragonfly.h data/hardware/bsdapm.cc data/hardware/bsdapm.h ) set(optional_sources ${optional_sources} ${dragonfly_sources}) endif(OS_DRAGONFLY) if(OS_OPENBSD) set(openbsd_sources data/os/openbsd.cc data/os/openbsd.h data/hardware/bsdapm.cc data/hardware/bsdapm.h data/os/bsdcommon.cc data/os/bsdcommon.h ) set(optional_sources ${optional_sources} ${openbsd_sources}) endif(OS_OPENBSD) # These below are not actually supported. No idea what their status is. if(OS_SOLARIS) set(solaris_sources data/os/solaris.cc data/os/solaris.h) set(optional_sources ${optional_sources} ${solaris_sources}) endif(OS_SOLARIS) if(OS_NETBSD) set(netbsd_sources data/os/netbsd.cc data/os/netbsd.h data/os/bsdcommon.cc data/os/bsdcommon.h) set(optional_sources ${optional_sources} ${netbsd_sources}) endif(OS_NETBSD) if(OS_HAIKU) set(haiku_sources data/os/haiku.cc data/os/haiku.h) set(optional_sources ${optional_sources} ${haiku_sources}) endif(OS_HAIKU) if(OS_DARWIN) set(darwin_sources data/os/darwin.mm data/os/darwin.h data/os/darwin_sip.h i18n.h) set(optional_sources ${optional_sources} ${darwin_sources}) endif(OS_DARWIN) # Optional sources if(HAVE_SOUNDCARD_H) set(mixer data/audio/mixer.cc data/audio/mixer.h) set(optional_sources ${optional_sources} ${mixer}) endif(HAVE_SOUNDCARD_H) if(BUILD_AUDACIOUS) set(audacious data/audio/audacious.cc data/audio/audacious.h) set(optional_sources ${optional_sources} ${audacious}) endif(BUILD_AUDACIOUS) if(BUILD_IBM) set(ibm data/hardware/ibm.cc data/hardware/ibm.h data/hardware/smapi.cc data/hardware/smapi.h) set(optional_sources ${optional_sources} ${ibm}) endif(BUILD_IBM) if(BUILD_MPD) set(mpd data/audio/mpd.cc data/audio/mpd.h data/audio/libmpdclient.cc data/audio/libmpdclient.h) set(optional_sources ${optional_sources} ${mpd}) endif(BUILD_MPD) if(BUILD_MYSQL) set(mysql data/mysql.cc data/mysql.h) set(optional_sources ${optional_sources} ${mysql}) endif(BUILD_MYSQL) if(BUILD_MOC) set(moc data/audio/moc.cc data/audio/moc.h) set(optional_sources ${optional_sources} ${moc}) endif(BUILD_MOC) if(BUILD_CMUS) set(cmus data/audio/cmus.cc data/audio/cmus.h) set(optional_sources ${optional_sources} ${cmus}) endif(BUILD_CMUS) if(BUILD_JOURNAL) set(journal data/os/journal.cc data/os/journal.h) set(optional_sources ${optional_sources} ${journal}) endif(BUILD_JOURNAL) if(BUILD_XMMS2) set(xmms2 data/audio/xmms2.cc data/audio/xmms2.h) set(optional_sources ${optional_sources} ${xmms2}) endif(BUILD_XMMS2) if(BUILD_PORT_MONITORS) add_library(tcp-portmon data/network/libtcp-portmon.cc data/network/libtcp-portmon.h ) set(conky_libs ${conky_libs} tcp-portmon) set(port_monitors data/network/tcp-portmon.cc data/network/tcp-portmon.h ) set(optional_sources ${optional_sources} ${port_monitors}) endif(BUILD_PORT_MONITORS) if(BUILD_HTTP) set(http output/display-http.cc output/display-http.hh ) set(optional_sources ${optional_sources} ${http}) endif(BUILD_HTTP) if(BUILD_X11) set(x11 output/display-x11.cc output/display-x11.hh lua/x11-settings.cc lua/x11-settings.h output/x11-color.cc output/x11.cc output/x11.h ) set(optional_sources ${optional_sources} ${x11}) endif(BUILD_X11) if(BUILD_GUI) set(gui lua/fonts.cc lua/fonts.h output/gui.cc output/gui.h) set(optional_sources ${optional_sources} ${gui}) if(BUILD_MOUSE_EVENTS OR BUILD_XINPUT) set(mouse_events mouse-events.cc mouse-events.h) set(optional_sources ${optional_sources} ${mouse_events}) endif(BUILD_MOUSE_EVENTS OR BUILD_XINPUT) endif(BUILD_GUI) if(BUILD_WAYLAND) set(wl_sources output/wl.cc output/wl.h output/display-wayland.cc output/display-wayland.hh xdg-shell-protocol.c wlr-layer-shell-protocol.c ) # Looks up wayland protocol files, build respective headers/sources, and adds # them to the build. # # Use: add_protocol(name [v]) macro(ADD_PROTOCOL name) set(WL_PROTOCOL_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/wl_protocols" # first for reproducibility "${Wayland_PROTOCOLS_DIR}/stable/${name}" "${Wayland_PROTOCOLS_DIR}/stable" "${Wayland_PROTOCOLS_DIR}/unstable/${name}" "${Wayland_PROTOCOLS_DIR}/unstable" ) if(${ARGC} GREATER 1) set(VERSION ${ARGV1}) find_file(PROTOCOL_FILE NAMES "${name}-${VERSION}.xml" "${name}-unstable-${VERSION}.xml" PATHS ${WL_PROTOCOL_PATHS} NO_CACHE REQUIRED NO_DEFAULT_PATH ) message(STATUS "PROTOCOL '${name}' ${VERSION} file: ${PROTOCOL_FILE}") unset(VERSION) else() find_file(PROTOCOL_FILE NAMES "${name}.xml" "${name}-unstable.xml" PATHS ${WL_PROTOCOL_PATHS} NO_CACHE REQUIRED NO_DEFAULT_PATH ) message(STATUS "PROTOCOL '${name}' file: ${PROTOCOL_FILE}") endif() add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${name}-client-protocol.h" COMMAND ${Wayland_SCANNER} client-header "${PROTOCOL_FILE}" "${name}-client-protocol.h") add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}-protocol.c COMMAND ${Wayland_SCANNER} private-code "${PROTOCOL_FILE}" "${name}-protocol.c" DEPENDS "${name}-client-protocol.h") list(APPEND wl_sources "${name}-protocol.c") unset(PROTOCOL_FILE) unset(WL_PROTOCOL_PATHS) endmacro() add_protocol(xdg-shell) add_protocol(wlr-layer-shell v1) set(optional_sources ${optional_sources} ${wl_sources}) endif(BUILD_WAYLAND) if(BUILD_HDDTEMP) set(hddtemp data/hardware/hddtemp.cc data/hardware/hddtemp.h) set(optional_sources ${optional_sources} ${hddtemp}) endif(BUILD_HDDTEMP) if(BUILD_CURL) set(ccurl_thread data/network/ccurl_thread.cc data/network/ccurl_thread.h ) set(optional_sources ${optional_sources} ${ccurl_thread}) endif(BUILD_CURL) if(BUILD_RSS) set(rss data/network/rss.cc data/network/rss.h data/network/prss.cc data/network/prss.h ) set(optional_sources ${optional_sources} ${rss}) endif(BUILD_RSS) if(BUILD_NVIDIA) set(nvidia data/hardware/nvidia.cc data/hardware/nvidia.h) set(optional_sources ${optional_sources} ${nvidia}) endif(BUILD_NVIDIA) if(BUILD_IMLIB2) set(imlib2 conky-imlib2.cc conky-imlib2.h) set(optional_sources ${optional_sources} ${imlib2}) endif(BUILD_IMLIB2) if(BUILD_APCUPSD) set(apcupsd data/hardware/apcupsd.cc data/hardware/apcupsd.h) set(optional_sources ${optional_sources} ${apcupsd}) endif(BUILD_APCUPSD) if(BUILD_ICAL) set(ical data/ical.cc data/ical.h) set(optional_sources ${optional_sources} ${ical}) endif(BUILD_ICAL) if(BUILD_IRC) set(irc data/network/irc.cc data/network/irc.h) set(optional_sources ${optional_sources} ${irc}) endif(BUILD_IRC) if(BUILD_ICONV) set(iconv data/iconv_tools.cc data/iconv_tools.h) set(optional_sources ${optional_sources} ${iconv}) endif(BUILD_ICONV) if(BUILD_NCURSES) set(ncurses_srcs output/nc.cc output/nc.h output/display-ncurses.cc output/display-ncurses.hh ) set(optional_sources ${optional_sources} ${ncurses_srcs}) endif(BUILD_NCURSES) if(BUILD_PULSEAUDIO) set(pulseaudio data/audio/pulseaudio.cc data/audio/pulseaudio.h) set(optional_sources ${optional_sources} ${pulseaudio}) endif(BUILD_PULSEAUDIO) if(BUILD_INTEL_BACKLIGHT) set(intel_backlight data/hardware/intel_backlight.cc data/hardware/intel_backlight.h) set(optional_sources ${optional_sources} ${intel_backlight}) endif(BUILD_INTEL_BACKLIGHT) if(BUILD_TESTING) # Create a library strictly for testing add_library(conky_core ${conky_sources} ${optional_sources}) add_dependencies(conky_core generated_hdr_files) target_link_libraries(conky_core ${conky_libs}) add_executable(conky main.cc) add_dependencies(conky generated_hdr_files) target_link_libraries(conky conky_core ${conky_libs}) install(TARGETS conky_core RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) else() add_executable(conky main.cc ${conky_sources} ${optional_sources}) add_dependencies(conky generated_hdr_files) target_link_libraries(conky ${conky_libs}) endif() install(TARGETS conky RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) if(BUILD_PORT_MONITORS) install(TARGETS tcp-portmon RUNTIME DESTINATION bin LIBRARY DESTINATION ${LIB_INSTALL_DIR} ARCHIVE DESTINATION ${LIB_INSTALL_DIR}) endif(BUILD_PORT_MONITORS) print_target_properties(conky)