pathlib: Fix resolve() by overriding it in Python 3.5

pull/7813/head
Daniel Mensinger 4 years ago
parent 77b5c82d07
commit 1dfaccfd91
  1. 2
      meson.py
  2. 49
      mesonbuild/_pathlib.py
  3. 4
      mesonbuild/backend/backends.py
  4. 2
      mesonbuild/backend/ninjabackend.py
  5. 4
      mesonbuild/backend/vs2010backend.py
  6. 2
      mesonbuild/cmake/client.py
  7. 2
      mesonbuild/cmake/common.py
  8. 2
      mesonbuild/cmake/executor.py
  9. 3
      mesonbuild/cmake/fileapi.py
  10. 2
      mesonbuild/cmake/interpreter.py
  11. 2
      mesonbuild/cmake/traceparser.py
  12. 2
      mesonbuild/compilers/fortran.py
  13. 2
      mesonbuild/compilers/mixins/clike.py
  14. 2
      mesonbuild/compilers/mixins/pgi.py
  15. 2
      mesonbuild/coredata.py
  16. 2
      mesonbuild/dependencies/base.py
  17. 2
      mesonbuild/dependencies/boost.py
  18. 2
      mesonbuild/dependencies/hdf5.py
  19. 2
      mesonbuild/dependencies/misc.py
  20. 2
      mesonbuild/dependencies/scalapack.py
  21. 2
      mesonbuild/interpreter.py
  22. 2
      mesonbuild/mcompile.py
  23. 2
      mesonbuild/mdist.py
  24. 2
      mesonbuild/mesondata.py
  25. 2
      mesonbuild/mesonlib.py
  26. 2
      mesonbuild/minit.py
  27. 2
      mesonbuild/mintro.py
  28. 2
      mesonbuild/mlog.py
  29. 2
      mesonbuild/modules/fs.py
  30. 2
      mesonbuild/modules/pkgconfig.py
  31. 2
      mesonbuild/modules/python.py
  32. 2
      mesonbuild/modules/unstable_external_project.py
  33. 2
      mesonbuild/msubprojects.py
  34. 2
      mesonbuild/mtest.py
  35. 2
      mesonbuild/wrap/wrap.py
  36. 2
      run_meson_command_tests.py
  37. 1
      run_mypy.py
  38. 2
      run_project_tests.py
  39. 2
      run_tests.py
  40. 2
      run_unittests.py

@ -15,7 +15,7 @@
# limitations under the License.
import sys
from pathlib import Path
from mesonbuild._pathlib import Path
# If we're run uninstalled, add the script directory to sys.path to ensure that
# we always import the correct mesonbuild modules even if PYTHONPATH is mangled

@ -0,0 +1,49 @@
# 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.
import sys
import typing as T
# Python 3.5 does not have the strict kwarg for resolve and always
# behaves like calling resolve with strict=True in Python 3.6+
#
# This module emulates the behavior of Python 3.6+ by in Python 3.5 by
# overriding the resolve method with a bit of custom logic
#
# TODO: Drop this module as soon as Python 3.5 support is dropped
if T.TYPE_CHECKING:
from pathlib import Path
else:
if sys.version_info.major <= 3 and sys.version_info.minor <= 5:
# Inspired by https://codereview.stackexchange.com/questions/162426/subclassing-pathlib-path
import pathlib
import os
# Can not directly inherit from pathlib.Path because the __new__
# operator of pathlib.Path() returns a {Posix,Windows}Path object.
class Path(type(pathlib.Path())):
def resolve(self, strict: bool = False) -> 'Path':
try:
return super().resolve()
except FileNotFoundError:
if strict:
raise
return Path(os.path.normpath(str(self)))
else:
from pathlib import Path
from pathlib import PurePath, PureWindowsPath, PurePosixPath

