cmake_minimum_required(VERSION 3.16) project(montis LANGUAGES C) add_custom_target(wlroots_build ALL DEPENDS "${WLROOTS_LIB_LINK}") add_subdirectory(rt) add_dependencies(montis wlroots_build) add_custom_target( plug_build ALL COMMAND sh -c "if [ -d \"$1\" ] && [ ! -L \"$1\" ]; then rm -rf \"$2\"; mv \"$1\" \"$2\"; fi" sh "${CMAKE_SOURCE_DIR}/plug/.stack-work" "${CMAKE_BINARY_DIR}/stack-work" COMMAND "${CMAKE_COMMAND}" -E make_directory "${CMAKE_BINARY_DIR}/stack-work" COMMAND "${CMAKE_COMMAND}" -E create_symlink "${CMAKE_BINARY_DIR}/stack-work" "${CMAKE_SOURCE_DIR}/plug/.stack-work" COMMAND "${CMAKE_COMMAND}" -E chdir "${CMAKE_SOURCE_DIR}/plug" stack build # Not sure why stack is generating an a.out file, but remove it. COMMAND "${CMAKE_COMMAND}" -E rm -f "${CMAKE_SOURCE_DIR}/plug/a.out" DEPENDS montis COMMENT "Building Haskell plugin with Stack" VERBATIM ) install(TARGETS montis RUNTIME DESTINATION bin) install(CODE [[ execute_process( COMMAND sh -c "find '${CMAKE_BINARY_DIR}/stack-work' -name montis.so -type f | head -n 1" OUTPUT_VARIABLE _montis_so OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT _montis_so) message(FATAL_ERROR "montis.so not found in ${CMAKE_BINARY_DIR}/stack-work") endif() file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE FILE FILES "${_montis_so}") ]])