CMake:Android: copy templates, bindings and gradle files pre_build
At the moment when doing a non-prefix build and changing some of those files, CMake will not update the changes to the build folder unless done manually or a re-configure is done manually. qt_copy_or_install() only does copy those files at configure time once, and using CMAKE_CONFIGURE_DEPENDS would be an overkill here and even a bit of an extra annoyance, so in this case having a custom command seem to be suitable. Done-with: Alexey Edelev <alexey.edelev@qt.io> Change-Id: I55aa9e9d3eea32a4bb54c64abd4cbdcb891c44b6 Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io> Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
This commit is contained in:
parent
fd6b136337
commit
633ab16bc8
@ -183,3 +183,67 @@ function(_qt_internal_create_versioned_link_or_copy install_dir base_name suffix
|
||||
list(JOIN code "\n" code)
|
||||
install(CODE "${code}")
|
||||
endfunction()
|
||||
|
||||
# Use case is copying files or directories in a non-prefix build with each build, so that changes
|
||||
# are available each time, this is useful for some Android templates that are needed for building,
|
||||
# apks and need to sync changes each time a build is started
|
||||
function(qt_internal_copy_at_build_time)
|
||||
set(flags)
|
||||
set(options TARGET DESTINATION)
|
||||
set(multiopts FILES DIRECTORIES)
|
||||
cmake_parse_arguments(arg "${flags}" "${options}" "${multiopts}" ${ARGN})
|
||||
|
||||
file(MAKE_DIRECTORY "${arg_DESTINATION}")
|
||||
|
||||
unset(outputs)
|
||||
foreach(dir_to_copy IN LISTS arg_DIRECTORIES)
|
||||
get_filename_component(file_name "${dir_to_copy}" NAME)
|
||||
set(destination_file_name "${arg_DESTINATION}/${file_name}")
|
||||
|
||||
file(GLOB_RECURSE all_files_in_dir RELATIVE "${dir_to_copy}" "${dir_to_copy}/*")
|
||||
set(dir_outputs ${all_files_in_dir})
|
||||
set(dir_deps ${all_files_in_dir})
|
||||
|
||||
list(TRANSFORM dir_outputs PREPEND "${destination_file_name}/")
|
||||
list(TRANSFORM dir_deps PREPEND "${dir_to_copy}/")
|
||||
|
||||
add_custom_command(OUTPUT ${dir_outputs}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${dir_to_copy} "${destination_file_name}"
|
||||
DEPENDS ${dir_deps}
|
||||
COMMENT "Copying directory ${dir_to_copy} to ${arg_DESTINATION}."
|
||||
)
|
||||
list(APPEND outputs ${dir_outputs})
|
||||
endforeach()
|
||||
|
||||
unset(file_outputs)
|
||||
unset(files_to_copy)
|
||||
foreach(path_to_copy IN LISTS arg_FILES)
|
||||
get_filename_component(file_name "${path_to_copy}" NAME)
|
||||
set(destination_file_name "${arg_DESTINATION}/${file_name}")
|
||||
|
||||
list(APPEND file_outputs "${destination_file_name}")
|
||||
list(APPEND files_to_copy "${path_to_copy}")
|
||||
endforeach()
|
||||
|
||||
if(files_to_copy)
|
||||
add_custom_command(OUTPUT ${file_outputs}
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${files_to_copy} ${arg_DESTINATION}
|
||||
DEPENDS ${files_to_copy}
|
||||
COMMENT "Copying files ${files_to_copy} to ${arg_DESTINATION}."
|
||||
)
|
||||
list(APPEND outputs ${file_outputs})
|
||||
endif()
|
||||
|
||||
get_property(count GLOBAL PROPERTY _qt_internal_copy_at_build_time_count)
|
||||
if(NOT count)
|
||||
set(count 0)
|
||||
endif()
|
||||
|
||||
add_custom_target(qt_internal_copy_at_build_time_${count} DEPENDS ${outputs})
|
||||
if(arg_TARGET)
|
||||
add_dependencies(${arg_TARGET} qt_internal_copy_at_build_time_${count})
|
||||
endif()
|
||||
|
||||
math(EXPR count "${count} + 1")
|
||||
set_property(GLOBAL PROPERTY _qt_internal_copy_at_build_time_count ${count})
|
||||
endfunction()
|
||||
|
8
src/3rdparty/gradle/CMakeLists.txt
vendored
8
src/3rdparty/gradle/CMakeLists.txt
vendored
@ -42,3 +42,11 @@ qt_copy_or_install(
|
||||
DESTINATION
|
||||
"${destination}"
|
||||
)
|
||||
|
||||
if(NOT QT_WILL_INSTALL)
|
||||
qt_internal_copy_at_build_time(TARGET Qt${QtBase_VERSION_MAJOR}GradleScripts
|
||||
FILES ${gradle_programs} ${gradle_files}
|
||||
DIRECTORIES ${gradle_wrapper}
|
||||
DESTINATION ${destination}
|
||||
)
|
||||
endif()
|
||||
|
@ -53,4 +53,11 @@ qt_path_join(destination ${QT_INSTALL_DIR} "src/android/java")
|
||||
qt_copy_or_install(DIRECTORY ${resource_directories}
|
||||
DESTINATION "${destination}"
|
||||
)
|
||||
|
||||
if(NOT QT_WILL_INSTALL)
|
||||
qt_internal_copy_at_build_time(TARGET Qt${QtBase_VERSION_MAJOR}AndroidBindings
|
||||
DIRECTORIES ${resource_directories}
|
||||
DESTINATION ${destination})
|
||||
endif()
|
||||
|
||||
# special case end
|
||||
|
@ -25,4 +25,13 @@ qt_copy_or_install(FILES ${template_files}
|
||||
|
||||
qt_copy_or_install(DIRECTORY ${template_directories}
|
||||
DESTINATION "${destination}")
|
||||
|
||||
if(NOT QT_WILL_INSTALL)
|
||||
qt_internal_copy_at_build_time(TARGET Qt${QtBase_VERSION_MAJOR}AndroidTemplates
|
||||
FILES ${template_files}
|
||||
DIRECTORIES ${template_directories}
|
||||
DESTINATION ${destination}
|
||||
)
|
||||
endif()
|
||||
|
||||
# special case end
|
||||
|
Loading…
Reference in New Issue
Block a user