diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 23:39:27 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2012-12-26 23:39:27 +0200 |
commit | 649ee061298a14035d03b0e24d1c2f9d5a7992f4 (patch) | |
tree | c35e1c6dfae30515964daa3aeae2b9d3c096569b /builder.py | |
parent | 4dbe7f6f34149502531c60587b565bdb3314b048 (diff) | |
download | meson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.zip meson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.tar.gz meson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.tar.bz2 |
Renamed main file.
Diffstat (limited to 'builder.py')
-rwxr-xr-x | builder.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/builder.py b/builder.py new file mode 100755 index 0000000..2e21527 --- /dev/null +++ b/builder.py @@ -0,0 +1,76 @@ +#!/usr/bin/python3 -tt + +# Copyright 2012 Jussi Pakkanen + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from optparse import OptionParser +import sys, stat +import os.path +import environment + +parser = OptionParser() + +parser.add_option('--prefix', default='/usr/local', dest='prefix') +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) + self.compiler = environment.GnuCCompiler('gcc') + self.compiler.sanity_check(self.build_dir) + + def has_builder_file(self, dirname): + fname = os.path.join(dirname, Builder.builder_filename) + try: + ifile = open(fname, 'r') + ifile.close() + 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 os.path.samefile(dir1, dir2): + 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) + if len(args) == 1 or len(args) > 3: + 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) |