CMakeLists.txt 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. cmake_minimum_required(VERSION 2.6)
  2. project (ympd C)
  3. set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/")
  4. set(CPACK_PACKAGE_VERSION_MAJOR "1")
  5. set(CPACK_PACKAGE_VERSION_MINOR "2")
  6. set(CPACK_PACKAGE_VERSION_PATCH "3")
  7. if(CMAKE_BUILD_TYPE MATCHES RELEASE)
  8. set(ASSETS_PATH "${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}/htdocs")
  9. else()
  10. set(ASSETS_PATH "${PROJECT_SOURCE_DIR}/htdocs")
  11. endif()
  12. option(WITH_MPD_HOST_CHANGE "Let users of the web frontend change the MPD Host" ON)
  13. option(WITH_DYNAMIC_ASSETS "Serve assets dynamically (e.g for development/packaging)" OFF)
  14. option(WITH_IPV6 "enable IPv6 support" ON)
  15. option(WITH_SSL "enable SSL support" ON)
  16. find_package(LibMPDClient REQUIRED)
  17. find_package(Threads REQUIRED)
  18. configure_file(src/config.h.in ${PROJECT_BINARY_DIR}/config.h)
  19. include_directories(${PROJECT_BINARY_DIR} ${PROJECT_SOURCE_DIR} ${LIBMPDCLIENT_INCLUDE_DIR})
  20. include(CheckCSourceCompiles)
  21. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wall")
  22. set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -ggdb -pedantic")
  23. if(WITH_IPV6)
  24. set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS NS_ENABLE_IPV6)
  25. endif()
  26. if(WITH_SSL)
  27. find_package(OpenSSL REQUIRED)
  28. include_directories(${OPENSSL_INCLUDE_DIR})
  29. # list(APPEND LIB_LIST ${OPENSSL_LIBRARIES})
  30. set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS NS_ENABLE_SSL)
  31. endif()
  32. file(GLOB RESOURCES
  33. RELATIVE ${PROJECT_SOURCE_DIR}
  34. htdocs/js/*
  35. htdocs/assets/*
  36. htdocs/css/*.css
  37. htdocs/fonts/*
  38. htdocs/index.html
  39. )
  40. set(SOURCES
  41. src/ympd.c
  42. src/mpd_client.c
  43. src/mongoose.c
  44. src/json_encode.c
  45. )
  46. if(NOT WITH_DYNAMIC_ASSETS)
  47. if(CMAKE_CROSSCOMPILING)
  48. set(MKDATA_EXE ${PROJECT_SOURCE_DIR}/tools/mkdata.pl)
  49. else()
  50. set(MKDATA_EXE $<TARGET_FILE:mkdata>)
  51. set(MKDATA_TARGET mkdata)
  52. add_executable(mkdata tools/mkdata.c)
  53. endif()
  54. add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/assets.c
  55. COMMAND ${MKDATA_EXE} ${RESOURCES} > ${PROJECT_BINARY_DIR}/assets.c
  56. WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
  57. DEPENDS ${RESOURCES} ${MKDATA_TARGET}
  58. )
  59. list(APPEND SOURCES src/http_server.c assets.c)
  60. endif()
  61. add_executable(ympd ${SOURCES})
  62. target_link_libraries(ympd ${LIBMPDCLIENT_LIBRARY} ${CMAKE_THREAD_LIBS_INIT} ${OPENSSL_LIBRARIES})
  63. install(TARGETS ympd DESTINATION bin)
  64. install(FILES ympd.1 DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)
  65. if(WITH_DYNAMIC_ASSETS)
  66. install(DIRECTORY htdocs DESTINATION share/${PROJECT_NAME})
  67. endif()