diff --git a/mesonbuild/mesondata.py b/mesonbuild/mesondata.py index 5282fccf6759..398ee69dcbcf 100644 --- a/mesonbuild/mesondata.py +++ b/mesonbuild/mesondata.py @@ -30,7 +30,92 @@ # BEGIN Data section # ###################### -file_0_data_CMakeLists_txt = '''\ +file_0_data_preload_cmake = '''\ +if(MESON_PS_LOADED) + return() +endif() + +set(MESON_PS_LOADED ON) + +cmake_policy(PUSH) +cmake_policy(SET CMP0054 NEW) # https://cmake.org/cmake/help/latest/policy/CMP0054.html + +# Dummy macros that have a special meaning in the meson code +macro(meson_ps_execute_delayed_calls) +endmacro() + +macro(meson_ps_reload_vars) +endmacro() + +macro(meson_ps_disabled_function) + message(WARNING "The function '${ARGV0}' is disabled in the context of CMake subporjects.\n" + "This should not be an issue but may lead to compilaton errors.") +endmacro() + +# Helper macro to inspect the current CMake state +macro(meson_ps_inspect_vars) + set(MESON_PS_CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") + set(MESON_PS_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") + meson_ps_execute_delayed_calls() +endmacro() + + +# Override some system functions with custom code and forward the args +# to the original function +macro(add_custom_command) + meson_ps_inspect_vars() + _add_custom_command(${ARGV}) +endmacro() + +macro(add_custom_target) + meson_ps_inspect_vars() + _add_custom_target(${ARGV}) +endmacro() + +macro(set_property) + meson_ps_inspect_vars() + _set_property(${ARGV}) +endmacro() + +function(set_source_files_properties) + set(FILES) + set(I 0) + set(PROPERTIES OFF) + + while(I LESS ARGC) + if(NOT PROPERTIES) + if("${ARGV${I}}" STREQUAL "PROPERTIES") + set(PROPERTIES ON) + else() + list(APPEND FILES "${ARGV${I}}") + endif() + + math(EXPR I "${I} + 1") + else() + set(ID_IDX ${I}) + math(EXPR PROP_IDX "${ID_IDX} + 1") + + set(ID "${ARGV${ID_IDX}}") + set(PROP "${ARGV${PROP_IDX}}") + + set_property(SOURCE ${FILES} PROPERTY "${ID}" "${PROP}") + math(EXPR I "${I} + 2") + endif() + endwhile() +endfunction() + +# Disable some functions that would mess up the CMake meson integration +macro(target_precompile_headers) + meson_ps_disabled_function(target_precompile_headers) +endmacro() + +set(MESON_PS_DELAYED_CALLS add_custom_command;add_custom_target;set_property) +meson_ps_reload_vars() + +cmake_policy(POP) +''' + +file_1_data_CMakeLists_txt = '''\ # fail noisily if attempt to use this file without setting: # cmake_minimum_required(VERSION ${CMAKE_VERSION}) # project(... LANGUAGES ...) @@ -131,7 +216,7 @@ endif() ''' -file_1_data_CMakeListsLLVM_txt = '''\ +file_2_data_CMakeListsLLVM_txt = '''\ cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} ) set(PACKAGE_FOUND FALSE) @@ -229,7 +314,7 @@ endif() ''' -file_2_data_CMakePathInfo_txt = '''\ +file_3_data_CMakePathInfo_txt = '''\ cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}) set(TMP_PATHS_LIST) @@ -263,91 +348,6 @@ message(STATUS ${TMP_PATHS_LIST}) ''' -file_3_data_preload_cmake = '''\ -if(MESON_PS_LOADED) - return() -endif() - -set(MESON_PS_LOADED ON) - -cmake_policy(PUSH) -cmake_policy(SET CMP0054 NEW) # https://cmake.org/cmake/help/latest/policy/CMP0054.html - -# Dummy macros that have a special meaning in the meson code -macro(meson_ps_execute_delayed_calls) -endmacro() - -macro(meson_ps_reload_vars) -endmacro() - -macro(meson_ps_disabled_function) - message(WARNING "The function '${ARGV0}' is disabled in the context of CMake subporjects.\n" - "This should not be an issue but may lead to compilaton errors.") -endmacro() - -# Helper macro to inspect the current CMake state -macro(meson_ps_inspect_vars) - set(MESON_PS_CMAKE_CURRENT_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}") - set(MESON_PS_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") - meson_ps_execute_delayed_calls() -endmacro() - - -# Override some system functions with custom code and forward the args -# to the original function -macro(add_custom_command) - meson_ps_inspect_vars() - _add_custom_command(${ARGV}) -endmacro() - -macro(add_custom_target) - meson_ps_inspect_vars() - _add_custom_target(${ARGV}) -endmacro() - -macro(set_property) - meson_ps_inspect_vars() - _set_property(${ARGV}) -endmacro() - -function(set_source_files_properties) - set(FILES) - set(I 0) - set(PROPERTIES OFF) - - while(I LESS ARGC) - if(NOT PROPERTIES) - if("${ARGV${I}}" STREQUAL "PROPERTIES") - set(PROPERTIES ON) - else() - list(APPEND FILES "${ARGV${I}}") - endif() - - math(EXPR I "${I} + 1") - else() - set(ID_IDX ${I}) - math(EXPR PROP_IDX "${ID_IDX} + 1") - - set(ID "${ARGV${ID_IDX}}") - set(PROP "${ARGV${PROP_IDX}}") - - set_property(SOURCE ${FILES} PROPERTY "${ID}" "${PROP}") - math(EXPR I "${I} + 2") - endif() - endwhile() -endfunction() - -# Disable some functions that would mess up the CMake meson integration -macro(target_precompile_headers) - meson_ps_disabled_function(target_precompile_headers) -endmacro() - -set(MESON_PS_DELAYED_CALLS add_custom_command;add_custom_target;set_property) -meson_ps_reload_vars() - -cmake_policy(POP) -''' - #################### # END Data section # @@ -371,24 +371,24 @@ def write_to_private(self, env: 'Environment') -> Path: mesondata = { + 'cmake/data/preload.cmake': DataFile( + Path('cmake/data/preload.cmake'), + '2b4e632aeb74acb2b441880cf85c0b6fcab03e75b182d3077715a97e739a7918', + file_0_data_preload_cmake, + ), 'dependencies/data/CMakeLists.txt': DataFile( Path('dependencies/data/CMakeLists.txt'), '4dca24afa13e9311f0598a6ac29690490819bd7d82cfdaa0a2fe5eea3c0fa0d5', - file_0_data_CMakeLists_txt, + file_1_data_CMakeLists_txt, ), 'dependencies/data/CMakeListsLLVM.txt': DataFile( Path('dependencies/data/CMakeListsLLVM.txt'), '412cec3315597041a978d018cdaca282dcd47693793540da88ae2f80d0cbd7cd', - file_1_data_CMakeListsLLVM_txt, + file_2_data_CMakeListsLLVM_txt, ), 'dependencies/data/CMakePathInfo.txt': DataFile( Path('dependencies/data/CMakePathInfo.txt'), '90da8b443982d9c87139b7dc84228eb58cab4315764949637208f25e2bda7db2', - file_2_data_CMakePathInfo_txt, - ), - 'cmake/data/preload.cmake': DataFile( - Path('cmake/data/preload.cmake'), - '2b4e632aeb74acb2b441880cf85c0b6fcab03e75b182d3077715a97e739a7918', - file_3_data_preload_cmake, + file_3_data_CMakePathInfo_txt, ), } diff --git a/tools/gen_data.py b/tools/gen_data.py index 4c1682302780..9affc660f2f7 100755 --- a/tools/gen_data.py +++ b/tools/gen_data.py @@ -43,7 +43,7 @@ def main() -> int: mesonbuild_dir = root_dir / 'mesonbuild' out_file = mesonbuild_dir / 'mesondata.py' - data_dirs = mesonbuild_dir.glob('**/data') + data_dirs = sorted(mesonbuild_dir.glob('**/data')) data_files: T.List[DataFile] = []