Commit c09fb832 authored by Rashad Kanavath's avatar Rashad Kanavath
Browse files

PKG: keep packaging macros in sync with otb tree

parent 16d4b53e
......@@ -109,6 +109,7 @@ function(install_common include_mvd)
DEPENDENCIES_INSTALL_DIR
OTB_APPLICATIONS_DIR
PKG_STAGE_DIR
PACKAGE_SUPPORT_FILES_DIR
CMAKE_INSTALL_PREFIX
OTB_INSTALL_DIR
)
......@@ -118,8 +119,25 @@ function(install_common include_mvd)
set(vars "${vars} ${req}=[${${req}}]\n")
endforeach(req)
#one for debugging..
# install(CODE "message(\"CMake/PackageHelper.cmake:install_common(${outdir})\n${vars}\n\")")
# one for debugging..
# install(CODE "message(\"CMake/PackageHelper.cmake:install_common(${outdir})\n${vars}\n\")")
##################### install environment source ##########################
if(WIN32 OR CROSS_COMPILING)
set(ENV_SOURCE_FILES
"${PACKAGE_SUPPORT_FILES_DIR}/otbenv.cmd"
"${PACKAGE_SUPPORT_FILES_DIR}/otbenv.profile"
)
elseif(UNIX)
set(ENV_SOURCE_FILES "${PACKAGE_SUPPORT_FILES_DIR}/otbenv.profile")
endif()
foreach(ENV_SOURCE_FILE ${ENV_SOURCE_FILES})
if(EXISTS ${ENV_SOURCE_FILE})
install(FILES ${ENV_SOURCE_FILE} DESTINATION ${PKG_STAGE_DIR})
endif()
endforeach()
####################### install cli and gui scripts ###########################
file(GLOB PKG_APP_SCRIPTS
......@@ -198,14 +216,6 @@ function(install_monteverdi_files)
set(vars "${vars} ${req}=[${${req}}]\n")
endforeach(req)
#message("CMake/PackageHelper.cmake:install_common(${stage_dir})\n${vars}\n")
##################### install mingw otbenv.cmd ##########################
if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/otbenv.cmd)
install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/otbenv.cmd
DESTINATION ${PKG_STAGE_DIR})
endif()
####################### install mingw qt.conf ##########################
if(EXISTS ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/qt.conf)
install(FILES ${Monteverdi_SOURCE_DIR}/Packaging/Windows/mingw/qt.conf
......@@ -233,13 +243,12 @@ function(install_monteverdi_files)
endfunction()
macro(clear_package_staging_directory)
message(STATUS "Clearing package staging directory: ${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
macro(empty_package_staging_directory)
message(STATUS "Empty package staging directory: ${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_INSTALL_PREFIX}/${PKG_STAGE_DIR}")
endmacro()
function(configure_package)
set(EXE_EXT "")
set(LIB_EXT "*so")
set(SCR_EXT ".sh")
......@@ -249,10 +258,33 @@ function(configure_package)
set(SCR_EXT ".bat")
endif()
foreach(EXE_FILE
monteverdi
#This must exist in any OTB Installation minimal or full
set(PKG_BINARY_FILES "bin/otbApplicationLauncherCommandLine")
set(PKG_PEFILES "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT}")
if(NOT EXISTS "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT}")
message(FATAL_ERROR "${OTB_INSTALL_DIR}/bin/otbApplicationLauncherCommandLine${EXE_EXT} not found.")
endif()
foreach(EXE_FILE otbApplicationLauncherQt
iceViewer
otbTestDriver)
if(EXISTS "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
#see the first comment about PKG_BINARY_FILES
set(PKG_BINARY_FILES "${PKG_BINARY_FILES} bin/${EXE_FILE}${EXE_EXT}")
list(APPEND PKG_PEFILES
"${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
endif()
endforeach()
foreach(EXE_FILE monteverdi
mapla)
if(EXISTS "${CMAKE_INSTALL_PREFIX}/bin/${EXE_FILE}${EXE_EXT}")
#PKG_BINARY_FILES might seem a bit redundant variable if you
#consider PKG_PEFILES which also has same content.
#But PKG_BINARY_FILES goes into pkgsetup.in for Linux standalone binaries
# and other one (PKG_PEFILES) is for dependency resolution in
# process_deps() function
set(PKG_BINARY_FILES "${PKG_BINARY_FILES} bin/${EXE_FILE}${EXE_EXT}")
list(APPEND PKG_PEFILES
"${CMAKE_INSTALL_PREFIX}/bin/${EXE_FILE}${EXE_EXT}")
endif()
......@@ -261,32 +293,30 @@ function(configure_package)
install(FILES
${Monteverdi_SOURCE_DIR}/Packaging/${EXE_FILE}${SCR_EXT}
DESTINATION
"${PKG_STAGE_DIR}")
endif()
endif()
endforeach()
foreach(EXE_FILE otbApplicationLauncherQt
iceViewer
otbTestDriver
otbApplicationLauncherCommandLine)
if(EXISTS "${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
list(APPEND PKG_PEFILES
"${OTB_INSTALL_DIR}/bin/${EXE_FILE}${EXE_EXT}")
"${PKG_STAGE_DIR}/bin")
endif()
endif()
endforeach()
file(GLOB OTB_APPS_LIST ${OTB_APPLICATIONS_DIR}/otbapp_${LIB_EXT}) # /lib/otb
#see the first comment about PKG_BINARY_FILES
foreach(OTB_APP_SO ${OTB_APPS_LIST})
get_filename_component(OTB_APP_SO_NAME ${OTB_APP_SO} NAME)
set(PKG_BINARY_FILES "${PKG_BINARY_FILES} lib/otb/applications/${OTB_APP_SO_NAME}")
endforeach()
set(include_mvd 0)
if(DEFINED Monteverdi_SOURCE_DIR)
set(include_mvd 1)
endif()
list(APPEND PKG_PEFILES ${OTB_APPS_LIST})
install_common(${include_mvd})
list(APPEND PKG_PEFILES ${OTB_APPS_LIST})
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/temp_so_names_dir")
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/temp_so_names_dir")
set(alldlls)
set(notfound_dlls)
......@@ -301,4 +331,100 @@ function(configure_package)
message(FATAL_ERROR "Following dlls were not found: ${notfound_dlls}. Please consider adding their paths to SEARCHDIRS when calling superbuild_package macro.")
endif()
endfunction()
\ No newline at end of file
file(GLOB temp_files "${CMAKE_BINARY_DIR}/temp_so_names_dir/*") # /lib/otb
foreach(temp_file ${temp_files})
get_filename_component(basename_of_temp_file ${temp_file} NAME)
set(PKG_BINARY_FILES "${PKG_BINARY_FILES} lib/${basename_of_temp_file}")
endforeach()
#remove this temporary directory
execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR}/temp_so_names_dir")
set(PKG_BINARY_FILES "${PKG_BINARY_FILES}" PARENT_SCOPE)
endfunction()
# The below function is modified from GetPrerequisities.cmake
# which is distributed with CMake.
function(is_file_a_symbolic_link file result_var1 result_var2)
#
# A file is not executable until proven otherwise:
#
set(${result_var1} 0 PARENT_SCOPE)
set(${result_var2} "" PARENT_SCOPE)
get_filename_component(file_full "${file}" ABSOLUTE)
string(TOLOWER "${file_full}" file_full_lower)
# If file name ends in .exe on Windows, *assume* executable:
#
if(WIN32 AND NOT UNIX)
if("${file_full_lower}" MATCHES "\\.lnk$")
set(${result_var1} 1 PARENT_SCOPE)
#Assuming the file is linked to a file with same name without .lnk extension
get_filename_component(name_we_lnk "${file_full_lower}" NAME_WE)
set(${result_var2} "${name_we_lnk}" PARENT_SCOPE)
return()
endif()
# A clause could be added here that uses output or return value of dumpbin
# to determine ${result_var}. In 99%+? practical cases, the exe name
# match will be sufficient...
#
endif()
# Use the information returned from the Unix shell command "file" to
# determine if ${file_full} should be considered an executable file...
#
# If the file command's output contains "executable" and does *not* contain
# "text" then it is likely an executable suitable for prerequisite analysis
# via the get_prerequisites macro.
#
if(UNIX)
if(NOT file_cmd)
find_program(file_cmd "file")
mark_as_advanced(file_cmd)
endif()
if(file_cmd)
execute_process(COMMAND "${file_cmd}" "${file_full}"
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_cmd} failed: ${file_rv}\n${file_ev}")
endif()
# Replace the name of the file in the output with a placeholder token
# (the string " _file_full_ ") so that just in case the path name of
# the file contains the word "text" or "executable" we are not fooled
# into thinking "the wrong thing" because the file name matches the
# other 'file' command output we are looking for...
#
string(REPLACE "${file_full}" " _file_full_ " file_ov "${file_ov}")
string(TOLOWER "${file_ov}" file_ov_lower)
#message(FATAL_ERROR "file_ov='${file_ov}'")
if("${file_ov_lower}" MATCHES "symbolic link")
#message(STATUS "symbolic link!")
set(${result_var1} 1 PARENT_SCOPE)
#Now find where the symlink is linked to.
#Do a regex replace
string(REGEX REPLACE "_file_full_*.*symbolic.link.to.."
"" symlinked_to ${file_ov})
#Take out last character which is a single quote
string(REPLACE "'" "" symlinked_to "${symlinked_to}")
#strip for our own sanity
string(STRIP ${symlinked_to} symlinked_to)
set(${result_var2} "${symlinked_to}" PARENT_SCOPE)
#message(FATAL_ERROR "${file_full} is symlinked_to ${symlinked_to}")
return()
endif()
else()
message(STATUS "warning: No 'file' command, skipping execute_process...")
endif()
endif()
endfunction()
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