Commit e193510e authored by Guillaume Pasero's avatar Guillaume Pasero

CI: script to setup a namespace for OTB imported targets

parent 3e7f5be3
Pipeline #2499 passed with stages
in 73 minutes and 54 seconds
#
# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
#
# This file is part of Orfeo Toolbox
#
# https://www.orfeo-toolbox.org/
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# replace target name on one line
macro(ns_filter_line)
foreach(_t_name ${_t_list})
string(REPLACE "${_t_prefix}${_t_name}${_t_suffix}" "${_t_prefix}${REPLACEMENT_${_t_name}}${_t_suffix}" _filtered_line "${_filtered_line}")
endforeach()
endmacro()
# This function sets the namespace for all targets in the CMake files installed
# by OTB
function(otb_set_namespace folder ns)
set(_t_regex "add_(library|executable) *\\( *([a-zA-Z0-9_:-]+) (.* )?IMPORTED( |\\)).*")
if(EXISTS "${folder}/OTBTargets.cmake")
# list targets
file(STRINGS "${folder}/OTBTargets.cmake" _t_content REGEX "${_t_regex}")
set(_t_list)
foreach(_line ${_t_content})
string(REGEX REPLACE "${_t_regex}" "\\2" _t_name "${_line}")
list(APPEND _t_list "${_t_name}")
set(_t_real_name "${_t_name}")
set(_old_ns_regex "([a-zA-Z0-9_-]+)::([a-zA-Z0-9_-]+)")
if(_t_name MATCHES "${_old_ns_regex}")
string(REGEX REPLACE "${_old_ns_regex}" "\\2" _t_real_name "${_t_name}")
endif()
if(ns)
set(REPLACEMENT_${_t_name} "${ns}::${_t_real_name}")
else()
set(REPLACEMENT_${_t_name} "${_t_real_name}")
endif()
endforeach()
# list files to patch
set(_files_to_process "${folder}/OTBTargets.cmake")
file(GLOB _other_targets "${folder}/OTBTargets-*.cmake")
list(APPEND _files_to_process ${_other_targets})
file(GLOB _module_files "${folder}/Modules/*.cmake")
list(APPEND _files_to_process ${_module_files})
# patch each file
foreach(_file_path ${_files_to_process})
file(STRINGS "${_file_path}" _file_content NEWLINE_CONSUME)
string(REGEX REPLACE "\n" "\n;" _file_content "${_file_content}")
set(_file_filtered_content)
foreach(_line ${_file_content})
set(_filtered_line "${_line}")
if(_filtered_line MATCHES "(add_library|add_executable|set_target_properties)")
set(_t_prefix "(")
set(_t_suffix " ")
ns_filter_line()
elseif(_filtered_line MATCHES "(set_property|APPEND _IMPORT_CHECK_TARGETS)")
set(_t_prefix " ")
set(_t_suffix " ")
ns_filter_line()
elseif(_filtered_line MATCHES "_LIBRARIES")
set(_t_prefix " ")
set(_t_suffix " ")
string(REPLACE ";" " ; " _filtered_line "${_filtered_line}")
string(REPLACE "\"" " \" " _filtered_line "${_filtered_line}")
ns_filter_line()
string(REPLACE " ; " ";" _filtered_line "${_filtered_line}")
string(REPLACE " \" " "\"" _filtered_line "${_filtered_line}")
elseif(_filtered_line MATCHES "APPEND _IMPORT_CHECK_FILES_FOR_")
set(_t_prefix "_")
set(_t_suffix " ")
ns_filter_line()
elseif(_filtered_line MATCHES "foreach\\(_expectedTarget ")
set(_t_prefix " ")
set(_t_suffix " ")
string(REPLACE ")" " )" _filtered_line "${_filtered_line}")
ns_filter_line()
string(REPLACE " )" ")" _filtered_line "${_filtered_line}")
endif()
list(APPEND _file_filtered_content ${_filtered_line})
endforeach()
string(REGEX REPLACE "\n;" "\n" _file_filtered_content "${_file_filtered_content}")
file(WRITE "${_file_path}" "${_file_filtered_content}")
endforeach()
else()
message(WARNING "No OTBTargets.cmake found in folder : ${folder}")
endif()
endfunction()
if(DEFINED NAMESPACE)
set(CTEST_SOURCE_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
set(CTEST_BINARY_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}")
set(CTEST_COMMAND ctest)
message("Set target namespace to \"${NAMESPACE}\"")
otb_set_namespace( "${CMAKE_CURRENT_LIST_DIR}" "${NAMESPACE}")
endif()
...@@ -403,6 +403,7 @@ install(FILES ${OTB_BINARY_DIR}/CMakeFiles/OTBConfig.cmake ...@@ -403,6 +403,7 @@ install(FILES ${OTB_BINARY_DIR}/CMakeFiles/OTBConfig.cmake
CMake/UseOTB.cmake CMake/UseOTB.cmake
CMake/GenerateExportHeaderCustom.cmake CMake/GenerateExportHeaderCustom.cmake
CMake/exportheader.cmake.in CMake/exportheader.cmake.in
CMake/NamespaceHandler.cmake
DESTINATION ${OTB_INSTALL_PACKAGE_DIR} DESTINATION ${OTB_INSTALL_PACKAGE_DIR}
COMPONENT Development) COMPONENT Development)
get_property(OTBTargets_MODULES GLOBAL PROPERTY OTBTargets_MODULES) get_property(OTBTargets_MODULES GLOBAL PROPERTY OTBTargets_MODULES)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment