An error occurred while loading the file. Please try again.
-
Le Roux Erwan authoredc44d5441
#
# 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.
#
function(detect_using_file_command input_file result_type result_dir)
execute_process(COMMAND "${FILE_COMMAND}" "${input_file}"
RESULT_VARIABLE file_rv
OUTPUT_VARIABLE file_ov
ERROR_VARIABLE file_ev
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT file_rv STREQUAL "0")
message(FATAL_ERROR "${FILE_COMMAND} failed: ${file_rv}\n${file_ev}\n${file_ov}")
endif()
# message( "file_ov: '${file_ov}'" )
get_filename_component(input_file_NAME ${input_file} NAME)
string(REPLACE "${input_file}" " _file_full_ " file_ov "${file_ov}")
string(TOLOWER "${file_ov}" file_ov_lower)
# message( "input_file: '${input_file}'" )
# message( "input_file_NAME: '${input_file_NAME}'" )
# message( "file_ov: '${file_ov}'" )
# message( "file_ov_lower: '${file_ov_lower}'" )
set(detected_type)
set(detected_dir)
# below executable check works for both mac osx and linux
if("${file_ov_lower}" MATCHES "executable")
set(detected_type PROGRAMS)
set(detected_dir bin)
# detect position independent executables on Linux,
# where "file" gives "dynamically linked (uses shared libraries)"
elseif("${file_ov_lower}" MATCHES "dynamically linked.*\(uses shared libs\)")
set(detected_type FILES)
set(detected_dir lib)
# detect position independent executables on Linux,
# where "file" gives "shared object ... (uses shared libraries)"
elseif("${file_ov_lower}" MATCHES "shared object.*\(uses shared libs\)")
set(detected_type FILES)
set(detected_dir lib)
# detect shared libraries on Linux,
# where "file" gives "ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped"
elseif("${file_ov_lower}" MATCHES "elf.*shared object.*version")
set(detected_type FILES)
set(detected_dir lib)
# "file" version 5.22 does not print "(used shared libraries)"
# but uses "interpreter"
elseif("${file_ov_lower}" MATCHES "shared object.*interpreter")
set(detected_type FILES)
set(detected_dir lib)
# detect shared libraries on Mac OSX
# where "file" gives "Mach-O 64-bit x86_64 dynamically linked shared library"
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
elseif("${file_ov_lower}" MATCHES "mach-o.*dynamically linked shared library")
set(detected_type FILES)
set(detected_dir lib)
#below check is redundant. detect executables on Mac OSX
# where "file" gives "Mach-O 64-bit x86_64 executable"
elseif("${file_ov_lower}" MATCHES "mach-o.*executable")
set(detected_type PROGRAMS)
set(detected_dir bin)
# detect shared libraries on Mac OSX
# where "file" gives "Mach-O 64-bit x86_64 bundle"
elseif("${file_ov_lower}" MATCHES "mach-o.*bundle")
set(detected_type FILES)
set(detected_dir lib)
elseif("${file_ov_lower}" MATCHES "mach-o.*bundle")
set(detected_type FILES)
set(detected_dir lib)
elseif("${file_ov_lower}" MATCHES "symbolic link")
#this will do a symlink check again using but that's okay!
#set type to symlink we are going to resolve it anyway
set(detected_type "symlink")
set(is_this_a_symbolic_link FALSE)
set(target_file)
isfile_symlink("${input_file}" is_this_a_symbolic_link target_file)
if(is_this_a_symbolic_link)
if(target_file)
set(libdir "lib")
setif_value_in_list(is_gtk_lib "${input_file_NAME}" GTK_LIB_LIST_1)
if(is_gtk_lib)
set(libdir "lib/gtk")
endif()
file(APPEND
${CMAKE_BINARY_DIR}/make_symlinks
"ln -sf \"$OUT_DIR/${libdir}/${target_file}\" \"$OUT_DIR/${libdir}/${input_file_NAME}\" \n"
)
endif() #target_file
endif() #is_this_a_symbolic_link
else() #if("${file_ov_lower}" MATCHES ...)
#we are out of options at this point. throw error!
message(FATAL_ERROR "unknown/untracked file type found: ${input_file}")
endif() #if("${file_ov_lower}" MATCHES ...)
# Patch file command returning shared-oject for executable on Linux when -PIE is used.
if( LINUX )
get_filename_component( input_file_DIR ${input_file} DIRECTORY )
get_filename_component( input_file_dIR ${input_file_DIR} NAME )
string( TOLOWER "${input_file_DIR}" input_file_DIR )
if( ${input_file_DIR} MATCHES "bin" )
message( WARNING "${input_file} detected as shared-object." )
set(detected_type PROGRAMS)
set(detected_dir bin)
endif()
endif()
#message("detected_type=${detected_type}")
set(${result_type} "${detected_type}" PARENT_SCOPE)
set(${result_dir} "${detected_dir}" PARENT_SCOPE)
endfunction()