From d01a2038ae8a38f3ff91ffa75a6359c24b91ee2e Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Fri, 5 Jan 2018 05:46:44 +0000 Subject: [PATCH] cmake(android): update CMAKE_FIND_ROOT_PATH_MODE_* handling Avoids this error message with CMake 3.10: CMake Error: CMake was unable to find a build program corresponding to "Ninja". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool. Related changes is that pkg-config tool is found (/usr/bin/pkg-config). --- platforms/android/android.toolchain.cmake | 57 +++++++++++++++++------ 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/platforms/android/android.toolchain.cmake b/platforms/android/android.toolchain.cmake index 4ac7102258..e566301d81 100644 --- a/platforms/android/android.toolchain.cmake +++ b/platforms/android/android.toolchain.cmake @@ -1596,16 +1596,49 @@ set( CMAKE_FIND_ROOT_PATH "${CMAKE_INSTALL_PREFIX}/share" ) # only search for libraries and includes in the ndk toolchain -set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) -set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) -set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY) + set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) +endif() +if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE) + set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) +endif() + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE) + set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) +endif() + +if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM) + set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) +endif() + +macro(__cmake_find_root_save_and_reset) + foreach(v + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY + CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + CMAKE_FIND_ROOT_PATH_MODE_PACKAGE + CMAKE_FIND_ROOT_PATH_MODE_PROGRAM + ) + set(__save_${v} ${${v}}) + set(${v} NEVER) + endforeach() +endmacro() + +macro(__cmake_find_root_restore) + foreach(v + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY + CMAKE_FIND_ROOT_PATH_MODE_INCLUDE + CMAKE_FIND_ROOT_PATH_MODE_PACKAGE + CMAKE_FIND_ROOT_PATH_MODE_PROGRAM + ) + set(${v} ${__save_${v}}) + unset(__save_${v}) + endforeach() +endmacro() # macro to find packages on the host OS macro( find_host_package ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + __cmake_find_root_save_and_reset() if( CMAKE_HOST_WIN32 ) SET( WIN32 1 ) SET( UNIX ) @@ -1617,17 +1650,13 @@ macro( find_host_package ) SET( WIN32 ) SET( APPLE ) SET( UNIX 1 ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) + __cmake_find_root_restore() endmacro() # macro to find programs on the host OS macro( find_host_program ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER ) + __cmake_find_root_save_and_reset() if( CMAKE_HOST_WIN32 ) SET( WIN32 1 ) SET( UNIX ) @@ -1639,9 +1668,7 @@ macro( find_host_program ) SET( WIN32 ) SET( APPLE ) SET( UNIX 1 ) - set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) - set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) + __cmake_find_root_restore() endmacro()