From b8f3d22a320935d5eab2943dd3054c6c4eeae1ee Mon Sep 17 00:00:00 2001 From: Richard Grenville Date: Wed, 3 Oct 2012 13:30:11 +0800 Subject: [PATCH] Misc: #49: Add CMake support Add CMakeLists.txt to support building with CMake, as @pvanek requests. The old Makefile system and CPackConfig.cmake are still usable. (Of course, make sure you don't overwrite them by executing cmake.) There must be a bunch of bugs in CMakeLists.txt. :-) Let chjj decide which one he will choose, here I keep both. --- .gitignore | 12 +++- CMakeLists.txt | 145 +++++++++++++++++++++++++++++++++++++++++++++++++ desc.txt | 1 + 3 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 desc.txt diff --git a/.gitignore b/.gitignore index 9ba4cfdb..b4a8bfe2 100644 --- a/.gitignore +++ b/.gitignore @@ -13,11 +13,19 @@ missing stamp-h1 compton *.o -_CPack_Packages -build +build/ + +# CMake files compton-*.deb compton-*.rpm compton-*.tar.bz2 +release/ +_CPack_Packages/ +CMakeCache.txt +CMakeFiles/ +*.cmake +install_manifest.txt + # Vim files .*.sw[a-z] diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..7969e703 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,145 @@ +project(compton) +cmake_minimum_required(VERSION 2.8) + +set(CPACK_PACKAGE_VERSION_MAJOR "0") +set(CPACK_PACKAGE_VERSION_MINOR "0") +set(CPACK_PACKAGE_VERSION_PATCH "0") + +set(compton_SRCS src/compton.c) +add_executable(compton ${compton_SRCS}) + +set(CMAKE_C_FLAGS_DEBUG "-ggdb") +set(CMAKE_C_FLAGS_RELEASE "-O2 -march=native") +set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -march=native -ggdb") + +add_definitions("-Wall") + +# == Options == + +option(CONFIG_REGEX_PCRE "Enable PCRE regular expression support for blacklist entries (requires libpcre)" ON) +if (CONFIG_REGEX_PCRE) + add_definitions("-DCONFIG_REGEX_PCRE") +endif () + +option(CONFIG_REGEX_PCRE_JIT "Use JIT support of libpcre)" ON) +if (CONFIG_REGEX_PCRE_JIT) + add_definitions("-DCONFIG_REGEX_PCRE_JIT") +endif () + +option(CONFIG_LIBCONFIG "Enable configuration file parsing using libconfig" ON) +if (CONFIG_LIBCONFIG) + add_definitions("-DCONFIG_LIBCONFIG") +endif () + +# == Find libraries == + +target_link_libraries(compton "-lm") + +include(FindPkgConfig) + +# --- Find X11 libs --- +set(X11_FIND_REQUIRED 1) +include(FindX11) + +macro(X11LIB_CHK lib) + if (NOT X11_${lib}_FOUND) + message(FATAL_ERROR "Could not find lib${lib}.") + endif () + target_link_libraries(compton "${X11_${lib}_LIB}") +endmacro () + +X11LIB_CHK(Xcomposite) +X11LIB_CHK(Xdamage) +X11LIB_CHK(Xext) +X11LIB_CHK(Xfixes) +X11LIB_CHK(Xrender) + +# --- Find libpcre --- +if (CONFIG_REGEX_PCRE) + pkg_check_modules(LIBPCRE REQUIRED libpcre>=8.12) + target_link_libraries(compton "${LIBPCRE_LDFLAGS}") +endif () + +# --- Find libconfig --- +if (CONFIG_LIBCONFIG) + pkg_check_modules(LIBCONFIG REQUIRED libconfig>=1.3.2) + target_link_libraries(compton "${LIBCONFIG_LDFLAGS}") + if (LIBCONFIG_VERSION VERSION_LESS 1.4) + add_definitions("-DCONFIG_LIBCONFIG_LEGACY") + message(STATUS "libconfig-1.3* detected. Enable legacy mode.") + endif () +endif () + +# == Install == +include(GNUInstallDirs) + +install(TARGETS compton + DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT prog) +install(FILES "${PROJECT_SOURCE_DIR}/bin/compton-trans" + DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT prog) +install(FILES + "${PROJECT_SOURCE_DIR}/man/compton.1" + "${PROJECT_SOURCE_DIR}/man/compton-trans.1" + DESTINATION "${CMAKE_INSTALL_MANDIR}" COMPONENT doc) +install(FILES + "${PROJECT_SOURCE_DIR}/README.md" + "${PROJECT_SOURCE_DIR}/LICENSE" + DESTINATION "${CMAKE_INSTALL_DOCDIR}" COMPONENT doc) + +# == CPack == + +if (NOT CPACK_SYSTEM_NAME) + set(CPACK_SYSTEM_NAME "${CMAKE_SYSTEM_PROCESSOR}") +endif () + +set(CPACK_PACKAGE_DESCRIPTION "A lightweight X compositing window manager, fork of xcompmgr-dana.") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "A lightweight X compositing window manager") +set(CPACK_PACKAGE_CONTACT "nobody ") +set(CPACK_PACKAGE_DIRECTORY "${CMAKE_SOURCE_DIR}/release") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/desc.txt") + +# --- Package config --- +set(CPACK_GENERATOR "TBZ2" "DEB" "RPM") +set(CPACK_MONOLITHIC_INSTALL 1) +set(CPACK_STRIP_FILES 1) +set(CPACK_RESOURCE_FILE_LICENSE "LICENSE") +set(CPACK_RESOURCE_FILE_README "README.md") + +# --- Source package config --- +set(CPACK_SOURCE_GENERATOR "TBZ2" "DEB" "RPM") +set(CPACK_SOURCE_IGNORE_FILES + "/\\\\." + "\\\\.bak$" + "\\\\.o$" + "\\\\~$" + "\\\\.plist$" + "/compton$" + # Generated package files + "\\\\.tar\\\\.gz$" + "\\\\.tar\\\\.bz2$" + "\\\\.deb$" + "\\\\.rpm$" + "compton-.*\\\\.sh$" + # CMake files + "/Makefile$" + "/CMakeFiles/" + "\\\\.cmake$" + "CMakeCache\\\\.txt$" + "/build/" + "/release/" + "\\\\.diff$" + "/oprofile_data/" + "/install_manifest\\\\.txt$" +) + +# --- DEB package config --- +set(CPACK_DEBIAN_PACKAGE_SECTION "x11") +# The dependencies are unreliable, just an example here +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libx11-6, libxext6, libxcomposite1, libxrender1, libxdamage1, libxfixes3, libpcre3, libconfig8") + +# --- RPM package config --- +set(CPACK_RPM_PACKAGE_LICENSE "unknown") +# The dependencies are unreliable, just an example here +set(CPACK_RPM_PACKAGE_REQUIRES "libx11, libxext, libxcomposite, libxrender, libxdamage, libxfixes, libpcre, libconfig") + +include(CPack) diff --git a/desc.txt b/desc.txt new file mode 100644 index 00000000..eadc037a --- /dev/null +++ b/desc.txt @@ -0,0 +1 @@ +Compton is a X compositing window manager, fork of xcompmgr-dana.