cmake_minimum_required(VERSION 3.7.2) project(cellar CXX) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # local cmake modules set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules) # for installation rules, from CMake wiki SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib/cellar") # add the automatically determined parts of the RPATH # which point to directories outside the build tree to the install RPATH SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) find_package(PythonInterp) find_package(PythonModule) find_python_module(cogapp REQUIRED) find_package(Boost 1.63 REQUIRED COMPONENTS filesystem) find_package(PkgConfig) pkg_check_modules(TCLAP "tclap >= 1.2.1") if(NOT TCLAP_FOUND) MESSAGE(WARNING "TCLAP is required by this project, but was not found by CMake. Continuing on the assumption that you've downloaded it from http://tclap.sourceforge.net and put the headers in ./include (wink, nudge)") endif(NOT TCLAP_FOUND) include_directories(include) set(src "${CMAKE_SOURCE_DIR}/src") set(coggedfiles) file(GLOB_RECURSE cogfiles RELATIVE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/*.cog") foreach(cogfile ${cogfiles}) string(REGEX REPLACE ".cog\$" "" outfile "${cogfile}") set(thisfile "${CMAKE_SOURCE_DIR}/${outfile}") add_custom_command(OUTPUT "${thisfile}" PRE_BUILD COMMAND ${PYTHON_EXECUTABLE} -m cogapp -d -o "${outfile}" "${cogfile}" DEPENDS ${cogfile} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} COMMENT "Greasing the cog for ${thisfile}") set(coggedfiles ${coggedfiles} "${thisfile}") endforeach(cogfile) add_library(bottles SHARED ${src}/bottles/bottles.cpp ${src}/bottles/active.cpp ${src}/bottles/commands.cpp ${src}/bottles/activate.cpp) add_dependencies(bottles cog) add_library(launch SHARED ${src}/launch/launch.cpp ${src}/launch/commands.cpp ${src}/launch/shortcuts.cpp) add_custom_target(cog ALL DEPENDS ${coggedfiles}) add_executable(cellar ${src}/cellar.cpp ${src}/commands.cpp ${src}/fs.cpp ${src}/version.cpp ${src}/output.cpp) target_link_libraries(cellar ${Boost_LIBRARIES} bottles launch) install(TARGETS cellar bottles RUNTIME DESTINATION bin LIBRARY DESTINATION lib/cellar ARCHIVE DESTINATION share/cellar)