diff --git a/CMakeLists.txt b/CMakeLists.txt index 397ef55..019a020 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,41 @@ if (WIN32) endif() endif() +set(INSTALL_CMAKE_DIR share/EIPScanner/cmake CACHE PATH + "Installation directory for CMake files") +# ... for the build tree +set(INSTALL_INCLUDE_DIR include/EIPScanner CACHE PATH + "Installation directory for header files") +# ... for the build tree +set(INSTALL_LIB_DIR lib CACHE PATH + "Installation directory for header files") +# Make relative paths absolute (needed later on) +# foreach(p LIB BIN INCLUDE CMAKE) +foreach(p LIB INCLUDE CMAKE) + set(var INSTALL_${p}_DIR) + if(NOT IS_ABSOLUTE "${${var}}") + set(${var} "${CMAKE_INSTALL_PREFIX}/${${var}}") + endif() +endforeach() + +file(RELATIVE_PATH REL_INCLUDE_DIR "${INSTALL_CMAKE_DIR}" + "${INSTALL_INCLUDE_DIR}") +set(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}") +configure_file(EIPScannerConfig.cmake.in + "${PROJECT_BINARY_DIR}/EIPScannerConfig.cmake" @ONLY) +# ... for the install tree +set(CONF_INCLUDE_DIRS "\${EIPScanner_CMAKE_DIR}/${REL_INCLUDE_DIR}") +configure_file(EIPScannerConfig.cmake.in + "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/EIPScannerConfig.cmake" @ONLY) +# ... for both +configure_file(EIPScannerConfigVersion.cmake.in + "${PROJECT_BINARY_DIR}/EIPScannerConfigVersion.cmake" @ONLY) +# Install the EIPScannerConfig.cmake and EIPScannerConfigVersion.cmake +install(FILES + "${PROJECT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/EIPScannerConfig.cmake" + "${PROJECT_BINARY_DIR}/EIPScannerConfigVersion.cmake" + DESTINATION "${INSTALL_CMAKE_DIR}" COMPONENT dev) + add_subdirectory(src) if (EXAMPLE_ENABLED) add_subdirectory(examples) @@ -31,3 +66,6 @@ if (TEST_ENABLED) add_subdirectory(test) endif() +include(GNUInstallDirs) +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/package.xml + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}) diff --git a/EIPScannerConfig.cmake.in b/EIPScannerConfig.cmake.in new file mode 100644 index 0000000..306c847 --- /dev/null +++ b/EIPScannerConfig.cmake.in @@ -0,0 +1,36 @@ +# - Config file for the EIPScanner package +# It defines the following variables +# EIPScanner_INCLUDE_DIRS - include directories for EIPScanner +# EIPscanner_LIBRARIES - libraries to link against +# EIPScanner_EXECUTABLE - the executable + +# Compute paths +get_filename_component(EIPScanner_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH) + +set(_include_directories "@CONF_INCLUDE_DIRS@") +if(NOT _include_directories STREQUAL "") + foreach(_include_dir ${_include_directories}) + if(NOT IS_DIRECTORY "${_include_dir}") + message(WARNING "Package '@PROJECT_NAME@' exports the + include directory '${_include_dir}' which doesn't exist") + endif() + list(APPEND @PROJECT_NAME@_INCLUDE_DIRS "${_include_dir}") + endforeach() +endif() + +# Our library dependencies (contains definitions for IMPORTED targets) +# include("${EIPSCANNER_CMAKE_DIR}/EIPScannerTargets.cmake") + +# These are IMPORTED targets created by FooBarTargets.cmake +set(EIPScanner_LIBRARIES EIPScanner) + +set(_lib_dirs "@INSTALL_LIB_DIR@") +if(NOT _lib_dirs STREQUAL "") + foreach(_lib_dir ${_lib_dirs}) + if(NOT IS_DIRECTORY "${_lib_dir}") + message(WARNING "Package '@PROJECT_NAME@' exports the + include directory '${_lib_dir}' which doesn't exist") + endif() + list(APPEND @PROJECT_NAME@_LIBRARY_DIRS "${_lib_dir}") + endforeach() +endif() diff --git a/EIPScannerConfigVersion.cmake.in b/EIPScannerConfigVersion.cmake.in new file mode 100644 index 0000000..7d0e6ba --- /dev/null +++ b/EIPScannerConfigVersion.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION "@EIPSCANNER_FULL_VERSION@") + +# Check whether the requested PACKAGE_FIND_VERSION is compatible +if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_COMPATIBLE FALSE) +else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}") + set(PACKAGE_VERSION_EXACT TRUE) + endif() +endif() + + diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..a938f33 --- /dev/null +++ b/package.xml @@ -0,0 +1,22 @@ + + + + + + + EIPScanner + 1.3.0 + + Free implementation of EtherNet/IP in C++ + + + Aleksey Timin + + MIT + + cmake + + + cmake + + \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6a58194..2e0dfe4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,10 +66,10 @@ set_target_properties( install(TARGETS EIPScanner EIPScannerS LIBRARY - DESTINATION lib + DESTINATION "${INSTALL_LIB_DIR}" ARCHIVE - DESTINATION lib) + DESTINATION "${INSTALL_LIB_DIR}") -install(DIRECTORY ${PROJECT_SOURCE_DIR}/src/ - DESTINATION include/EIPScanner +install(DIRECTORY "${PROJECT_SOURCE_DIR}/src/" + DESTINATION "${INSTALL_INCLUDE_DIR}" FILES_MATCHING PATTERN "*.h*")