Michał Górny 0c4cf79def [clang] Install scan-build-py into plain "lib" directory (#106612)
Install scan-build-py modules into the plain `lib` directory,
without LLVM_LIBDIR_SUFFIX appended, to match the path expected
by `intercept-build` executable.  This fixes the program being unable
to find its modules.  Using unsuffixed path makes sense here, since
Python modules are not subject to multilib.

This change effectively reverts 1334e129a39cb427e7b855e9a711a3e7604e50e5.
The commit in question changed the path without a clear justification
("does not respect the given prefix") and the Python code was never
modified to actually work with the change.

Fixes #106608
2024-08-30 16:30:19 +02:00

133 lines
5.4 KiB
CMake

set (BinFiles
"analyze-build"
"intercept-build"
"scan-build")
set (LibExecs
"analyze-c++"
"analyze-cc"
"intercept-c++"
"intercept-cc")
set (LibScanbuild
"__init__.py"
"analyze.py"
"arguments.py"
"clang.py"
"compilation.py"
"intercept.py"
"report.py"
"shell.py")
set (LibScanbuildResources
"scanview.css"
"selectable.js"
"sorttable.js")
# libear is compiled dynamically in build_libear using the specified cc
# compiler.
set (LibEar
"__init__.py"
"config.h.in"
"ear.c")
foreach(BinFile ${BinFiles})
if ("${BinFile}" STREQUAL "scan-build")
# Need to rename scan-build to scan-build-py to prevent overwriting
# scan-build Perl implementation.
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/scan-build-py
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/scan-build
${CMAKE_BINARY_DIR}/bin/scan-build-py
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/scan-build)
install (PROGRAMS "bin/scan-build"
DESTINATION "${CMAKE_INSTALL_BINDIR}"
RENAME scan-build-py
COMPONENT scan-build-py)
list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/scan-build-py)
else()
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/bin/${BinFile}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/bin
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile}
${CMAKE_BINARY_DIR}/bin/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/bin/${BinFile})
install(PROGRAMS bin/${BinFile}
DESTINATION "${CMAKE_INSTALL_BINDIR}"
COMPONENT scan-build-py)
list(APPEND Depends ${CMAKE_BINARY_DIR}/bin/${BinFile})
endif()
endforeach()
foreach(lib ${LibExecs})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/libexec/${lib}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/libexec
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/libexec/${lib}
${CMAKE_BINARY_DIR}/libexec/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/libexec/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/libexec/${lib})
install(PROGRAMS libexec/${lib}
DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}"
COMPONENT scan-build-py)
endforeach()
foreach(lib ${LibScanbuild})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib/libscanbuild
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib}
${CMAKE_BINARY_DIR}/lib/libscanbuild/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/${lib})
install(FILES lib/libscanbuild/${lib}
DESTINATION lib/libscanbuild
COMPONENT scan-build-py)
endforeach()
foreach(resource ${LibScanbuildResources})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib/libscanbuild
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib/libscanbuild/resources
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource}
${CMAKE_BINARY_DIR}/lib/libscanbuild/resources
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libscanbuild/resources/${resource})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libscanbuild/resources/${resource})
install(FILES lib/libscanbuild/resources/${resource}
DESTINATION lib/libscanbuild/resources
COMPONENT scan-build-py)
endforeach()
foreach(lib ${LibEar})
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/lib/libear/${lib}
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib
COMMAND ${CMAKE_COMMAND} -E make_directory
${CMAKE_BINARY_DIR}/lib/libear
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib}
${CMAKE_BINARY_DIR}/lib/libear/
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/lib/libear/${lib})
list(APPEND Depends ${CMAKE_BINARY_DIR}/lib/libear/${lib})
install(FILES lib/libear/${lib}
DESTINATION lib/libear
COMPONENT scan-build-py)
endforeach()
add_custom_target(scan-build-py ALL DEPENDS ${Depends})
add_llvm_install_targets("install-scan-build-py"
DEPENDS scan-build-py
COMPONENT scan-build-py)