mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-02 03:39:43 -06:00
CPack: re-use paths of tools discovered by CMakeFindBinUtils
`CMakeFindBinUtils.cmake` sets `CMAKE_<TOOL>` variables that in cross-compilation environments point to the toolchain specific executables: e.g. `CMAKE_OBJCOPY` might point to `<path_to_toolchain>/arm-poky-linux-gnueabi-objcopy`. Pass this information to CPack.
This commit is contained in:
committed by
Brad King
parent
01e95efc34
commit
0c638ab597
7
Help/release/dev/cpack-reuse-cmake-tools.rst
Normal file
7
Help/release/dev/cpack-reuse-cmake-tools.rst
Normal file
@@ -0,0 +1,7 @@
|
||||
cpack-reuse-cmake-tools
|
||||
-----------------------
|
||||
|
||||
* The :module:`CPack` module gained the :variable:`CPACK_READELF_EXECUTABLE`,
|
||||
:variable:`CPACK_OBJCOPY_EXECUTABLE`, and
|
||||
:variable:`CPACK_OBJDUMP_EXECUTABLE` variables to control the locations
|
||||
of binutils used by :manual:`cpack(1)`.
|
||||
@@ -472,6 +472,33 @@ The following variables are for advanced uses of CPack:
|
||||
target or when running :manual:`cpack <cpack(1)>` without the
|
||||
:option:`-G <cpack -G>` option.
|
||||
|
||||
.. variable:: CPACK_READELF_EXECUTABLE
|
||||
|
||||
.. versionadded:: 3.25
|
||||
|
||||
Specify the ``readelf`` executable path used by CPack.
|
||||
The default value will be ``CMAKE_READELF`` when set. Otherwise,
|
||||
the default value will be empty and CPack will use :command:`find_program`
|
||||
to determine the ``readelf`` path when needed.
|
||||
|
||||
.. variable:: CPACK_OBJCOPY_EXECUTABLE
|
||||
|
||||
.. versionadded:: 3.25
|
||||
|
||||
Specify the ``objcopy`` executable path used by CPack.
|
||||
The default value will be ``CMAKE_OBJCOPY`` when set. Otherwise,
|
||||
the default value will be empty and CPack will use :command:`find_program`
|
||||
to determine the ``objcopy`` path when needed.
|
||||
|
||||
.. variable:: CPACK_OBJDUMP_EXECUTABLE
|
||||
|
||||
.. versionadded:: 3.25
|
||||
|
||||
Specify the ``objdump`` executable path used by CPack.
|
||||
The default value will be ``CMAKE_OBJDUMP`` when set. Otherwise,
|
||||
the default value will be empty and CPack will use :command:`find_program`
|
||||
to determine the ``objdump`` path when needed.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
# Define this var in order to avoid (or warn) concerning multiple inclusion
|
||||
@@ -591,6 +618,16 @@ _cpack_set_default(CPACK_RESOURCE_FILE_WELCOME
|
||||
|
||||
_cpack_set_default(CPACK_MODULE_PATH "${CMAKE_MODULE_PATH}")
|
||||
|
||||
if(CMAKE_READELF)
|
||||
_cpack_set_default(CPACK_READELF_EXECUTABLE "${CMAKE_READELF}")
|
||||
endif()
|
||||
if(CMAKE_OBJCOPY)
|
||||
_cpack_set_default(CPACK_OBJCOPY_EXECUTABLE "${CMAKE_OBJCOPY}")
|
||||
endif()
|
||||
if(CMAKE_OBJDUMP)
|
||||
_cpack_set_default(CPACK_OBJDUMP_EXECUTABLE "${CMAKE_OBJDUMP}")
|
||||
endif()
|
||||
|
||||
# Set default directory creation permissions mode
|
||||
if(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS)
|
||||
_cpack_set_default(CPACK_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS
|
||||
|
||||
@@ -37,8 +37,8 @@ endfunction()
|
||||
|
||||
#extract library name and version for given shared object
|
||||
function(extract_so_info shared_object libname version)
|
||||
if(READELF_EXECUTABLE)
|
||||
execute_process(COMMAND "${READELF_EXECUTABLE}" -d "${shared_object}"
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
execute_process(COMMAND "${CPACK_READELF_EXECUTABLE}" -d "${shared_object}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
@@ -197,15 +197,15 @@ function(cpack_deb_prepare_package_vars)
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||
find_program(CPACK_READELF_EXECUTABLE NAMES readelf)
|
||||
|
||||
if(CPACK_DEBIAN_DEBUGINFO_PACKAGE AND CPACK_DEB_UNSTRIPPED_FILES)
|
||||
find_program(OBJCOPY_EXECUTABLE NAMES objcopy)
|
||||
find_program(CPACK_OBJCOPY_EXECUTABLE NAMES objcopy)
|
||||
|
||||
if(NOT OBJCOPY_EXECUTABLE)
|
||||
if(NOT CPACK_OBJCOPY_EXECUTABLE)
|
||||
message(FATAL_ERROR "debuginfo packages require the objcopy tool")
|
||||
endif()
|
||||
if(NOT READELF_EXECUTABLE)
|
||||
if(NOT CPACK_READELF_EXECUTABLE)
|
||||
message(FATAL_ERROR "debuginfo packages require the readelf tool")
|
||||
endif()
|
||||
|
||||
@@ -213,7 +213,7 @@ function(cpack_deb_prepare_package_vars)
|
||||
foreach(_FILE IN LISTS CPACK_DEB_UNSTRIPPED_FILES)
|
||||
|
||||
# Get the file's Build ID
|
||||
execute_process(COMMAND env LC_ALL=C ${READELF_EXECUTABLE} -n "${_FILE}"
|
||||
execute_process(COMMAND env LC_ALL=C ${CPACK_READELF_EXECUTABLE} -n "${_FILE}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE READELF_OUTPUT
|
||||
RESULT_VARIABLE READELF_RESULT
|
||||
@@ -221,7 +221,7 @@ function(cpack_deb_prepare_package_vars)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT READELF_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: readelf: '${READELF_ERROR}';\n"
|
||||
"executed command: '${READELF_EXECUTABLE} -n ${_FILE}'")
|
||||
"executed command: '${CPACK_READELF_EXECUTABLE} -n ${_FILE}'")
|
||||
endif()
|
||||
if(READELF_OUTPUT MATCHES "Build ID: ([0-9a-zA-Z][0-9a-zA-Z])([0-9a-zA-Z]*)")
|
||||
set(_BUILD_ID_START ${CMAKE_MATCH_1})
|
||||
@@ -235,7 +235,7 @@ function(cpack_deb_prepare_package_vars)
|
||||
set(_FILE_DBGSYM ${_DBGSYM_ROOT}/usr/lib/debug/.build-id/${_BUILD_ID_START}/${_BUILD_ID_REMAINING}.debug)
|
||||
get_filename_component(_OUT_DIR "${_FILE_DBGSYM}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}/${_OUT_DIR}")
|
||||
execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}"
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --only-keep-debug "${_FILE}" "${_FILE_DBGSYM}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
@@ -243,9 +243,9 @@ function(cpack_deb_prepare_package_vars)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'")
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --only-keep-debug ${_FILE} ${_FILE_DBGSYM}'")
|
||||
endif()
|
||||
execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE}
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --strip-unneeded ${_FILE}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
@@ -253,9 +253,9 @@ function(cpack_deb_prepare_package_vars)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'")
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --strip-debug ${_FILE}'")
|
||||
endif()
|
||||
execute_process(COMMAND ${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}
|
||||
execute_process(COMMAND ${CPACK_OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
OUTPUT_VARIABLE OBJCOPY_OUTPUT
|
||||
RESULT_VARIABLE OBJCOPY_RESULT
|
||||
@@ -263,7 +263,7 @@ function(cpack_deb_prepare_package_vars)
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
if(NOT OBJCOPY_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR "CPackDeb: objcopy: '${OBJCOPY_ERROR}';\n"
|
||||
"executed command: '${OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'")
|
||||
"executed command: '${CPACK_OBJCOPY_EXECUTABLE} --add-gnu-debuglink=${_FILE_DBGSYM} ${_FILE}'")
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
@@ -652,7 +652,7 @@ function(cpack_deb_prepare_package_vars)
|
||||
unset(CPACK_DEBIAN_PACKAGE_SHLIBS_LIST)
|
||||
|
||||
if(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS)
|
||||
if(READELF_EXECUTABLE)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
foreach(_FILE IN LISTS CPACK_DEB_SHARED_OBJECT_FILES)
|
||||
extract_so_info("${_FILE}" libname soversion)
|
||||
if(libname AND DEFINED soversion)
|
||||
|
||||
@@ -625,8 +625,8 @@ function(cpack_rpm_debugsymbol_check INSTALL_FILES WORKING_DIR)
|
||||
endif()
|
||||
|
||||
# With objdump we should check the debug symbols
|
||||
find_program(OBJDUMP_EXECUTABLE objdump)
|
||||
if(NOT OBJDUMP_EXECUTABLE)
|
||||
find_program(CPACK_OBJDUMP_EXECUTABLE objdump)
|
||||
if(NOT CPACK_OBJDUMP_EXECUTABLE)
|
||||
message(FATAL_ERROR "CPackRPM: objdump binary could not be found!"
|
||||
" Required for debuginfo packaging. See documentation of"
|
||||
" CPACK_RPM_DEBUGINFO_PACKAGE variable for details.")
|
||||
@@ -649,7 +649,7 @@ function(cpack_rpm_debugsymbol_check INSTALL_FILES WORKING_DIR)
|
||||
continue()
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND "${OBJDUMP_EXECUTABLE}" -h ${WORKING_DIR}/${F}
|
||||
execute_process(COMMAND "${CPACK_OBJDUMP_EXECUTABLE}" -h ${WORKING_DIR}/${F}
|
||||
WORKING_DIRECTORY "${CPACK_TOPLEVEL_DIRECTORY}"
|
||||
RESULT_VARIABLE OBJDUMP_EXEC_RESULT
|
||||
OUTPUT_VARIABLE OBJDUMP_OUT
|
||||
|
||||
@@ -97,7 +97,7 @@ function(getMissingShlibsErrorExtra FILE RESULT_VAR)
|
||||
string(APPEND error_extra "; errors \"${deb_install_files_errors}\"")
|
||||
endif()
|
||||
|
||||
if(READELF_EXECUTABLE)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
string(APPEND error_extra "; readelf \"\n")
|
||||
|
||||
# Only dynamically linked ELF files are included
|
||||
@@ -106,7 +106,7 @@ function(getMissingShlibsErrorExtra FILE RESULT_VAR)
|
||||
if(_FILE MATCHES "ELF.*shared object")
|
||||
string(REGEX MATCH "(^.*):" _FILE_NAME "${_FILE}")
|
||||
|
||||
execute_process(COMMAND ${READELF_EXECUTABLE} -d "${CMAKE_MATCH_1}"
|
||||
execute_process(COMMAND ${CPACK_READELF_EXECUTABLE} -d "${CMAKE_MATCH_1}"
|
||||
WORKING_DIRECTORY "${CPACK_TEMPORARY_DIRECTORY}"
|
||||
RESULT_VARIABLE result
|
||||
OUTPUT_VARIABLE output
|
||||
|
||||
@@ -14,9 +14,9 @@ function(get_test_prerequirements found_var config_file)
|
||||
endif()
|
||||
|
||||
# optional tool for some tests
|
||||
find_program(READELF_EXECUTABLE NAMES readelf)
|
||||
if(READELF_EXECUTABLE)
|
||||
find_program(CPACK_READELF_EXECUTABLE NAMES readelf)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
file(APPEND "${config_file}"
|
||||
"\nset(READELF_EXECUTABLE \"${READELF_EXECUTABLE}\")")
|
||||
"\nset(CPACK_READELF_EXECUTABLE \"${CPACK_READELF_EXECUTABLE}\")")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@@ -15,9 +15,9 @@ function(get_test_prerequirements found_var config_file)
|
||||
endif()
|
||||
|
||||
# optional tool for some tests
|
||||
find_program(OBJDUMP_EXECUTABLE objdump)
|
||||
if(OBJDUMP_EXECUTABLE)
|
||||
find_program(CPACK_OBJDUMP_EXECUTABLE objdump)
|
||||
if(CPACK_OBJDUMP_EXECUTABLE)
|
||||
file(APPEND "${config_file}"
|
||||
"\nset(OBJDUMP_EXECUTABLE \"${OBJDUMP_EXECUTABLE}\")")
|
||||
"\nset(CPACK_OBJDUMP_EXECUTABLE \"${CPACK_OBJDUMP_EXECUTABLE}\")")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
function(get_test_prerequirements found_var config_file)
|
||||
include(${config_file})
|
||||
|
||||
if(READELF_EXECUTABLE)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
set(${found_var} true PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
function(get_test_prerequirements found_var config_file)
|
||||
include(${config_file})
|
||||
|
||||
if(READELF_EXECUTABLE)
|
||||
if(CPACK_READELF_EXECUTABLE)
|
||||
set(${found_var} true PARENT_SCOPE)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
@@ -2,7 +2,7 @@ function(get_test_prerequirements found_var config_file)
|
||||
if(SUBTEST_SUFFIX MATCHES ".*single_debug_info")
|
||||
include(${config_file})
|
||||
|
||||
if(OBJDUMP_EXECUTABLE)
|
||||
if(CPACK_OBJDUMP_EXECUTABLE)
|
||||
set(${found_var} true PARENT_SCOPE)
|
||||
endif()
|
||||
else()
|
||||
|
||||
Reference in New Issue
Block a user