aboutsummaryrefslogtreecommitdiff
path: root/builder.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2012-12-26 23:39:27 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2012-12-26 23:39:27 +0200
commit649ee061298a14035d03b0e24d1c2f9d5a7992f4 (patch)
treec35e1c6dfae30515964daa3aeae2b9d3c096569b /builder.py
parent4dbe7f6f34149502531c60587b565bdb3314b048 (diff)
downloadmeson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.zip
meson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.tar.gz
meson-649ee061298a14035d03b0e24d1c2f9d5a7992f4.tar.bz2
Renamed main file.
Diffstat (limited to 'builder.py')
-rwxr-xr-xbuilder.py76
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)