123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- # libclipboard cmake configuration file
- cmake_minimum_required(VERSION 2.8)
- project(libclipboard)
- # Defines and options
- set(LIBCLIPBOARD_VERSION_MAJOR 1 CACHE STRING "libclipboard major version number")
- set(LIBCLIPBOARD_VERSION_MINOR 0 CACHE STRING "libclipboard minor version number")
- set(LIBCLIPBOARD_VERSION "${LIBCLIPBOARD_VERSION_MAJOR}.${LIBCLIPBOARD_VERSION_MINOR}" CACHE STRING "libclipboard version number")
- option(LIBCLIPBOARD_FORCE_WIN32 "Force building the Win32 backend (default:off)" OFF)
- option(LIBCLIPBOARD_FORCE_X11 "Force building the X11 backend (default:off)" OFF)
- option(LIBCLIPBOARD_FORCE_COCOA "Force building the Cocoa backend(default:off)" OFF)
- option(LIBCLIPBOARD_ADD_SOVERSION "Add soname versions to the built library (default:off)" OFF)
- option(LIBCLIPBOARD_USE_STDCALL "Use the stdcall calling convention (default:off)" OFF)
- option(BUILD_SHARED_LIBS "Build shared libraries instead of static libraries" OFF)
- set(LIBCLIPBOARD_BUILD_SHARED ${BUILD_SHARED_LIBS})
- # Sigh... gtest quirks workarounds
- if (MINGW)
- option(gtest_disable_pthreads "Disable gtest pthreads (default:on)" ON)
- elseif(MSVC)
- option(gtest_force_shared_crt "Always use dynamic runtime library (default:on)" ON)
- endif()
- # Check supplied options make sense
- if ((WIN32 OR CYGWIN OR LIBCLIPBOARD_FORCE_WIN32) AND NOT (LIBCLIPBOARD_FORCE_X11 OR LIBCLIPBOARD_FORCE_COCOA))
- set(LIBCLIPBOARD_BUILD_WIN32 TRUE)
- endif()
- if (((UNIX AND NOT APPLE) OR LIBCLIPBOARD_FORCE_X11) AND NOT (LIBCLIPBOARD_FORCE_WIN32 OR LIBCLIPBOARD_FORCE_COCOA))
- set(LIBCLIPBOARD_BUILD_X11 TRUE)
- endif()
- if ((APPLE OR LIBCLIPBOARD_FORCE_COCOA) AND NOT (LIBCLIPBOARD_FORCE_WIN32 OR LIBCLIPBOARD_FORCE_X11))
- set(LIBCLIPBOARD_BUILD_COCOA TRUE)
- endif()
- if (NOT (LIBCLIPBOARD_BUILD_WIN32 OR LIBCLIPBOARD_BUILD_X11 OR LIBCLIPBOARD_BUILD_COCOA))
- message(FATAL_ERROR "Invalid build options. Can only specify one backend to be built.")
- endif()
- # Set compiler flags
- if (CMAKE_COMPILER_IS_GNUCC OR LIBCLIPBOARD_BUILD_COCOA)
- set(GCC_COMPILE_FLAGS "-std=c99 -Wall -pedantic -g")
- execute_process(COMMAND ${CMAKE_C_COMPILER} -dumpversion
- OUTPUT_VARIABLE GCC_VERSION)
- if (GCC_VERSION VERSION_GREATER 4.9 OR GCC_VERSION VERSION_EQUAL 4.9)
- set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -fdiagnostics-color=auto")
- endif()
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}")
- endif()
- if (CMAKE_COMPILER_IS_GNUCXX OR LIBCLIPBOARD_BUILD_COCOA)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -pedantic -g")
- endif()
- # Dependencies
- if (LIBCLIPBOARD_BUILD_COCOA)
- set_source_files_properties(src/clipboard_cocoa.c PROPERTIES COMPILE_FLAGS "-x objective-c")
- set(LIBCLIPBOARD_PRIVATE_LIBS ${LIBCLIPBOARD_PRIVATE_LIBS} "-framework Cocoa")
- elseif(LIBCLIPBOARD_BUILD_X11)
- include(FindPkgConfig REQUIRED)
- pkg_check_modules(X11 xcb REQUIRED)
- find_package(Threads REQUIRED)
- include_directories(${X11_INCLUDE_DIRS})
- link_directories(${X11_LIBRARY_DIRS})
- set(LIBCLIPBOARD_PRIVATE_LIBS ${LIBCLIPBOARD_PRIVATE_LIBS} ${X11_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
- endif()
- # Include directories
- include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include")
- include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
- # Configure header
- configure_file("include/libclipboard-config.h.in" "include/libclipboard-config.h")
- # Source files
- set(HEADERS
- include/libclipboard.h
- ${CMAKE_CURRENT_BINARY_DIR}/include/libclipboard-config.h
- )
- set(SOURCE
- src/clipboard_win32.c
- src/clipboard_x11.c
- src/clipboard_cocoa.c
- src/clipboard_common.c
- )
- # Set the output folders
- set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
- set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
- set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
- # Make the library
- add_library(clipboard ${HEADERS} ${SOURCE})
- target_link_libraries(clipboard LINK_PRIVATE ${LIBCLIPBOARD_PRIVATE_LIBS})
- if (LIBCLIPBOARD_ADD_SOVERSION)
- # Not by default because my file system doesn't support symlinks
- set_target_properties(clipboard PROPERTIES SOVERSION ${LIBCLIPBOARD_VERSION} VERSION ${LIBCLIPBOARD_VERSION})
- endif()
- # Testing mode?
- if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest/googletest)
- # gtest does not play well with pthreads and mingw
- if (gtest_disable_pthreads)
- set(LIBCLIPBOARD_USE_PTHREADS_INIT ${CMAKE_USE_PTHREADS_INIT})
- unset(CMAKE_USE_PTHREADS_INIT)
- endif()
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/third_party/googletest EXCLUDE_FROM_ALL)
- enable_testing()
- include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/test)
- set(CMAKE_USE_PTHREADS_INIT ${LIBCLIPBOARD_USE_PTHREADS_INIT})
- else()
- endif()
- # Build sample executables
- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/samples)
- # Pkgconfig
- include(FindPkgConfig QUIET)
- if (PKGCONFIG_FOUND)
- string(REPLACE "-l" "" LIBCLIPBOARD_PRIVATE_LIBS_LIST "${LIBCLIPBOARD_PRIVATE_LIBS}")
- string(REPLACE ";" " -l" LIBCLIPBOARD_PRIVATE_LIBS_LIST "${LIBCLIPBOARD_PRIVATE_LIBS_LIST}")
- string(STRIP "${LIBCLIPBOARD_PRIVATE_LIBS_LIST}" LIBCLIPBOARD_PRIVATE_LIBS_LIST)
- configure_file("libclipboard.pc.in" "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/pkgconfig/libclipboard.pc" @ONLY)
- install(FILES "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}/pkgconfig/libclipboard.pc" DESTINATION "lib/pkgconfig")
- endif()
- # Install options
- install(TARGETS clipboard
- RUNTIME DESTINATION bin
- LIBRARY DESTINATION lib
- ARCHIVE DESTINATION lib)
- install(FILES ${HEADERS} DESTINATION include)
- # Uninstall target
- configure_file(
- "${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in"
- "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
- IMMEDIATE @ONLY)
- add_custom_target(uninstall
- COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake)
|