aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/build.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2018-03-01 21:52:30 +0200
committerGitHub <noreply@github.com>2018-03-01 21:52:30 +0200
commita383c5c1a5821b87abaa93ea083ca96317b410ff (patch)
tree3ea1be716edbc2e79adb932748e777774056ecd3 /mesonbuild/build.py
parent5f0aeafa387894b0893877a92db5122b86c2244d (diff)
parente0d0c0166a5d9ab008de43ad65cedd529e5e16a6 (diff)
downloadmeson-a383c5c1a5821b87abaa93ea083ca96317b410ff.zip
meson-a383c5c1a5821b87abaa93ea083ca96317b410ff.tar.gz
meson-a383c5c1a5821b87abaa93ea083ca96317b410ff.tar.bz2
Merge pull request #3150 from trhd/setups2
Fix a data pickling bug.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r--mesonbuild/build.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py
index 6ed8843..9eb74e9 100644
--- a/mesonbuild/build.py
+++ b/mesonbuild/build.py
@@ -15,6 +15,7 @@
import copy, os, re
from collections import OrderedDict
import itertools, pathlib
+import pickle
from . import environment
from . import dependencies
@@ -1928,3 +1929,22 @@ def get_sources_string_names(sources):
else:
raise AssertionError('Unknown source type: {!r}'.format(s))
return names
+
+def load(build_dir):
+ filename = os.path.join(build_dir, 'meson-private', 'build.dat')
+ load_fail_msg = 'Build data file {!r} is corrupted. Try with a fresh build tree.'.format(filename)
+ nonexisting_fail_msg = 'No such build data file as "{!r}".'.format(filename)
+ try:
+ with open(filename, 'rb') as f:
+ obj = pickle.load(f)
+ except FileNotFoundError:
+ raise MesonException(nonexisting_fail_msg)
+ except pickle.UnpicklingError:
+ raise MesonException(load_fail_msg)
+ if not isinstance(obj, Build):
+ raise MesonException(load_fail_msg)
+ return obj
+
+def save(obj, filename):
+ with open(filename, 'wb') as f:
+ pickle.dump(obj, f)