aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2019-07-20 14:02:15 +0000
committerJussi Pakkanen <jpakkane@gmail.com>2019-07-20 17:02:15 +0300
commit9c2724bce5c6a904d1bffdb55921071163812a0e (patch)
tree57cd3503d9b72839162fee20154559bee181e472 /mesonbuild/mesonlib.py
parent4200afc74d1e6ba6d117e900799d0d82a85bae8a (diff)
downloadmeson-9c2724bce5c6a904d1bffdb55921071163812a0e.zip
meson-9c2724bce5c6a904d1bffdb55921071163812a0e.tar.gz
meson-9c2724bce5c6a904d1bffdb55921071163812a0e.tar.bz2
Add optional progress bar when generating build.ninja
Diffstat (limited to 'mesonbuild/mesonlib.py')
-rw-r--r--mesonbuild/mesonlib.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/mesonbuild/mesonlib.py b/mesonbuild/mesonlib.py
index 585a5bb..3de6462 100644
--- a/mesonbuild/mesonlib.py
+++ b/mesonbuild/mesonlib.py
@@ -1306,3 +1306,58 @@ class LibType(Enum):
STATIC = 1
PREFER_SHARED = 2
PREFER_STATIC = 3
+
+
+class ProgressBarFallback:
+ '''Fallback progress bar implementation when tqdm is not found'''
+ def __init__(self, iterable=None, total=None, bar_type=None, desc=None):
+ if iterable is not None:
+ self.iterable = iter(iterable)
+ return
+ self.total = total
+ self.done = 0
+ self.printed_dots = 0
+ if self.total and bar_type == 'download':
+ print('Download size:', self.total)
+ if desc:
+ print('{}: '.format(desc), end='')
+
+ # Pretend to be an iterator when called as one and don't print any
+ # progress
+ def __iter__(self):
+ return self.iterable
+
+ def __next__(self):
+ return next(self.iterable)
+
+ def print_dot(self):
+ print('.', end='')
+ sys.stdout.flush()
+ self.printed_dots += 1
+
+ def update(self, progress):
+ self.done += progress
+ if not self.total:
+ # Just print one dot per call if we don't have a total length
+ self.print_dot()
+ return
+ ratio = int(self.done / self.total * 10)
+ while self.printed_dots < ratio:
+ self.print_dot()
+
+ def close(self):
+ print('')
+
+try:
+ from tqdm import tqdm
+
+ class ProgressBar(tqdm):
+ def __init__(self, *args, bar_type=None, **kwargs):
+ if bar_type == 'download':
+ kwargs.update({'unit': 'bytes', 'leave': True})
+ else:
+ kwargs.update({'leave': False})
+ kwargs['ncols'] = 100
+ super().__init__(*args, **kwargs)
+except ImportError:
+ ProgressBar = ProgressBarFallback