summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ErlangTarget.cmake35
-rw-r--r--FindErlang.cmake6
2 files changed, 41 insertions, 0 deletions
diff --git a/ErlangTarget.cmake b/ErlangTarget.cmake
new file mode 100644
index 0000000..2afbc7a
--- /dev/null
+++ b/ErlangTarget.cmake
@@ -0,0 +1,35 @@
+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})
+
+ foreach(src ${ARGS_DEFAULT_ARGS})
+ 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}
+ ${ARGS_OPTIONS}
+ ${in_file}
+ DEPENDS
+ ${in_file}
+ ${headers}
+ )
+
+ list(APPEND out_files "${CMAKE_CURRENT_BINARY_DIR}/${src}")
+ endforeach(src ${ARGS_DEFAULT_ARGS})
+
+ add_custom_target(
+ ${name} ALL DEPENDS ${out_files}
+ )
+endmacro(erl_target)
diff --git a/FindErlang.cmake b/FindErlang.cmake
new file mode 100644
index 0000000..e7cb60f
--- /dev/null
+++ b/FindErlang.cmake
@@ -0,0 +1,6 @@
+find_program(ERLC_EXECUTABLE NAMES erlc)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Erlang DEFAULT_MSG ERLC_EXECUTABLE)
+mark_as_advanced(ERLC_EXECUTABLE)
+