diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 16:06:49 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 16:06:49 +0200 |
commit | 2f11f964e7c978d257a177eb19886ebfe51a3de7 (patch) | |
tree | 3a8120636b56b12a431898a7be4680347d481874 /runbuilder.py | |
parent | 1a52840c37ff79cb3a8f19d7d9e3e4202e4b6470 (diff) | |
download | meson-2f11f964e7c978d257a177eb19886ebfe51a3de7.zip meson-2f11f964e7c978d257a177eb19886ebfe51a3de7.tar.gz meson-2f11f964e7c978d257a177eb19886ebfe51a3de7.tar.bz2 |
Validate user given paths.
Diffstat (limited to 'runbuilder.py')
-rwxr-xr-x | runbuilder.py | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/runbuilder.py b/runbuilder.py index eb1ef7c..1782de6 100755 --- a/runbuilder.py +++ b/runbuilder.py @@ -15,7 +15,9 @@ # limitations under the License. from optparse import OptionParser -import sys +import sys, os, stat +import os.path +from argparse import ArgumentError parser = OptionParser() @@ -24,8 +26,48 @@ parser.add_option('--libdir', default='lib', dest='libdir') parser.add_option('--includedir', default='include', dest='includedir') parser.add_option('--datadir', default='share', dest='datadir') +class Builder(): + builder_filename = 'builder.txt' + + def __init__(self, dir1, dir2, options): + (self.source_dir, self.build_dir) = self.validate_dirs(dir1, dir2) + + def has_builder_file(self, dirname): + fname = os.path.join(dirname, Builder.builder_filename) + try: + ifile = open(fname, 'r') + return True + except IOError: + return False + + def validate_dirs(self, dir1, dir2): + ndir1 = os.path.abspath(dir1) + ndir2 = os.path.abspath(dir2) + if not stat.S_ISDIR(os.stat(ndir1).st_mode): + raise RuntimeError('%s is not a directory' % dir1) + if not stat.S_ISDIR(os.stat(ndir2).st_mode): + raise RuntimeError('%s is not a directory' % dir2) + self.options = options + if ndir1 == ndir2: + raise RuntimeError('Source and build directories must not be the same. Create a pristine build directory.') + if self.has_builder_file(ndir1): + if self.has_builder_file(ndir2): + raise RuntimeError('Both directories contain a builder file %s.' % Builder.builder_filename) + return (ndir1, ndir2) + if self.has_builder_file(ndir2): + return (ndir2, ndir1) + raise RuntimeError('Neither directory contains a builder file %s.' % Builder.builder_filename) + if __name__ == '__main__': (options, args) = parser.parse_args(sys.argv) - print (len(args)) if len(args) == 1 or len(args) > 3: - print('Invalid arguments')
\ No newline at end of file + print('Invalid number of arguments') + sys.exit(1) + dir1 = args[1] + if len(args) > 2: + dir2 = args[2] + else: + dir2 = '.' + builder = Builder(dir1, dir2, options) + print ('Source dir: ' + builder.source_dir) + print ('Build dir: ' + builder.build_dir) |