@ -14,7 +14,7 @@
from collections import OrderedDict
from functools import lru_cache
from pathlib import Path
from .._pathlib import Path
import enum
import json
import os
@ -917,7 +917,7 @@ class Backend:
def get_regen_filelist(self):
'''List of all files whose alteration means that the build
definition needs to be regenerated.'''
deps = [os.path.join(self.build_to_src, df)
deps = [str(Path(self.build_to_src) / df)
for df in self.interpreter.get_build_def_files()]
if self.environment.is_cross_build():
deps.extend(self.environment.coredata.cross_files)

@ -20,7 +20,7 @@ import subprocess
from collections import OrderedDict
from enum import Enum, unique
import itertools
from pathlib import PurePath, Path
from .._pathlib import PurePath, Path
from functools import lru_cache
from . import backends

@ -19,7 +19,7 @@ import xml.dom.minidom
import xml.etree.ElementTree as ET
import uuid
import typing as T
from pathlib import Path, PurePath
from .._pathlib import Path, PurePath
from . import backends
from .. import build
@ -1000,7 +1000,7 @@ class Vs2010Backend(backends.Backend):
if inc_dir not in file_inc_dirs[l]:
file_inc_dirs[l].append(inc_dir)
# Add include dirs to target as well so that "Go to Document" works in headers
if inc_dir not in target_inc_dirs:
if inc_dir not in target_inc_dirs:
target_inc_dirs.append(inc_dir)
# Split compile args needed to find external dependencies

@ -21,7 +21,7 @@ from ..mesonlib import MachineChoice
from .. import mlog
from contextlib import contextmanager
from subprocess import Popen, PIPE, TimeoutExpired
from pathlib import Path
from .._pathlib import Path
import typing as T
import json

@ -17,7 +17,7 @@
from ..mesonlib import MesonException
from .. import mlog
from pathlib import Path
from .._pathlib import Path
import typing as T
class CMakeException(MesonException):

@ -16,7 +16,7 @@
# or an interpreter-based tool.
import subprocess as S
from pathlib import Path
from .._pathlib import Path
from threading import Thread
import typing as T
import re

@ -15,7 +15,7 @@
from .common import CMakeException, CMakeBuildFile, CMakeConfiguration
import typing as T
from .. import mlog
from pathlib import Path
from .._pathlib import Path
import json
import re
@ -74,6 +74,7 @@ class CMakeFileAPI:
# Debug output
debug_json = self.build_dir / '..' / 'fileAPI.json'
debug_json = debug_json.resolve()
debug_json.write_text(json.dumps(index, indent=2))
mlog.cmd_ci_include(debug_json.as_posix())

@ -26,7 +26,7 @@ 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
from pathlib import Path
from .._pathlib import Path
import typing as T
import re
from os import environ

@ -21,7 +21,7 @@ from .. import mlog
from ..mesonlib import version_compare
import typing as T
from pathlib import Path
from .._pathlib import Path
import re
import json
import textwrap

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from pathlib import Path
from .._pathlib import Path
import typing as T
import subprocess, os

@ -28,7 +28,7 @@ import os
import re
import subprocess
import typing as T
from pathlib import Path
from ..._pathlib import Path
from ... import arglist
from ... import mesonlib

@ -16,7 +16,7 @@
import typing as T
import os
from pathlib import Path
from ..._pathlib import Path
from ..compilers import clike_debug_args, clike_optimization_args

@ -16,7 +16,7 @@ from . import mlog, mparser
import pickle, os, uuid
import sys
from itertools import chain
from pathlib import PurePath
from ._pathlib import PurePath
from collections import OrderedDict, defaultdict
from .mesonlib import (
MesonException, EnvironmentException, MachineChoice, PerMachine,

@ -27,7 +27,7 @@ import textwrap
import platform
import typing as T
from enum import Enum
from pathlib import Path, PurePath
from .._pathlib import Path, PurePath
from .. import mlog
from .. import mesonlib

@ -16,7 +16,7 @@ import os
import re
import functools
import typing as T
from pathlib import Path
from .._pathlib import Path
from .. import mlog
from .. import mesonlib

@ -19,7 +19,7 @@ import os
import re
import shutil
import subprocess
from pathlib import Path
from .._pathlib import Path
from ..mesonlib import OrderedSet, join_args
from .base import (

@ -14,7 +14,7 @@
# This file contains the detection logic for miscellaneous external dependencies.
from pathlib import Path
from .._pathlib import Path
import functools
import re
import sysconfig

@ -12,7 +12,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
from pathlib import Path
from .._pathlib import Path
import functools
import os
import typing as T

@ -36,7 +36,7 @@ from .modules import ModuleReturnValue, ExtensionModule
from .cmake import CMakeInterpreter
from .backend.backends import TestProtocol, Backend
from pathlib import Path, PurePath
from ._pathlib import Path, PurePath
import os
import shutil
import uuid

@ -21,7 +21,7 @@ import sys
import shutil
import typing as T
from collections import defaultdict
from pathlib import Path
from ._pathlib import Path
from . import mlog
from . import mesonlib

@ -21,7 +21,7 @@ import subprocess
import hashlib
import json
from glob import glob
from pathlib import Path
from ._pathlib import Path
from mesonbuild.environment import detect_ninja
from mesonbuild.mesonlib import windows_proof_rmtree, MesonException
from mesonbuild.wrap import wrap

@ -19,7 +19,7 @@
####
from pathlib import Path
from ._pathlib import Path
import typing as T
if T.TYPE_CHECKING:

@ -13,7 +13,7 @@
# limitations under the License.
"""A library of random helper functionality."""
from pathlib import Path
from ._pathlib import Path
import sys
import stat
import time

@ -14,7 +14,7 @@
"""Code that creates simple startup projects."""
from pathlib import Path
from ._pathlib import Path
from enum import Enum
import subprocess
import shutil

@ -28,7 +28,7 @@ from . import mlog
from .backend import backends
from .mparser import BaseNode, FunctionNode, ArrayNode, ArgumentNode, StringNode
from .interpreter import Interpreter
from pathlib import PurePath
from ._pathlib import PurePath
import typing as T
import os
import argparse

@ -19,7 +19,7 @@ import time
import platform
import typing as T
from contextlib import contextmanager
from pathlib import Path
from ._pathlib import Path
"""This is (mostly) a standalone module used to write logging
information about Meson runs. Some output goes to screen,

@ -14,7 +14,7 @@
import typing as T
import hashlib
from pathlib import Path, PurePath, PureWindowsPath
from .._pathlib import Path, PurePath, PureWindowsPath
from .. import mlog
from . import ExtensionModule

@ -13,7 +13,7 @@
# limitations under the License.
import os, types
from pathlib import PurePath
from .._pathlib import PurePath
from .. import build
from .. import dependencies

@ -17,7 +17,7 @@ import json
import shutil
import typing as T
from pathlib import Path
from .._pathlib import Path
from .. import mesonlib
from ..mesonlib import MachineChoice, MesonException
from . import ExtensionModule

@ -13,7 +13,7 @@
# limitations under the License.
import os, subprocess, shlex
from pathlib import Path
from .._pathlib import Path
import typing as T
from . import ExtensionModule, ModuleReturnValue

@ -1,6 +1,6 @@
import os, subprocess
import argparse
from pathlib import Path
from ._pathlib import Path
from . import mlog
from .mesonlib import quiet_git, verbose_git, GitException, Popen_safe, MesonException

@ -14,7 +14,7 @@
# A tool to run tests in many different ways.
from pathlib import Path
from ._pathlib import Path
from collections import namedtuple
from copy import deepcopy
import argparse

@ -27,7 +27,7 @@ import sys
import configparser
import typing as T
from pathlib import Path
from .._pathlib import Path
from . import WrapMode
from .. import coredata
from ..mesonlib import verbose_git, quiet_git, GIT, ProgressBar, MesonException

@ -19,7 +19,7 @@ import tempfile
import unittest
import subprocess
import zipapp
from pathlib import Path
from mesonbuild._pathlib import Path
from mesonbuild.mesonlib import windows_proof_rmtree, python_command, is_windows
from mesonbuild.coredata import version as meson_version

@ -15,6 +15,7 @@ modules = [
'mesonbuild/wrap',
# specific files
'mesonbuild/_pathlib.py',
'mesonbuild/arglist.py',
# 'mesonbuild/coredata.py',
'mesonbuild/dependencies/boost.py',

@ -17,7 +17,7 @@
from concurrent.futures import ProcessPoolExecutor, CancelledError
from enum import Enum
from io import StringIO
from pathlib import Path, PurePath
from mesonbuild._pathlib import Path, PurePath
import argparse
import functools
import itertools

@ -25,7 +25,7 @@ import argparse
from io import StringIO
from enum import Enum
from glob import glob
from pathlib import Path
from mesonbuild._pathlib import Path
from unittest import mock
from mesonbuild import compilers
from mesonbuild import dependencies

@ -39,7 +39,7 @@ from unittest import mock
from configparser import ConfigParser
from contextlib import contextmanager
from glob import glob
from pathlib import (PurePath, Path)
from mesonbuild._pathlib import (PurePath, Path)
from distutils.dir_util import copy_tree
import typing as T

Loading…
Cancel
Save