meson: backport no setuptools patch
authorRosen Penev <redacted>
Fri, 24 Jul 2020 23:50:27 +0000 (16:50 -0700)
committerRosen Penev <redacted>
Sat, 25 Jul 2020 07:25:55 +0000 (00:25 -0700)
It seems this was cut after the release. Fixes CircleCI compilation.

Remove distutils patch. It looks like it does nothing.

Signed-off-by: Rosen Penev <redacted>
devel/meson/Makefile
devel/meson/patches/010-no-distutils.patch [deleted file]
devel/meson/patches/010-no-setuptools.patch [new file with mode: 0644]

index 3650d2e91450f7ca57f01a0a6fce1a0135dae613..8c1a5ef3dfe6a89d600474034598101ac858d4da 100644 (file)
@@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=meson
 PKG_VERSION:=0.55.0
-PKG_RELEASE:=1
+PKG_RELEASE:=2
 
 PYPI_NAME:=meson
 PKG_HASH:=0a1ae2bfe2ae14ac47593537f93290fb79e9b775c55b4c53c282bc3ca3745b35
diff --git a/devel/meson/patches/010-no-distutils.patch b/devel/meson/patches/010-no-distutils.patch
deleted file mode 100644 (file)
index fec6484..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-From 18955611bafb1924fd1e188359f62d0799acb77e Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= <hugo@beauzee.fr>
-Date: Fri, 24 Apr 2020 15:40:01 +0200
-Subject: [PATCH] modules: python: Fix python detection without distutils
- module
-
-If distutils isn't present but not required by the called, we can still
-return a valid python installation
----
- mesonbuild/modules/python.py | 13 ++++++++-----
- 1 file changed, 8 insertions(+), 5 deletions(-)
-
-diff --git a/mesonbuild/modules/python.py b/mesonbuild/modules/python.py
-index a5c58a25c3..31406847a3 100644
---- a/mesonbuild/modules/python.py
-+++ b/mesonbuild/modules/python.py
-@@ -266,10 +266,13 @@ import sys
- install_paths = sysconfig.get_paths(scheme='posix_prefix', vars={'base': '', 'platbase': '', 'installed_base': ''})
- def links_against_libpython():
--    from distutils.core import Distribution, Extension
--    cmd = Distribution().get_command_obj('build_ext')
--    cmd.ensure_finalized()
--    return bool(cmd.get_libraries(Extension('dummy', [])))
-+    try:
-+        from distutils.core import Distribution, Extension
-+        cmd = Distribution().get_command_obj('build_ext')
-+        cmd.ensure_finalized()
-+        return bool(cmd.get_libraries(Extension('dummy', [])))
-+    except ModuleNotFoundError:
-+        return False
- print (json.dumps ({
-   'variables': sysconfig.get_config_vars(),
-@@ -585,7 +588,7 @@ class PythonModule(ExtensionModule):
-             else:
-                 res = ExternalProgramHolder(NonExistingExternalProgram(), state.subproject)
-                 if required:
--                    raise mesonlib.MesonException('{} is not a valid python or it is missing setuptools'.format(python))
-+                    raise mesonlib.MesonException('{} is not a valid python'.format(python))
-         return res
diff --git a/devel/meson/patches/010-no-setuptools.patch b/devel/meson/patches/010-no-setuptools.patch
new file mode 100644 (file)
index 0000000..71e97ed
--- /dev/null
@@ -0,0 +1,685 @@
+From 019ed04331695bb6f5c5fff70dfced34c4ba9012 Mon Sep 17 00:00:00 2001
+From: Daniel Mensinger <daniel@mensinger-ka.de>
+Date: Thu, 16 Jul 2020 20:29:34 +0200
+Subject: [PATCH 1/3] mdata: Generate mesondata.py from */data folders
+
+---
+ mesonbuild/mesondata.py | 374 ++++++++++++++++++++++++++++++++++++++++
+ tools/gen_data.py       | 139 +++++++++++++++
+ 2 files changed, 513 insertions(+)
+ create mode 100644 mesonbuild/mesondata.py
+ create mode 100755 tools/gen_data.py
+
+diff --git a/mesonbuild/mesondata.py b/mesonbuild/mesondata.py
+new file mode 100644
+index 0000000000..1f223c251b
+--- /dev/null
++++ b/mesonbuild/mesondata.py
+@@ -0,0 +1,374 @@
++# Copyright 2020 The Meson development team
++
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at
++
++#     http://www.apache.org/licenses/LICENSE-2.0
++
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++
++
++####
++####  WARNING: This is an automatically generated file! Do not edit!
++####           Generated by tools/gen_data.py
++####
++
++
++from pathlib import Path
++import typing as T
++
++if T.TYPE_CHECKING:
++    from .environment import Environment
++
++######################
++# BEGIN Data section #
++######################
++
++file_0_data_CMakeListsLLVM_txt = '''\
++cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION} )
++
++set(PACKAGE_FOUND FALSE)
++
++while(TRUE)
++  find_package(LLVM REQUIRED CONFIG QUIET)
++
++  # ARCHS has to be set via the CMD interface
++  if(LLVM_FOUND OR "${ARCHS}" STREQUAL "")
++    break()
++  endif()
++
++  list(GET       ARCHS 0 CMAKE_LIBRARY_ARCHITECTURE)
++  list(REMOVE_AT ARCHS 0)
++endwhile()
++
++if(LLVM_FOUND)
++  set(PACKAGE_FOUND TRUE)
++
++  foreach(mod IN LISTS LLVM_MESON_MODULES)
++    # Reset variables
++    set(out_mods)
++    set(real_mods)
++
++    # Generate a lower and upper case version
++    string(TOLOWER "${mod}" mod_L)
++    string(TOUPPER "${mod}" mod_U)
++
++    # Get the mapped components
++    llvm_map_components_to_libnames(out_mods ${mod} ${mod_L} ${mod_U})
++    list(SORT              out_mods)
++    list(REMOVE_DUPLICATES out_mods)
++
++    # Make sure that the modules exist
++    foreach(i IN LISTS out_mods)
++      if(TARGET ${i})
++        list(APPEND real_mods ${i})
++      endif()
++    endforeach()
++
++    # Set the output variables
++    set(MESON_LLVM_TARGETS_${mod} ${real_mods})
++    foreach(i IN LISTS real_mods)
++      set(MESON_TARGET_TO_LLVM_${i} ${mod})
++    endforeach()
++  endforeach()
++
++  # Check the following variables:
++  # LLVM_PACKAGE_VERSION
++  # LLVM_VERSION
++  # LLVM_VERSION_STRING
++  if(NOT DEFINED PACKAGE_VERSION)
++    if(DEFINED LLVM_PACKAGE_VERSION)
++      set(PACKAGE_VERSION "${LLVM_PACKAGE_VERSION}")
++    elseif(DEFINED LLVM_VERSION)
++      set(PACKAGE_VERSION "${LLVM_VERSION}")
++    elseif(DEFINED LLVM_VERSION_STRING)
++      set(PACKAGE_VERSION "${LLVM_VERSION_STRING}")
++    endif()
++  endif()
++
++  # Check the following variables:
++  # LLVM_LIBRARIES
++  # LLVM_LIBS
++  set(libs)
++  if(DEFINED LLVM_LIBRARIES)
++    set(libs LLVM_LIBRARIES)
++  elseif(DEFINED LLVM_LIBS)
++    set(libs LLVM_LIBS)
++  endif()
++
++  # Check the following variables:
++  # LLVM_INCLUDE_DIRS
++  # LLVM_INCLUDES
++  # LLVM_INCLUDE_DIR
++  set(includes)
++  if(DEFINED LLVM_INCLUDE_DIRS)
++    set(includes LLVM_INCLUDE_DIRS)
++  elseif(DEFINED LLVM_INCLUDES)
++    set(includes LLVM_INCLUDES)
++  elseif(DEFINED LLVM_INCLUDE_DIR)
++    set(includes LLVM_INCLUDE_DIR)
++  endif()
++
++  # Check the following variables:
++  # LLVM_DEFINITIONS
++  set(definitions)
++  if(DEFINED LLVM_DEFINITIONS)
++    set(definitions LLVM_DEFINITIONS)
++  endif()
++
++  set(PACKAGE_INCLUDE_DIRS "${${includes}}")
++  set(PACKAGE_DEFINITIONS  "${${definitions}}")
++  set(PACKAGE_LIBRARIES    "${${libs}}")
++endif()
++'''
++
++file_1_data_CMakePathInfo_txt = '''\
++cmake_minimum_required(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION})
++
++set(TMP_PATHS_LIST)
++list(APPEND TMP_PATHS_LIST ${CMAKE_PREFIX_PATH})
++list(APPEND TMP_PATHS_LIST ${CMAKE_FRAMEWORK_PATH})
++list(APPEND TMP_PATHS_LIST ${CMAKE_APPBUNDLE_PATH})
++list(APPEND TMP_PATHS_LIST $ENV{CMAKE_PREFIX_PATH})
++list(APPEND TMP_PATHS_LIST $ENV{CMAKE_FRAMEWORK_PATH})
++list(APPEND TMP_PATHS_LIST $ENV{CMAKE_APPBUNDLE_PATH})
++list(APPEND TMP_PATHS_LIST ${CMAKE_SYSTEM_PREFIX_PATH})
++list(APPEND TMP_PATHS_LIST ${CMAKE_SYSTEM_FRAMEWORK_PATH})
++list(APPEND TMP_PATHS_LIST ${CMAKE_SYSTEM_APPBUNDLE_PATH})
++
++set(LIB_ARCH_LIST)
++if(CMAKE_LIBRARY_ARCHITECTURE_REGEX)
++  file(GLOB implicit_dirs RELATIVE /lib /lib/*-linux-gnu* )
++  foreach(dir ${implicit_dirs})
++    if("${dir}" MATCHES "${CMAKE_LIBRARY_ARCHITECTURE_REGEX}")
++      list(APPEND LIB_ARCH_LIST "${dir}")
++    endif()
++  endforeach()
++endif()
++
++# "Export" these variables:
++set(MESON_ARCH_LIST ${LIB_ARCH_LIST})
++set(MESON_PATHS_LIST ${TMP_PATHS_LIST})
++set(MESON_CMAKE_ROOT ${CMAKE_ROOT})
++set(MESON_CMAKE_SYSROOT ${CMAKE_SYSROOT})
++set(MESON_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH})
++
++message(STATUS ${TMP_PATHS_LIST})
++'''
++
++file_2_data_CMakeLists_txt = '''\
++# fail noisily if attempt to use this file without setting:
++# cmake_minimum_required(VERSION ${CMAKE_VERSION})
++# project(... LANGUAGES ...)
++
++cmake_policy(SET CMP0000 NEW)
++
++set(PACKAGE_FOUND FALSE)
++set(_packageName "${NAME}")
++string(TOUPPER "${_packageName}" PACKAGE_NAME)
++
++while(TRUE)
++  find_package("${NAME}" QUIET COMPONENTS ${COMPS})
++
++  # ARCHS has to be set via the CMD interface
++  if(${_packageName}_FOUND OR ${PACKAGE_NAME}_FOUND OR "${ARCHS}" STREQUAL "")
++    break()
++  endif()
++
++  list(GET       ARCHS 0 CMAKE_LIBRARY_ARCHITECTURE)
++  list(REMOVE_AT ARCHS 0)
++endwhile()
++
++if(${_packageName}_FOUND  OR  ${PACKAGE_NAME}_FOUND)
++  set(PACKAGE_FOUND TRUE)
++
++  # Check the following variables:
++  # FOO_VERSION
++  # Foo_VERSION
++  # FOO_VERSION_STRING
++  # Foo_VERSION_STRING
++  if(NOT DEFINED PACKAGE_VERSION)
++    if(DEFINED ${_packageName}_VERSION)
++      set(PACKAGE_VERSION "${${_packageName}_VERSION}")
++    elseif(DEFINED ${PACKAGE_NAME}_VERSION)
++      set(PACKAGE_VERSION "${${PACKAGE_NAME}_VERSION}")
++    elseif(DEFINED ${_packageName}_VERSION_STRING)
++      set(PACKAGE_VERSION "${${_packageName}_VERSION_STRING}")
++    elseif(DEFINED ${PACKAGE_NAME}_VERSION_STRING)
++      set(PACKAGE_VERSION "${${PACKAGE_NAME}_VERSION_STRING}")
++    endif()
++  endif()
++
++  # Check the following variables:
++  # FOO_LIBRARIES
++  # Foo_LIBRARIES
++  # FOO_LIBS
++  # Foo_LIBS
++  set(libs)
++  if(DEFINED ${_packageName}_LIBRARIES)
++    set(libs ${_packageName}_LIBRARIES)
++  elseif(DEFINED ${PACKAGE_NAME}_LIBRARIES)
++    set(libs ${PACKAGE_NAME}_LIBRARIES)
++  elseif(DEFINED ${_packageName}_LIBS)
++    set(libs ${_packageName}_LIBS)
++  elseif(DEFINED ${PACKAGE_NAME}_LIBS)
++    set(libs ${PACKAGE_NAME}_LIBS)
++  endif()
++
++  # Check the following variables:
++  # FOO_INCLUDE_DIRS
++  # Foo_INCLUDE_DIRS
++  # FOO_INCLUDES
++  # Foo_INCLUDES
++  # FOO_INCLUDE_DIR
++  # Foo_INCLUDE_DIR
++  set(includes)
++  if(DEFINED ${_packageName}_INCLUDE_DIRS)
++    set(includes ${_packageName}_INCLUDE_DIRS)
++  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIRS)
++    set(includes ${PACKAGE_NAME}_INCLUDE_DIRS)
++  elseif(DEFINED ${_packageName}_INCLUDES)
++    set(includes ${_packageName}_INCLUDES)
++  elseif(DEFINED ${PACKAGE_NAME}_INCLUDES)
++    set(includes ${PACKAGE_NAME}_INCLUDES)
++  elseif(DEFINED ${_packageName}_INCLUDE_DIR)
++    set(includes ${_packageName}_INCLUDE_DIR)
++  elseif(DEFINED ${PACKAGE_NAME}_INCLUDE_DIR)
++    set(includes ${PACKAGE_NAME}_INCLUDE_DIR)
++  endif()
++
++  # Check the following variables:
++  # FOO_DEFINITIONS
++  # Foo_DEFINITIONS
++  set(definitions)
++  if(DEFINED ${_packageName}_DEFINITIONS)
++    set(definitions ${_packageName}_DEFINITIONS)
++  elseif(DEFINED ${PACKAGE_NAME}_DEFINITIONS)
++    set(definitions ${PACKAGE_NAME}_DEFINITIONS)
++  endif()
++
++  set(PACKAGE_INCLUDE_DIRS "${${includes}}")
++  set(PACKAGE_DEFINITIONS  "${${definitions}}")
++  set(PACKAGE_LIBRARIES    "${${libs}}")
++endif()
++'''
++
++file_3_data_preload_cmake = '''\
++if(MESON_PS_LOADED)
++  return()
++endif()
++
++set(MESON_PS_LOADED ON)
++
++# Dummy macros that have a special meaning in the meson code
++macro(meson_ps_execute_delayed_calls)
++endmacro()
++
++macro(meson_ps_reload_vars)
++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()
++
++set(MESON_PS_DELAYED_CALLS add_custom_command;add_custom_target;set_property)
++meson_ps_reload_vars()
++'''
++
++
++####################
++# END Data section #
++####################
++
++class DataFile:
++    def __init__(self, path: Path, sha256sum: str, data: str) -> None:
++        self.path = path
++        self.sha256sum = sha256sum
++        self.data = data
++
++    def write_once(self, path: Path) -> None:
++        if not path.exists():
++            path.write_text(self.data)
++
++    def write_to_private(self, env: 'Environment') -> Path:
++        out_file = Path(env.scratch_dir) / 'data' / self.path.name
++        out_file.parent.mkdir(exist_ok=True)
++        self.write_once(out_file)
++        return out_file
++
++
++mesondata = {
++    'dependencies/data/CMakeListsLLVM.txt': DataFile(
++        Path('dependencies/data/CMakeListsLLVM.txt'),
++        '412cec3315597041a978d018cdaca282dcd47693793540da88ae2f80d0cbd7cd',
++        file_0_data_CMakeListsLLVM_txt,
++    ),
++    'dependencies/data/CMakePathInfo.txt': DataFile(
++        Path('dependencies/data/CMakePathInfo.txt'),
++        '90da8b443982d9c87139b7dc84228eb58cab4315764949637208f25e2bda7db2',
++        file_1_data_CMakePathInfo_txt,
++    ),
++    'dependencies/data/CMakeLists.txt': DataFile(
++        Path('dependencies/data/CMakeLists.txt'),
++        '71a2d58381f912bbfb1c8709884d34d721f682edf2fca001e1f582f0bffd0da7',
++        file_2_data_CMakeLists_txt,
++    ),
++    'cmake/data/preload.cmake': DataFile(
++        Path('cmake/data/preload.cmake'),
++        '064d047b18a5c919ad016b838bed50c5d40aebe9e53da0e70eff9d52a2c1ca1f',
++        file_3_data_preload_cmake,
++    ),
++}
+diff --git a/tools/gen_data.py b/tools/gen_data.py
+new file mode 100755
+index 0000000000..2cc05a44e7
+--- /dev/null
++++ b/tools/gen_data.py
+@@ -0,0 +1,139 @@
++#!/usr/bin/env python3
++
++# Copyright 2020 Daniel Mensinger
++
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at
++
++#     http://www.apache.org/licenses/LICENSE-2.0
++
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++
++import sys
++import hashlib
++import textwrap
++import re
++from pathlib import Path
++from datetime import datetime
++import typing as T
++
++class DataFile:
++    file_counter = 0
++
++    def __init__(self, path: Path, root: Path):
++        self.path = path
++        self.id = self.path.relative_to(root)
++        self.data_str = f'file_{DataFile.file_counter}_data_' + re.sub('[^a-zA-Z0-9]', '_', self.path.name)
++        DataFile.file_counter += 1
++
++        b = self.path.read_bytes()
++        self.data = b.decode()
++        self.sha256sum = hashlib.sha256(b).hexdigest()
++
++    def __repr__(self) -> str:
++        return f'<{type(self).__name__}: [{self.sha256sum}] {self.id}>'
++
++def main() -> int:
++    root_dir = Path(__file__).resolve().parents[1]
++    mesonbuild_dir = root_dir / 'mesonbuild'
++    out_file = mesonbuild_dir / 'mesondata.py'
++
++    data_dirs = mesonbuild_dir.glob('**/data')
++
++    data_files: T.List[DataFile] = []
++
++    for d in data_dirs:
++        for p in d.iterdir():
++            data_files += [DataFile(p, mesonbuild_dir)]
++
++    print(f'Found {len(data_files)} data files')
++
++    # Generate the data script
++    data = ''
++
++    data += textwrap.dedent(f'''\
++        # Copyright {datetime.today().year} The Meson development team
++
++        # Licensed under the Apache License, Version 2.0 (the "License");
++        # you may not use this file except in compliance with the License.
++        # You may obtain a copy of the License at
++
++        #     http://www.apache.org/licenses/LICENSE-2.0
++
++        # Unless required by applicable law or agreed to in writing, software
++        # distributed under the License is distributed on an "AS IS" BASIS,
++        # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++        # See the License for the specific language governing permissions and
++        # limitations under the License.
++
++
++        ####
++        ####  WARNING: This is an automatically generated file! Do not edit!
++        ####           Generated by {Path(__file__).resolve().relative_to(root_dir)}
++        ####
++
++
++        from pathlib import Path
++        import typing as T
++
++        if T.TYPE_CHECKING:
++            from .environment import Environment
++
++        ######################
++        # BEGIN Data section #
++        ######################
++
++    ''')
++
++    for i in data_files:
++        data += f"{i.data_str} = '''\\\n{i.data}'''\n\n"
++
++    data += textwrap.dedent(f'''
++        ####################
++        # END Data section #
++        ####################
++
++        class DataFile:
++            def __init__(self, path: Path, sha256sum: str, data: str) -> None:
++                self.path = path
++                self.sha256sum = sha256sum
++                self.data = data
++
++            def write_once(self, path: Path) -> None:
++                if not path.exists():
++                    path.write_text(self.data)
++
++            def write_to_private(self, env: 'Environment') -> Path:
++                out_file = Path(env.scratch_dir) / 'data' / self.path.name
++                out_file.parent.mkdir(exist_ok=True)
++                self.write_once(out_file)
++                return out_file
++
++
++        mesondata = {{
++    ''')
++
++    for i in data_files:
++        data += textwrap.indent(textwrap.dedent(f"""\
++            '{i.id}': DataFile(
++                Path('{i.id}'),
++                '{i.sha256sum}',
++                {i.data_str},
++            ),
++        """), '    ')
++
++    data += textwrap.dedent('''\
++        }
++    ''')
++
++    print(f'Updating {out_file}')
++    out_file.write_text(data)
++    return 0
++
++if __name__ == '__main__':
++    sys.exit(main())
+
+From 05ddd6543d4c4fc33b4c64f26291e73f49733f71 Mon Sep 17 00:00:00 2001
+From: Daniel Mensinger <daniel@mensinger-ka.de>
+Date: Thu, 16 Jul 2020 20:33:57 +0200
+Subject: [PATCH 2/3] mdata: remove setuptools and use mesondata instead
+
+---
+ mesonbuild/cmake/interpreter.py | 5 ++---
+ mesonbuild/dependencies/base.py | 6 ++----
+ setup.py                        | 5 -----
+ 4 files changed, 4 insertions(+), 16 deletions(-)
+
+diff --git a/mesonbuild/cmake/interpreter.py b/mesonbuild/cmake/interpreter.py
+index 05169478e8..f404109cf6 100644
+--- a/mesonbuild/cmake/interpreter.py
++++ b/mesonbuild/cmake/interpreter.py
+@@ -15,8 +15,6 @@
+ # This class contains the basic functionality needed to run any interpreter
+ # or an interpreter-based tool.
+-import pkg_resources
+-
+ from .common import CMakeException, CMakeTarget, TargetOptions
+ from .client import CMakeClient, RequestCMakeInputs, RequestConfigure, RequestCompute, RequestCodeModel
+ from .fileapi import CMakeFileAPI
+@@ -25,6 +23,7 @@
+ from .. import mlog, mesonlib
+ from ..environment import Environment
+ from ..mesonlib import MachineChoice, OrderedSet, version_compare
++from ..mesondata import mesondata
+ from ..compilers.compilers import lang_suffixes, header_suffixes, obj_suffixes, lib_suffixes, is_header
+ from enum import Enum
+ from functools import lru_cache
+@@ -814,7 +813,7 @@ def configure(self, extra_cmake_options: T.List[str]) -> None:
+             raise CMakeException('Unable to find CMake')
+         self.trace = CMakeTraceParser(cmake_exe.version(), self.build_dir, permissive=True)
+-        preload_file = pkg_resources.resource_filename('mesonbuild', 'cmake/data/preload.cmake')
++        preload_file = mesondata['cmake/data/preload.cmake'].write_to_private(self.env)
+         # Prefere CMAKE_PROJECT_INCLUDE over CMAKE_TOOLCHAIN_FILE if possible,
+         # since CMAKE_PROJECT_INCLUDE was actually designed for code injection.
+diff --git a/mesonbuild/dependencies/base.py b/mesonbuild/dependencies/base.py
+index 23701da957..4c9c9fe18a 100644
+--- a/mesonbuild/dependencies/base.py
++++ b/mesonbuild/dependencies/base.py
+@@ -29,8 +29,6 @@
+ from enum import Enum
+ from pathlib import Path, PurePath
+-import pkg_resources
+-
+ from .. import mlog
+ from .. import mesonlib
+ from ..compilers import clib_langs
+@@ -40,6 +38,7 @@
+ from ..mesonlib import MachineChoice, MesonException, OrderedSet, PerMachine
+ from ..mesonlib import Popen_safe, version_compare_many, version_compare, listify, stringlistify, extract_as_list, split_args
+ from ..mesonlib import Version, LibType
++from ..mesondata import mesondata
+ if T.TYPE_CHECKING:
+     from ..compilers.compilers import CompilerType  # noqa: F401
+@@ -1512,8 +1511,7 @@ def _setup_cmake_dir(self, cmake_file: str) -> str:
+         build_dir = self._get_build_dir()
+         # Insert language parameters into the CMakeLists.txt and write new CMakeLists.txt
+-        # Per the warning in pkg_resources, this is *not* a path and os.path and Pathlib are *not* safe to use here.
+-        cmake_txt = pkg_resources.resource_string('mesonbuild', 'dependencies/data/' + cmake_file).decode()
++        cmake_txt = mesondata['dependencies/data/' + cmake_file].data
+         # In general, some Fortran CMake find_package() also require C language enabled,
+         # even if nothing from C is directly used. An easy Fortran example that fails
+diff --git a/setup.py b/setup.py
+index 1f95be70c8..145f19c522 100644
+--- a/setup.py
++++ b/setup.py
+@@ -37,10 +37,6 @@
+             'mesonbuild.scripts',
+             'mesonbuild.templates',
+             'mesonbuild.wrap']
+-package_data = {
+-    'mesonbuild.dependencies': ['data/CMakeLists.txt', 'data/CMakeListsLLVM.txt', 'data/CMakePathInfo.txt'],
+-    'mesonbuild.cmake': ['data/run_ctgt.py', 'data/preload.cmake'],
+-}
+ data_files = []
+ if sys.platform != 'win32':
+     # Only useful on UNIX-like systems
+@@ -51,6 +47,5 @@
+     setup(name='meson',
+           version=version,
+           packages=packages,
+-          package_data=package_data,
+           entry_points=entries,
+           data_files=data_files,)
+
+From 393d6e133d9abd584a2fc414971628e84ea48b7c Mon Sep 17 00:00:00 2001
+From: Daniel Mensinger <daniel@mensinger-ka.de>
+Date: Thu, 16 Jul 2020 20:34:15 +0200
+Subject: [PATCH 3/3] mdata: Add test to ensure mesondata.py is up-to-date
+
+---
+ run_unittests.py | 32 ++++++++++++++++++++++++++++++++
+ 1 file changed, 32 insertions(+)
+
+diff --git a/run_unittests.py b/run_unittests.py
+index 820b705b54..2c03a3e75c 100755
+--- a/run_unittests.py
++++ b/run_unittests.py
+@@ -1485,6 +1485,38 @@ def test_all_functions_defined_in_ast_interpreter(self):
+         astint = AstInterpreter('.', '', '')
+         self.assertEqual(set(interp.funcs.keys()), set(astint.funcs.keys()))
++    def test_mesondata_is_up_to_date(self):
++        from mesonbuild.mesondata import mesondata
++        err_msg = textwrap.dedent('''
++
++            ###########################################################
++            ###        mesonbuild.mesondata is not up-to-date       ###
++            ###  Please regenerate it by running tools/gen_data.py  ###
++            ###########################################################
++
++        ''')
++
++        root_dir = Path(__file__).resolve().parent
++        mesonbuild_dir = root_dir / 'mesonbuild'
++
++        data_dirs = mesonbuild_dir.glob('**/data')
++        data_files = []  # type: T.List[T.Tuple(str, str)]
++
++        for i in data_dirs:
++            for p in i.iterdir():
++                data_files += [(p.relative_to(mesonbuild_dir).as_posix(), hashlib.sha256(p.read_bytes()).hexdigest())]
++
++        from pprint import pprint
++        current_files = set(mesondata.keys())
++        scanned_files = set([x[0] for x in data_files])
++
++        self.assertSetEqual(current_files, scanned_files, err_msg + 'Data files were added or removed\n')
++        errors = []
++        for i in data_files:
++            if mesondata[i[0]].sha256sum != i[1]:
++                errors += [i[0]]
++
++        self.assertListEqual(errors, [], err_msg + 'Files were changed')
+ class BasePlatformTests(unittest.TestCase):
+     prefix = '/usr'
git clone https://git.99rst.org/PROJECT