From: Bernd Waibel <waebbl-gentoo@posteo.net>
Date: Wed, 25 Aug 2021 09:29:17 +0200
Subject: [PATCH] use system provided act binary

Signed-off-by: Bernd Waibel <waebbl-gentoo@posteo.net>
---
 CMakeLists.txt | 110 ++++++++++++++++++++++++++++++++-----------------
 1 file changed, 73 insertions(+), 37 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index d70a030..9c91496 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -62,14 +62,19 @@ endif()
 
 
 ### The API generation target
-if(CMAKE_HOST_UNIX)
-  if(APPLE)
-    set(ACT_COMMANDENDING darwin)
-  else()
-    set(ACT_COMMANDENDING linux)
+option(USE_SYSTEM_ACT "Use system provided act binary" OFF)
+if(NOT USE_SYSTEM_ACT)
+  if(CMAKE_HOST_UNIX)
+    if(APPLE)
+      set(ACT_COMMANDENDING darwin)
+    else()
+      set(ACT_COMMANDENDING linux)
+    endif()
+  elseif(CMAKE_HOST_WIN32)
+    set(ACT_COMMANDENDING exe)
   endif()
-elseif(CMAKE_HOST_WIN32)
-  set(ACT_COMMANDENDING exe)
+else()
+  find_program(ACT act)
 endif()
 
 set(CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED ${CMAKE_CURRENT_SOURCE_DIR}/Autogenerated)
@@ -80,36 +85,67 @@ set(ACT_GENERATED_SOURCE
   ${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source/lib3mf_interfacewrapper.cpp
   ${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source/lib3mf_interfacejournal.cpp
 )
-add_custom_command(
-  BYPRODUCTS
-    ${ACT_GENERATED_SOURCE}
-  OUTPUT
-    ${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP
-  WORKING_DIRECTORY
-    ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit
-  COMMAND
-    cmake -E make_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}"
-  COMMAND
-    cmake -E touch "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP"
-  COMMAND
-    ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/bin/act.${ACT_COMMANDENDING} ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
-  COMMAND
-    cmake -E remove_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source"
-  COMMAND
-    cmake -E remove_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Bindings"
-  COMMAND
-    cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Bindings" ${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Bindings
-  COMMAND
-    cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Implementations/Cpp/Interfaces" "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source/"
-  COMMAND
-    cmake -E remove_directory "${CMAKE_TEMP_HEADER_FOLDER}"
-  COMMENT
-    "Generating hourglass API bindings and implementation stub"
-  DEPENDS
-    ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
-  VERBATIM
-)
-
+if(NOT USE_SYSTEM_ACT)
+  add_custom_command(
+    BYPRODUCTS
+      ${ACT_GENERATED_SOURCE}
+    OUTPUT
+      ${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP
+    WORKING_DIRECTORY
+      ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit
+    COMMAND
+      cmake -E make_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}"
+    COMMAND
+      cmake -E touch "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP"
+    COMMAND
+      ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/bin/act.${ACT_COMMANDENDING} ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
+    COMMAND
+      cmake -E remove_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source"
+    COMMAND
+      cmake -E remove_directory "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Bindings"
+    COMMAND
+      cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Bindings" ${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Bindings
+    COMMAND
+      cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Implementations/Cpp/Interfaces" "${CMAKE_CURRENT_SOURCE_DIR_AUTOGENERATED}/Source/"
+    COMMAND
+      cmake -E remove_directory "${CMAKE_TEMP_HEADER_FOLDER}"
+    COMMENT
+      "Generating hourglass API bindings and implementation stub"
+    DEPENDS
+      ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
+    VERBATIM
+  )
+else()
+  add_custom_command(
+    BYPRODUCTS
+      ${ACT_GENERATED_SOURCE}
+    OUTPUT
+      ${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP
+    WORKING_DIRECTORY
+      ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit
+    COMMAND
+      cmake -E make_directory "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}"
+    COMMAND
+      cmake -E touch "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP"
+    COMMAND
+      ${ACT} ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
+    COMMAND
+      cmake -E remove_directory "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/Source"
+    COMMAND
+      cmake -E remove_directory "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/Bindings"
+    COMMAND
+      cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Bindings" ${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/Bindings
+    COMMAND
+      cmake -E copy_directory "${CMAKE_TEMP_HEADER_FOLDER}/Implementations/Cpp/Interfaces" "${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/Source/"
+    COMMAND
+      cmake -E remove_directory "${CMAKE_TEMP_HEADER_FOLDER}"
+    COMMENT
+      "Generating hourglass API bindings and implementation stub"
+    DEPENDS
+      ${CMAKE_CURRENT_SOURCE_DIR}/AutomaticComponentToolkit/lib3mf.xml
+    VERBATIM
+  )
+endif()
 add_custom_target(lib3mfACT
   DEPENDS
     ${CMAKE_CURRENT_BINARY_DIR_AUTOGENERATED}/LIB3MFACTGENERATIONSTAMP
-- 
2.32.0