From dbd5e679db17bebbdbd7afc0e3a1356abcd97285 Mon Sep 17 00:00:00 2001 From: Michael Carlberg Date: Tue, 24 May 2016 04:06:29 +0200 Subject: [PATCH] fix(build): Improved dependency checks --- CMakeLists.txt | 66 ++++++++++++++++++++++------------- README.md | 24 +++++++++---- cmake/modules/FindLibiw.cmake | 17 +++++++++ 3 files changed, 77 insertions(+), 30 deletions(-) create mode 100644 cmake/modules/FindLibiw.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 1663f316..28c5fc10 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,12 @@ # cmake_minimum_required(VERSION 3.0) -set(CMAKE_CXX_COMPILER "/usr/bin/clang++") +if(NOT CMAKE_CXX_COMPILER) + find_program(clang_EXECUTABLE "clang++") + if(clang_EXECUTABLE) + set(CMAKE_CXX_COMPILER ${clang_EXECUTABLE}) + endif() +endif() project(lemonbuddy VERSION 1.0.0) @@ -23,26 +28,11 @@ endif() # # Internal values and switches # - -option(ENABLE_CCACHE "Enable ccache support" ON) -option(ENABLE_ALSA "Enable alsa support" ON) -option(ENABLE_MPD "Enable mpd support" ON) -option(ENABLE_I3 "Enable i3 support" OFF) - -find_program(I3_EXECUTABLE i3) -if(I3_EXECUTABLE) - message(STATUS "Enabling i3 since executable was found") - set(ENABLE_I3 ON) -else() - message(STATUS "Coult not find i3 executable") -endif() - -message(STATUS "---------------------------") -message(STATUS " Enable ccache support ${ENABLE_CCACHE}") -message(STATUS " Enable mpd support ${ENABLE_MPD}") -message(STATUS " Enable alsa support ${ENABLE_ALSA}") -message(STATUS " Enable i3 support ${ENABLE_I3}") -message(STATUS "---------------------------") +option(ENABLE_CCACHE "Enable ccache support" ON) +option(ENABLE_ALSA "Enable alsa support" ON) +option(ENABLE_I3 "Enable i3 support" ON) +option(ENABLE_MPD "Enable mpd support" ON) +option(ENABLE_NETWORK "Enable network support" ON) if(ENABLE_ALSA) set(SETTING_ALSA_SOUNDCARD "default" @@ -93,7 +83,6 @@ endif() # Locate and insert libs # find_package("Boost" REQUIRED) -#find_package("Boost" REQUIRED "regex") find_package("Threads" REQUIRED) find_package("X11" REQUIRED "X11_Xrandr" "X11_Xutil" "X11_Xlib") @@ -121,7 +110,16 @@ if(ENABLE_ALSA) set(LINK_LIBS ${LINK_LIBS} ${ALSA_LIBRARIES}) else(ALSA_FOUND) # graceful fail - message(STATUS "Disabling alsa since required package wasn't found") + message(WARNING "Disabling alsa since required package wasn't found") + set(ENABLE_ALSA OFF) + endif() +endif() + +if(ENABLE_I3) + find_program(I3_EXECUTABLE "i3") + if(NOT I3_EXECUTABLE) + # graceful fail + message(WARNING "Disabling i3 support since executable was not found") set(ENABLE_ALSA OFF) endif() endif() @@ -134,15 +132,35 @@ if(ENABLE_MPD) set(LINK_LIBS ${LINK_LIBS} ${LIBMPDCLIENT_LIBRARY}) else(LibMPDClient_FOUND) # graceful fail - message(STATUS "Disabling mpd since required package wasn't found") + message(WARNING "Disabling mpd since required package wasn't found") set(ENABLE_MPD OFF) endif() endif() +if(ENABLE_NETWORK) + find_package("Libiw") + if(LibMPDClient_FOUND) + include_directories(${LIBMPDCLIENT_INCLUDE_DIRS}) + link_directories(${LIBMPDCLIENT_LIBRARY_DIRS}) + set(LINK_LIBS ${LINK_LIBS} ${LIBMPDCLIENT_LIBRARY}) + else(Libiw_FOUND) + # graceful fail + message(WARNING "Disabling network support since required library wasn't found") + set(ENABLE_NETWORK OFF) + endif() +endif() # # Install executable and wrapper # +message(STATUS "---------------------------") +message(STATUS " Enable ccache support ${ENABLE_CCACHE}") +message(STATUS " Enable alsa support ${ENABLE_ALSA}") +message(STATUS " Enable i3 support ${ENABLE_I3}") +message(STATUS " Enable mpd support ${ENABLE_MPD}") +message(STATUS " Enable network support ${ENABLE_NETWORK}") +message(STATUS "---------------------------") + add_subdirectory("${PROJECT_SOURCE_DIR}/src") add_executable(${PROJECT_NAME} ${SOURCE_FILES}) diff --git a/README.md b/README.md index c97e457b..1a592229 100644 --- a/README.md +++ b/README.md @@ -34,21 +34,33 @@ A C++ compiler with C++14 support. For example `clang`. - boost - libx11 - libxrandr -- wireless_tools -- alsa-lib _optional_ -- libmpdclient _optional_ -- libsigc++ _optional_ +- wireless_tools _(optional: used by the network module)_ +- alsa-lib _(optional: used by the volume module)_ +- libmpdclient _(optional: used by the mpd module)_ +- libsigc++ _(optional: used by the i3 module)_ -**With Pacman you can install the packages using:** +**Installing using pacman:** ~~~ sh $ pacman -S cmake boost libx11 libxrandr wireless_tools alsa-lib libmpdclient libsigc++ i3-wm ~~~ -**With XBPS you can install the packages using:** +**Installing using xbps-install:** ~~~ sh $ xbps-install -S cmake alsa-lib-devel boost-devel i3-devel libX11-devel libXrandr-devel libmpdclient-devel libsigc++-devel wireless_tools-devel ~~~~ +**Installing using apt-get:** + +> NOTE: `libmpdclient-dev` is located in the `universe` repository, so make sure it's +> included in the list of sources in `/etc/apt/sources.list`, for example: +> +> `deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe` + +~~~ sh +$ apt-get install cmake libx11-dev libxrandr-dev libboost-dev libiw-dev libmpdclient-dev libsigc++-dev i3-wm +~~~~ + +
## Building from source diff --git a/cmake/modules/FindLibiw.cmake b/cmake/modules/FindLibiw.cmake new file mode 100644 index 00000000..c69b941d --- /dev/null +++ b/cmake/modules/FindLibiw.cmake @@ -0,0 +1,17 @@ +# This module defines +# LIBIW_FOUND - whether the libiw library was found +# LIBIW_LIBRARIES - the libiw library +# LIBIW_INCLUDE_DIR - the include path of the libiw library + +find_library(LIBIW_LIBRARY iw) + +if(LIBIW_LIBRARY) + set(LIBIW_LIBRARIES ${LIBIW_LIBRARY}) +endif(LIBIW_LIBRARY) + +find_path(LIBIW_INCLUDE_DIR NAMES iwlib.h) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Libiw DEFAULT_MSG LIBIW_LIBRARY LIBIW_INCLUDE_DIR) + +mark_as_advanced(LIBIW_INCLUDE_DIR LIBIW_LIBRARY)