cmake_minimum_required(VERSION 2.8) project(mediascanner) set(MEDIASCANNER_VERSION "0.3.93") set(MEDIASCANNER_API_VERSION "1.0") set(MEDIASCANNER_ABI "1") set(MEDIASCANNER_GETTEXT_DOMAIN "mediascanner") set(MEDIASCANNER_SETTINGS_ID "com.canonical.mediascanner") set(MEDIASCANNER_SETTINGS_PATH "/com/canonical/mediascanner/") set(MEDIASCANNER_SETTINGS_FILE "${CMAKE_BINARY_DIR}/mediascanner.gschema.xml") set(MEDIASCANNER_PKGCONFIG_FILE "${CMAKE_BINARY_DIR}/mediascanner-${MEDIASCANNER_API_VERSION}.pc") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined") add_definitions(-DGETTEXT_DOMAIN="${MEDIASCANNER_GETTEXT_DOMAIN}" -DMEDIASCANNER_SETTINGS_ID="${MEDIASCANNER_SETTINGS_ID}") # ============================================================================= # Create and install pkg-config file # ============================================================================= configure_file(mediascanner.pc.in ${MEDIASCANNER_PKGCONFIG_FILE}) install(FILES ${MEDIASCANNER_PKGCONFIG_FILE} DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) # ============================================================================= # Coverage build type # ============================================================================= set(CMAKE_C_FLAGS_COVERAGE "${CMAKE_C_FLAGS_DEBUG} --coverage" ) set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} --coverage" ) string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) if(CMAKE_BUILD_TYPE_LOWER STREQUAL "coverage") message(STATUS "Building for coverage testing") include(TestCXXAcceptsFlag) unset(coverage_flags_accepted) check_cxx_accepts_flag(--coverage coverage_flags_accepted) if(NOT coverage_flags_accepted) message(FATAL_ERROR "Compiler doesn't accept all required coverage flags") endif(NOT coverage_flags_accepted) find_program(LCOV lcov DOC "Path to lcov, the graphical GCOV front-end") find_program(GCOV gcov DOC "Path to gcov, the GNU coverage testing tool") find_program(GENHTML genhtml DOC "Path to genhtml, which generates a HTML view from LCOV coverage data files") if(${LCOV} STREQUAL LCOV-NOTFOUND OR ${GCOV} STREQUAL GCOV-NOTFOUND OR ${GENHTML} STREQUAL GENHTML-NOTFOUND) set(LCOV_FOUND OFF) else(${LCOV} STREQUAL LCOV-NOTFOUND OR ${GCOV} STREQUAL GCOV-NOTFOUND OR ${GENHTML} STREQUAL GENHTML-NOTFOUND) set(LCOV_FOUND ON) endif(${LCOV} STREQUAL LCOV-NOTFOUND OR ${GCOV} STREQUAL GCOV-NOTFOUND OR ${GENHTML} STREQUAL GENHTML-NOTFOUND) set(LCOV_FLAGS --gcov-tool=${GCOV} CACHE STRING "Flags which get passed to lcov") find_program(GCOVR gcovr DOC "Path to gcovr, which generates Cobertura reports from GCOV") if(${GCOVR} STREQUAL GCOVR-NOTFOUND) set(GCOVR_FOUND OFF) else(${GCOVR} STREQUAL GCOVR-NOTFOUND) set(GCOVR_FOUND ON) endif(${GCOVR} STREQUAL GCOVR-NOTFOUND) endif(CMAKE_BUILD_TYPE_LOWER STREQUAL "coverage") # ============================================================================= # Check supported compiler warnings and enable them # ============================================================================= include(EnableCompilerWarnings) enable_compiler_warnings() # ============================================================================= # Pull GNU standard installation directories # ============================================================================= include(GNUInstallDirs) # ============================================================================= # Permit persistent extension of pkg-config's search path # ============================================================================= set(PKG_CONFIG_PATH "" CACHE STRING "Additional pkg-config search path") if(PKG_CONFIG_PATH) set(ENV{PKG_CONFIG_PATH} "${PKG_CONFIG_PATH}") endif(PKG_CONFIG_PATH) # ============================================================================= # Search required packages via pkg-config # ============================================================================= find_package(PkgConfig REQUIRED) pkg_check_modules(DEPS REQUIRED gio-2.0>=2.18 gio-unix-2.0>=2.18 grilo-0.2>=0.2.1 gstreamer-pbutils-1.0>=0.11.93 gudev-1.0>=175 liblucene++>=3.0.3.4) add_definitions(-DGST_USE_UNSTABLE_API=1) execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} glib-2.0 --variable=glib_mkenums OUTPUT_VARIABLE GLIB_MKENUMS OUTPUT_STRIP_TRAILING_WHITESPACE) set(GLIB_MKENUMS "${GLIB_MKENUMS}" CACHE PATH "Path of the glib-mkenums tool") execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable=glib_compile_schemas OUTPUT_VARIABLE GLIB_COMPILE_SCHEMAS OUTPUT_STRIP_TRAILING_WHITESPACE) set(GLIB_COMPILE_SCHEMAS "${GLIB_COMPILE_SCHEMAS}" CACHE PATH "Path of the glib-compile-schemas tool") execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} gio-2.0 --variable=prefix OUTPUT_VARIABLE GLIB_SCHEMAS_PREFIX OUTPUT_STRIP_TRAILING_WHITESPACE) set(GLIB_SCHEMAS_PREFIX "${GLIB_SCHEMAS_PREFIX}" CACHE PATH "Installation location of glib schemas library") execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} grilo-0.2 --variable=plugindir OUTPUT_VARIABLE GRILO_PLUGIN_DIR_DEF OUTPUT_STRIP_TRAILING_WHITESPACE) set(GRILO_PLUGIN_DIR "${GRILO_PLUGIN_DIR_DEF}" CACHE PATH "Installation location of Grilo plugins") execute_process(COMMAND ${PKG_CONFIG_EXECUTABLE} gudev-1.0 --modversion OUTPUT_VARIABLE GUDEV_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) # ============================================================================= # Validate and install gsettings schema # ============================================================================= option(GLIB_SCHEMAS_COMPILE "Compile GSettings Schemas after installation" ON) configure_file(mediascanner.gschema.xml.in ${MEDIASCANNER_SETTINGS_FILE}) set(GLIB_SCHEMAS_DIR "${GLIB_SCHEMAS_PREFIX}/share/glib-2.0/schemas/" CACHE PATH "Installation location of glib schemas") if(${GLIB_COMPILE_SCHEMAS} STREQUAL GLIB_COMPILE_SCHEMAS-NOTFOUND) message(FATAL_ERROR "Cannot find glib-compile-schemas in path") endif(${GLIB_COMPILE_SCHEMAS} STREQUAL GLIB_COMPILE_SCHEMAS-NOTFOUND) add_custom_command(OUTPUT mediascanner.gschema.valid DEPENDS ${MEDIASCANNER_SETTINGS_FILE} COMMAND ${GLIB_COMPILE_SCHEMAS} --dry-run --strict --schema-file=mediascanner.gschema.xml COMMAND touch mediascanner.gschema.valid) add_custom_target(checksettings ALL DEPENDS mediascanner.gschema.valid) install(FILES ${MEDIASCANNER_SETTINGS_FILE} DESTINATION ${GLIB_SCHEMAS_DIR}) if(GLIB_SCHEMAS_COMPILE) install(CODE "message(STATUS \"Compiling GSettings schemas at \$ENV{DESTDIR}${GLIB_SCHEMAS_DIR}\")") install(CODE "execute_process(COMMAND ${GLIB_COMPILE_SCHEMAS} --strict \$ENV{DESTDIR}${GLIB_SCHEMAS_DIR})") endif(GLIB_SCHEMAS_COMPILE) message(STATUS "Using ${GLIB_COMPILE_SCHEMAS} to compile GSettings schemas") message(STATUS "GSettings schemas will be installed into ${GLIB_SCHEMAS_DIR}") # ============================================================================= # Install Upstart session job # ============================================================================= install( FILES mediascanner.conf DESTINATION ${CMAKE_INSTALL_DATADIR}/upstart/sessions ) # ============================================================================= # Checking for required Boost libraries # ============================================================================= find_package(Boost 1.50 COMPONENTS date_time filesystem locale regex system REQUIRED) # ============================================================================= # Check that Lucene++ has the correct build configuration # ============================================================================= include(CheckLucenePlusPlus) check_lucene_plusplus() # ============================================================================= # Check for Google Tests # ============================================================================= include(FindGoogleTests) find_google_tests() # ============================================================================= # Configure API key for "The Movie Database" API Key # ============================================================================= set(TMDB_APIKEY "" CACHE STRING "API key for \"The Movie Database\"") if (NOT TMDB_APIKEY) message(FATAL_ERROR "No API key for \"The Movie Database\" configured") endif (NOT TMDB_APIKEY) add_definitions(-DTMDB_APIKEY="${TMDB_APIKEY}") # ============================================================================= install(FILES README.md DESTINATION ${CMAKE_INSTALL_DOCDIR}) # ============================================================================= # Include subdirectories # ============================================================================= add_subdirectory(src/mediascanner) add_subdirectory(src/mediascanner-service) add_subdirectory(src/grlmediascanner) add_subdirectory(${GTEST_ROOT_DIR} tests/gtest) add_subdirectory(tests) add_subdirectory(examples) add_subdirectory(docs) # ============================================================================= # Enable quality measures # ============================================================================= enable_testing() add_custom_target(check COMMAND ${CMAKE_BUILD_TOOL} test) add_custom_target(check-headless COMMAND ${CMAKE_BUILD_TOOL} test) add_test(licensecheck ${CMAKE_CURRENT_SOURCE_DIR}/tools/licensecheck.py) set_property(TEST licensecheck PROPERTY WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})