diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -56,7 +56,6 @@ add_subdirectory(ECMGenerateHeadersTest) add_subdirectory(ECMSetupVersionTest) add_subdirectory(ECMGeneratePkgConfigFile) -add_subdirectory(ECMToolchainAndroidTest) # a macro for tests that have a simple format where the name matches the # directory and project diff --git a/tests/ECMToolchainAndroidTest/CMakeLists.txt b/tests/ECMToolchainAndroidTest/CMakeLists.txt deleted file mode 100644 --- a/tests/ECMToolchainAndroidTest/CMakeLists.txt +++ /dev/null @@ -1,23 +0,0 @@ -project(AndroidToolchainTest) -cmake_minimum_required(VERSION 2.8.12) - -set(CMAKE_MODULE_PATH - ${CMAKE_CURRENT_SOURCE_DIR}/../../modules - ${CMAKE_CURRENT_SOURCE_DIR}/../../toolchain -) - -set(TARGET_DIR "${CMAKE_CURRENT_SOURCE_DIR}/testlinkfile") -set(TARGET_NAME "testtarget") -set(OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/androidtest_output.txt") -set(INPUT_FILE "${CMAKE_CURRENT_SOURCE_DIR}/testlinkfile/outputfake.json") - -# test correct include resolution -include(specifydependencies) - -file(READ "${OUTPUT_FILE}" TEST_RESULT) -string(FIND ${TEST_RESULT} "libKF5Attica.so" CMP_RESULT) -if (${CMP_RESULT} EQUAL -1) - message(SEND_ERROR "Could not find relative library libKF5Attica.so") -endif() - -add_executable(dummy main.c) diff --git a/tests/ECMToolchainAndroidTest/main.c b/tests/ECMToolchainAndroidTest/main.c deleted file mode 100644 --- a/tests/ECMToolchainAndroidTest/main.c +++ /dev/null @@ -1,4 +0,0 @@ -int main() -{ - return 0; -} diff --git a/tests/ECMToolchainAndroidTest/testlinkfile/CMakeFiles/testtarget.dir/link.txt b/tests/ECMToolchainAndroidTest/testlinkfile/CMakeFiles/testtarget.dir/link.txt deleted file mode 100644 --- a/tests/ECMToolchainAndroidTest/testlinkfile/CMakeFiles/testtarget.dir/link.txt +++ /dev/null @@ -1 +0,0 @@ -/usr/bin/c++ -pipe -DQT_STRICT_ITERATORS -DQURL_NO_CAST_FROM_STRING -DQT_NO_HTTP -DQT_NO_FTP -Wformat -Werror=format-security -Werror=return-type -Wno-variadic-macros -Wlogical-op -std=c++0x -fno-exceptions -Wall -Wextra -Wcast-align -Wchar-subscripts -Wformat-security -Wno-long-long -Wpointer-arith -Wundef -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type -pedantic -g -Wl,--enable-new-dtags CMakeFiles/persontest.dir/persontest.cpp.o CMakeFiles/persontest.dir/persontest_automoc.cpp.o -o testtarget -rdynamic /opt/qt5/qtbase/lib/libQt5Test.so.5.6.1 ../src/libKF5Attica.so.5.23.0 /opt/qt5/qtbase/lib/libQt5Network.so.5.6.1 /opt/qt5/qtbase/lib/libQt5Core.so.5.6.1 -Wl,-rpath,/opt/qt5/qtbase/lib:/opt/kde/build/frameworks/attica/src diff --git a/tests/ECMToolchainAndroidTest/testlinkfile/outputfake.json b/tests/ECMToolchainAndroidTest/testlinkfile/outputfake.json deleted file mode 100644 --- a/tests/ECMToolchainAndroidTest/testlinkfile/outputfake.json +++ /dev/null @@ -1 +0,0 @@ -##EXTRALIBS## diff --git a/toolchain/Android.cmake b/toolchain/Android.cmake --- a/toolchain/Android.cmake +++ b/toolchain/Android.cmake @@ -246,7 +246,7 @@ COMMAND cmake -E remove_directory "${EXPORT_DIR}" COMMAND cmake -E copy_directory "${ANDROID_APK_DIR}" "${EXPORT_DIR}" COMMAND cmake -E copy "$" "${EXECUTABLE_DESTINATION_PATH}" - COMMAND cmake -DINPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json.in" -DOUTPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json" "-DTARGET_DIR=$" "-DTARGET_NAME=${QTANDROID_EXPORTED_TARGET}" "-DEXPORT_DIR=${CMAKE_INSTALL_PREFIX}" -P ${_CMAKE_ANDROID_DIR}/specifydependencies.cmake + COMMAND LANG=C cmake -DINPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json.in" -DOUTPUT_FILE="${QTANDROID_EXPORTED_TARGET}-deployment.json" "-DTARGET=$" "-DOUTPUT_DIR=$" "-DEXPORT_DIR=${CMAKE_INSTALL_PREFIX}" "-DECM_ADDITIONAL_FIND_ROOT_PATH=\"${ECM_ADDITIONAL_FIND_ROOT_PATH}\"" -P ${_CMAKE_ANDROID_DIR}/specifydependencies.cmake COMMAND $/androiddeployqt --gradle --input "${QTANDROID_EXPORTED_TARGET}-deployment.json" --output "${EXPORT_DIR}" --deployment bundled ${arguments} ) diff --git a/toolchain/specifydependencies.cmake b/toolchain/specifydependencies.cmake --- 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)