meson: performance optimizethe file object

reduce the amount of access calls to the os.
This safes ~1 sec. build time
pull/4394/merge
Marcel Hollerbach 6 years ago committed by Jussi Pakkanen
parent cd369aceee
commit 388108aa88
  1. 5
      mesonbuild/mesonlib.py

@ -21,6 +21,7 @@ import time
import platform, subprocess, operator, os, shutil, re import platform, subprocess, operator, os, shutil, re
import collections import collections
from enum import Enum from enum import Enum
from functools import lru_cache
from mesonbuild import mlog from mesonbuild import mlog
@ -223,6 +224,7 @@ class File:
return ret.format(self.relative_name()) return ret.format(self.relative_name())
@staticmethod @staticmethod
@lru_cache(maxsize=None)
def from_source_file(source_root, subdir, fname): def from_source_file(source_root, subdir, fname):
if not os.path.isfile(os.path.join(source_root, subdir, fname)): if not os.path.isfile(os.path.join(source_root, subdir, fname)):
raise MesonException('File %s does not exist.' % fname) raise MesonException('File %s does not exist.' % fname)
@ -236,12 +238,14 @@ class File:
def from_absolute_file(fname): def from_absolute_file(fname):
return File(False, '', fname) return File(False, '', fname)
@lru_cache(maxsize=None)
def rel_to_builddir(self, build_to_src): def rel_to_builddir(self, build_to_src):
if self.is_built: if self.is_built:
return self.relative_name() return self.relative_name()
else: else:
return os.path.join(build_to_src, self.subdir, self.fname) return os.path.join(build_to_src, self.subdir, self.fname)
@lru_cache(maxsize=None)
def absolute_path(self, srcdir, builddir): def absolute_path(self, srcdir, builddir):
absdir = srcdir absdir = srcdir
if self.is_built: if self.is_built:
@ -260,6 +264,7 @@ class File:
def __hash__(self): def __hash__(self):
return hash((self.fname, self.subdir, self.is_built)) return hash((self.fname, self.subdir, self.is_built))
@lru_cache(maxsize=None)
def relative_name(self): def relative_name(self):
return os.path.join(self.subdir, self.fname) return os.path.join(self.subdir, self.fname)

Loading…
Cancel
Save