aboutsummaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 848c090b08d7552dafb77f14350bd42958b47b37 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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}")
]])