diff options
Diffstat (limited to 'toolchain/specifydependencies.cmake')
-rw-r--r-- | toolchain/specifydependencies.cmake | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/toolchain/specifydependencies.cmake b/toolchain/specifydependencies.cmake index 65e875bf..8965d6da 100644 --- a/toolchain/specifydependencies.cmake +++ b/toolchain/specifydependencies.cmake @@ -1,27 +1,29 @@ -file(READ "${TARGET_DIR}/CMakeFiles/${TARGET_NAME}.dir/link.txt" out) +execute_process(COMMAND readelf --wide --dynamic ${TARGET} ERROR_VARIABLE readelf_errors OUTPUT_VARIABLE out RESULT_VARIABLE result) -string(FIND "${out}" "-o ${TARGET_NAME}" POS) #we trim the initial arguments, we want the ones in the end. we find the target -string(SUBSTRING "${out}" ${POS} -1 out) #we -string(REGEX MATCHALL "(/|\\.\\./|\\./)[^ ]+\\.so" outout "${out}") -string(STRIP "${outout}" outout) -string(REPLACE " /" ";/" outout "${outout}") +if (NOT result EQUAL 0) + message(FATAL_ERROR "readelf failed on ${TARGET} exit(${result}): ${readelf_errors}") +endif() +string(REPLACE "\n" ";" lines "${out}") set(extralibs) -foreach(lib IN LISTS outout) #now we filter Qt5 libraries, because Qt wants to take care about these itself - if(NOT ${lib} MATCHES ".*/libQt5.*") - # resolve relative paths - if(${lib} MATCHES "^(\\.\\./|\\./)") - set(lib "${TARGET_DIR}/${lib}") - endif() - if(extralibs) - set(extralibs "${extralibs},${lib}") +foreach(line ${lines}) + string(REGEX MATCH ".*\\(NEEDED\\) +Shared library: +\\[(.+)\\]$" matched ${line}) + set(currentLib ${CMAKE_MATCH_1}) + + if(NOT ${currentLib} MATCHES "libQt5.*" AND matched) + find_file(ourlib-${currentLib} ${currentLib} HINTS ${OUTPUT_DIR} ${EXPORT_DIR} ${ECM_ADDITIONAL_FIND_ROOT_PATH} NO_DEFAULT_PATH PATH_SUFFIXES lib) + + if(ourlib-${currentLib}) + list(APPEND extralibs "${ourlib-${currentLib}}") else() - set(extralibs "${lib}") + message(STATUS "could not find ${currentLib} in ${OUTPUT_DIR} ${EXPORT_DIR}/lib/ ${ECM_ADDITIONAL_FIND_ROOT_PATH}") endif() endif() endforeach() + if(extralibs) - set(extralibs "\"android-extra-libs\": \"${extralibs}\",") + string(REPLACE ";" "," libs "${extralibs}") + set(extralibs "\"android-extra-libs\": \"${libs}\",") endif() set(extraplugins) |