cmake_minimum_required(VERSION 3.4) project(Ocarina) # Various options for users option(CONFIG_DEBUG "Compile with debugging symbols" OFF) option(CONFIG_TESTING_VERBOSE "Enable verbose output when running tests" OFF) option(CONFIG_TESTING_GUI "Enable running GUI tests (requires an X server)" ON) option(CONFIG_TESTING_ARTWORK "Enable album artwork fetching tests" ON) # Configure settings set(CONFIG_MAJOR 6) set(CONFIG_MINOR 5) set(CONFIG_MICRO 10) set(CONFIG_RC ON) set(CONFIG_VERSION "${CONFIG_MAJOR}.${CONFIG_MINOR}.${CONFIG_MICRO}") if (CONFIG_RC) set(CONFIG_VERSION "${CONFIG_VERSION}-rc") endif() set(DEBUG_OPTIONS -Wall -Werror -g -DCONFIG_DEBUG) if (CONFIG_DEBUG) add_definitions(${DEBUG_OPTIONS}) set(CONFIG_VERSION "${CONFIG_VERSION}-debug") endif() find_package(Git) if (GIT_FOUND AND IS_DIRECTORY .git/) configure_file(.git/HEAD .git/HEAD COPYONLY) execute_process(COMMAND ${GIT_EXECUTABLE} describe --abbrev=0 COMMAND xargs ${GIT_EXECUTABLE} diff --quiet RESULT_VARIABLE HAS_CHANGED) if (HAS_CHANGED AND CONFIG_RC) set(CONFIG_VERSION "${CONFIG_VERSION}+") endif() endif() add_definitions(-DCONFIG_VERSION=\"${CONFIG_VERSION}\") add_definitions(-DCONFIG_MAJOR=${CONFIG_MAJOR}) add_definitions(-DCONFIG_MINOR=${CONFIG_MINOR}) find_package(PkgConfig REQUIRED) function(use_module name module) pkg_check_modules(${name} REQUIRED ${module}) include_directories(${${name}_INCLUDE_DIRS}) add_definitions(${${name}_CFLAGS} ${${name}_CFLAGS_OTHERS}) link_libraries(${${name}_LIBRARIES} ${${name}_LDFLAGS}) endfunction() use_module(GTK gtk+-3.0) use_module(GMODULE gmodule-export-2.0) use_module(GST gstreamer-1.0) use_module(TAGLIB taglib_c) use_module(CAA libcoverart) use_module(MB5 libmusicbrainz5) # Tell compiler where to find header and source files include_directories(include) file(GLOB_RECURSE core "core/*.c") file(GLOB_RECURSE gui "gui/*.c") # Configure executable set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin/) add_executable(ocarina ${core} ${gui}) # Configure install targets install(TARGETS ocarina DESTINATION /usr/bin/) install(DIRECTORY share/ DESTINATION /usr/share/) # Configure release target set(CONFIG_RELEASE ocarina-${CONFIG_VERSION}) add_custom_target(release COMMAND git archive -v --prefix=${CONFIG_RELEASE}/ -o ${CONFIG_RELEASE}.tar.gz HEAD) # Set up unit tests set(CMAKE_TEST_COMMAND ctest --output-on-failure) if (CONFIG_TESTING_VERBOSE) set(CMAKE_TEST_COMMAND ctest -V) endif() if (IS_DIRECTORY tests/) enable_testing() add_custom_target(tests COMMAND ${CMAKE_TEST_COMMAND}) add_subdirectory(tests/) endif()