summaryrefslogtreecommitdiffstats
path: root/ErlangTarget.cmake
blob: 5562d86f9c597decbcd9fa1600f13596184cfac1 (plain)
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
36
37
38
39
40
41
42
43
44
45
find_package(Erlang REQUIRED)

macro(erl_target name)
  parse_arguments(ARGS "HEADERS;OPTIONS" "" ${ARGN})

  set(headers "")
  set(out_files "")

  foreach(header ${ARGS_HEADERS})
    list(APPEND headers "${CMAKE_CURRENT_SOURCE_DIR}/${header}")
  endforeach(header ${ARGS_HEADERS})

  set(before "")

  foreach(src ${ARGS_DEFAULT_ARGS})
    if(src STREQUAL "BEFORE")
      set(before ${out_files})
    else(src STREQUAL "BEFORE")
      set(in_file "${CMAKE_CURRENT_SOURCE_DIR}/${src}")
      string(REPLACE ".erl" ".beam" src ${src})
      set(out_file "${CMAKE_CURRENT_BINARY_DIR}/${src}")

      add_custom_command(
	OUTPUT
          ${out_file}
	COMMAND
          ${ERLC_EXECUTABLE}
          "-o" ${CMAKE_CURRENT_BINARY_DIR}
	  "-pz" ${CMAKE_CURRENT_BINARY_DIR}
          ${ARGS_OPTIONS}
          ${in_file}
	DEPENDS
          ${in_file}
          ${headers}
	  ${before}
	)

      list(APPEND out_files "${CMAKE_CURRENT_BINARY_DIR}/${src}")
    endif(src STREQUAL "BEFORE")
  endforeach(src ${ARGS_DEFAULT_ARGS})

  add_custom_target(
    ${name} ALL DEPENDS ${out_files}
  )
endmacro(erl_target)