summaryrefslogtreecommitdiff
path: root/mesonbuild/modules
diff options
context:
space:
mode:
authorTristan Partin <tristan@partin.io>2023-08-18 00:04:12 -0500
committerXavier Claessens <xclaesse@gmail.com>2023-08-18 07:46:08 -0400
commit946a3561c2f45b2e522f695a08516333cf7ec9d4 (patch)
tree84a7f16b6da32300686ee0554d440317aca92985 /mesonbuild/modules
parent22f90fd469a2742a2bb2d4f79e4a585a525ea934 (diff)
downloadmeson-946a3561c2f45b2e522f695a08516333cf7ec9d4.tar.gz
Revert "Revert "Add fs.relative_to()""
This reverts commit 84c8905d527893bedc673e8a036b8b2ec89368b4. Fixed the cygwin failure...
Diffstat (limited to 'mesonbuild/modules')
-rw-r--r--mesonbuild/modules/fs.py29
1 files changed, 22 insertions, 7 deletions
diff --git a/mesonbuild/modules/fs.py b/mesonbuild/modules/fs.py
index c14548659..5a9533cba 100644
--- a/mesonbuild/modules/fs.py
+++ b/mesonbuild/modules/fs.py
@@ -20,19 +20,16 @@ import typing as T
from . import ExtensionModule, ModuleReturnValue, ModuleInfo
from .. import mlog
-from ..build import CustomTarget, InvalidArguments
+from ..build import BuildTarget, CustomTarget, CustomTargetIndex, InvalidArguments
from ..interpreter.type_checking import INSTALL_KW, INSTALL_MODE_KW, INSTALL_TAG_KW, NoneType
from ..interpreterbase import FeatureNew, KwargInfo, typed_kwargs, typed_pos_args, noKwargs
-from ..mesonlib import (
- File,
- MesonException,
- has_path_sep,
- path_is_in_root,
-)
+from ..mesonlib import File, MesonException, has_path_sep, path_is_in_root, relpath
if T.TYPE_CHECKING:
from . import ModuleState
+ from ..build import BuildTargetTypes
from ..interpreter import Interpreter
+ from ..interpreterbase import TYPE_kwargs
from ..mesonlib import FileOrString, FileMode
from typing_extensions import TypedDict
@@ -75,6 +72,7 @@ class FSModule(ExtensionModule):
'stem': self.stem,
'read': self.read,
'copyfile': self.copyfile,
+ 'relative_to': self.relative_to,
})
def _absolute_dir(self, state: 'ModuleState', arg: 'FileOrString') -> Path:
@@ -313,6 +311,23 @@ class FSModule(ExtensionModule):
return ModuleReturnValue(ct, [ct])
+ @FeatureNew('fs.relative_to', '1.3.0')
+ @typed_pos_args('fs.relative_to', (str, File, CustomTarget, CustomTargetIndex, BuildTarget), (str, File, CustomTarget, CustomTargetIndex, BuildTarget))
+ @noKwargs
+ def relative_to(self, state: ModuleState, args: T.Tuple[T.Union[FileOrString, BuildTargetTypes], T.Union[FileOrString, BuildTargetTypes]], kwargs: TYPE_kwargs) -> str:
+ def to_path(arg: T.Union[FileOrString, CustomTarget, CustomTargetIndex, BuildTarget]) -> str:
+ if isinstance(arg, File):
+ return arg.absolute_path(state.environment.source_dir, state.environment.build_dir)
+ elif isinstance(arg, (CustomTarget, CustomTargetIndex, BuildTarget)):
+ return state.backend.get_target_filename_abs(arg)
+ else:
+ return os.path.join(state.environment.source_dir, state.subdir, arg)
+
+ t = to_path(args[0])
+ f = to_path(args[1])
+
+ return relpath(t, f)
+
def initialize(*args: T.Any, **kwargs: T.Any) -> FSModule:
return FSModule(*args, **kwargs)