Skip to content

Commit e6af44a

Browse files
authored
CMake: if possible, extract .obj files from a .lib file using 7-Zip.
2 parents 77400b7 + 9fbd6d1 commit e6af44a

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

cmake/environmentchecks.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ if(NOT BUILDCACHE_EXE)
145145
endif()
146146
endif()
147147

148+
find_program(7Z_EXE NAMES ${PREFERRED_7Z_NAMES} 7z)
148149
find_program(BLACK_EXE NAMES ${PREFERRED_BLACK_NAMES} black)
149150
find_program(CLANG_FORMAT_EXE NAMES ${PREFERRED_CLANG_FORMAT_NAMES} clang-format)
150151
find_program(CLANG_TIDY_EXE NAMES ${PREFERRED_CLANG_TIDY_NAMES} clang-tidy)

src/CMakeLists.txt

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -350,20 +350,25 @@ else()
350350
file(MAKE_DIRECTORY ${PACKAGE_DIR})
351351

352352
if(WIN32)
353-
execute_process(COMMAND ${CMAKE_AR} /NOLOGO /LIST ${PACKAGE}
354-
OUTPUT_VARIABLE PACKAGE_FILES
355-
OUTPUT_STRIP_TRAILING_WHITESPACE)
356-
357-
string(REPLACE "\n" ";" PACKAGE_FILES ${PACKAGE_FILES})
358-
359-
foreach(PACKAGE_FILE ${PACKAGE_FILES})
360-
string(REGEX MATCH ".*\\${CMAKE_CXX_OUTPUT_EXTENSION}$" IS_OBJECT_FILE ${PACKAGE_FILE})
361-
362-
if(IS_OBJECT_FILE)
363-
execute_process(COMMAND ${CMAKE_AR} /NOLOGO /EXTRACT:${PACKAGE_FILE} ${PACKAGE}
364-
WORKING_DIRECTORY ${PACKAGE_DIR})
365-
endif()
366-
endforeach()
353+
if(7Z_EXE)
354+
execute_process(COMMAND ${7Z_EXE} e ${PACKAGE} -bso0
355+
WORKING_DIRECTORY ${PACKAGE_DIR})
356+
else()
357+
execute_process(COMMAND ${CMAKE_AR} /NOLOGO /LIST ${PACKAGE}
358+
OUTPUT_VARIABLE PACKAGE_FILES
359+
OUTPUT_STRIP_TRAILING_WHITESPACE)
360+
361+
string(REPLACE "\n" ";" PACKAGE_FILES ${PACKAGE_FILES})
362+
363+
foreach(PACKAGE_FILE ${PACKAGE_FILES})
364+
string(REGEX MATCH ".*\\${CMAKE_CXX_OUTPUT_EXTENSION}$" IS_OBJECT_FILE ${PACKAGE_FILE})
365+
366+
if(IS_OBJECT_FILE)
367+
execute_process(COMMAND ${CMAKE_AR} /NOLOGO /EXTRACT:${PACKAGE_FILE} ${PACKAGE}
368+
WORKING_DIRECTORY ${PACKAGE_DIR})
369+
endif()
370+
endforeach()
371+
endif()
367372
else()
368373
execute_process(COMMAND ${CMAKE_AR} -x ${PACKAGE}
369374
WORKING_DIRECTORY ${PACKAGE_DIR})

0 commit comments

Comments
 (0)