Commit 22c45d29 authored by Adkins, Cameron's avatar Adkins, Cameron
Browse files

hfsm2: init at 2.5.1

parent c195f3b0
Loading
Loading
Loading
Loading
+107 −0
Original line number Diff line number Diff line
diff --git a/CMake/hfsm2Config.cmake.in b/CMake/hfsm2Config.cmake.in
new file mode 100644
index 0000000..9c15f36
--- /dev/null
+++ b/CMake/hfsm2Config.cmake.in
@@ -0,0 +1,4 @@
+@PACKAGE_INIT@
+
+include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
+check_required_components("@PROJECT_NAME@")
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7d951dc..bef5518 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,31 +1,75 @@
 cmake_minimum_required(VERSION 3.5)
 
+project(hfsm2 VERSION 3.5.1 LANGUAGES CXX)
+
+option(HFSM2_ENABLE_TESTS "Enable tests" ON)
+
 find_program(CCACHE_PROGRAM ccache)
 if(CCACHE_PROGRAM)
 	message(STATUS "Found ccache in ${CCACHE_PROGRAM}")
 	set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
 endif()
 
-project(hfsm2_test)
+add_library(${PROJECT_NAME} INTERFACE)
+target_include_directories(
+    ${PROJECT_NAME} INTERFACE
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/include>
+    $<INSTALL_INTERFACE:include>
+)
 
-file(GLOB SOURCE_FILES "test/*.cpp" "test/shared/*.cpp")
-add_executable(${PROJECT_NAME} ${SOURCE_FILES})
+include(CMakePackageConfigHelpers)
+write_basic_package_version_file(
+    "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
+    VERSION ${PROJECT_VERSION}
+    COMPATIBILITY AnyNewerVersion
+)
 
-target_include_directories(${PROJECT_NAME} PRIVATE
-	"${CMAKE_CURRENT_LIST_DIR}/development"
-	"${CMAKE_CURRENT_LIST_DIR}/external"
-	"${CMAKE_CURRENT_LIST_DIR}/include")
+install(
+    TARGETS ${PROJECT_NAME}
+    EXPORT ${PROJECT_NAME}Targets
+)
 
-target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
+configure_package_config_file(
+    "${PROJECT_SOURCE_DIR}/CMake/${PROJECT_NAME}Config.cmake.in"
+    "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+    INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
+)
 
-if(MSVC)
-	target_compile_options(${PROJECT_NAME} PRIVATE /W4 /WX)
-else()
-	target_compile_options(${PROJECT_NAME} PRIVATE -Werror -Wall -Wextra -Wpedantic -Wshadow -Wold-style-cast)
-endif()
+install(
+    EXPORT      ${PROJECT_NAME}Targets
+    DESTINATION lib/cmake/${PROJECT_NAME}
+)
+install(
+    FILES       "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+    DESTINATION lib/cmake/${PROJECT_NAME}
+)
+install(
+    DIRECTORY   "${PROJECT_SOURCE_DIR}/include/"
+    DESTINATION include
+)
+
+if(HFSM2_ENABLE_TESTS)
+    set(TESTS_NAME "hfsm2_tests")
+
+    file(GLOB SOURCE_FILES "test/*.cpp" "test/shared/*.cpp")
+    add_executable(${TESTS_NAME} ${SOURCE_FILES})
 
-add_test(NAME ${PROJECT_NAME} COMMAND ${PROJECT_NAME})
+    target_include_directories(${TESTS_NAME} PRIVATE
+    	"${CMAKE_CURRENT_LIST_DIR}/development"
+    	"${CMAKE_CURRENT_LIST_DIR}/external"
+    	"${CMAKE_CURRENT_LIST_DIR}/include")
 
-add_custom_command(TARGET ${PROJECT_NAME}
-				   POST_BUILD
-				   COMMAND ${PROJECT_NAME})
+    target_compile_features(${TESTS_NAME} PRIVATE cxx_std_11)
+
+    if(MSVC)
+    	target_compile_options(${TESTS_NAME} PRIVATE /W4 /WX)
+    else()
+    	target_compile_options(${TESTS_NAME} PRIVATE -Werror -Wall -Wextra -Wpedantic -Wshadow -Wold-style-cast)
+    endif()
+
+    add_test(NAME ${TESTS_NAME} COMMAND ${TESTS_NAME})
+
+    add_custom_command(TARGET ${TESTS_NAME}
+    				   POST_BUILD
+    				   COMMAND ${TESTS_NAME})
+endif()
+36 −0
Original line number Diff line number Diff line
{
  lib, stdenv, fetchFromGitHub,
  cmake
}:

stdenv.mkDerivation rec {
  pname = "hfsm2";
  version = "2.5.1";

  src = fetchFromGitHub {
    owner = "andrew-gresyk";
    repo = "HFSM2";
    rev = "${version}";
    sha256 = "sha256-aa0VvFFW63Q5Y2AD4qBNrPUBMDwrA7VWPaDz6+5bvn8=";
  };

  patches = [
    ./0001-install.patch
  ];

  nativeBuildInputs = [
    cmake
  ];

  meta = {
    description = "High-Performance Hierarchical Finite State Machine";
    longDescription = ''
       Header-only heriarchical FSM framework in C++11, with fully
       statically-defined structure (no dynamic allocations), built with
       variadic templates. '';
    homepage = "https://github.com/andrew-gresyk/HFSM2";
    license = lib.licenses.mit;
    maintainers = [ lib.maintainers.cadkin ];
    platforms = lib.platforms.all;
  };
}