aboutsummaryrefslogtreecommitdiff
path: root/meson_install.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-02-23 13:18:56 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-02-23 13:18:56 +0200
commit603625b61c7b1aa073a4008a5b6ce812b56f8015 (patch)
tree0ad7326e0e774ad2ecc80b07e85cdf9eca5ccfc6 /meson_install.py
parent816752f51a5fad8200eefe17908903ccd11bd014 (diff)
downloadmeson-603625b61c7b1aa073a4008a5b6ce812b56f8015.zip
meson-603625b61c7b1aa073a4008a5b6ce812b56f8015.tar.gz
meson-603625b61c7b1aa073a4008a5b6ce812b56f8015.tar.bz2
Builder -> Meson renaming.
Diffstat (limited to 'meson_install.py')
-rwxr-xr-xmeson_install.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/meson_install.py b/meson_install.py
new file mode 100755
index 0000000..28d70ec
--- /dev/null
+++ b/meson_install.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python3 -tt
+
+# Copyright 2013 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.
+
+import sys, pickle, os, shutil, subprocess, gzip
+
+class InstallData():
+ def __init__(self, prefix, depfixer, dep_prefix):
+ self.prefix = prefix
+ self.targets = []
+ self.depfixer = depfixer
+ self.dep_prefix = dep_prefix
+ self.headers = []
+ self.man = []
+ self.data = []
+
+def do_install(datafilename):
+ ifile = open(datafilename, 'rb')
+ d = pickle.load(ifile)
+ destdir_var = 'DESTDIR'
+ if destdir_var in os.environ:
+ if d.prefix[0] == '/':
+ subdir = d.prefix[1:]
+ else:
+ subdir = d.prefix
+ d.prefix = os.path.join(os.environ[destdir_var], subdir)
+ install_targets(d)
+ install_headers(d)
+ install_man(d)
+ install_data(d)
+
+def install_data(d):
+ for i in d.data:
+ fullfilename = i[0]
+ outfilerel = i[1]
+ outdir = os.path.join(d.prefix, os.path.split(outfilerel)[0])
+ outfilename = os.path.join(outdir, os.path.split(outfilerel)[1])
+ os.makedirs(outdir, exist_ok=True)
+ print('Installing %s to %s.' % (fullfilename, outdir))
+ shutil.copyfile(fullfilename, outfilename)
+ shutil.copystat(fullfilename, outfilename)
+
+def install_man(d):
+ for m in d.man:
+ outfileroot = m[1]
+ outfilename = os.path.join(d.prefix, outfileroot)
+ full_source_filename = m[0]
+ outdir = os.path.split(outfilename)[0]
+ os.makedirs(outdir, exist_ok=True)
+ print('Installing %s to %s.' % (full_source_filename, outdir))
+ if outfilename.endswith('.gz') and not full_source_filename.endswith('.gz'):
+ open(outfilename, 'wb').write(gzip.compress(open(full_source_filename, 'rb').read()))
+ else:
+ shutil.copyfile(full_source_filename, outfilename)
+ shutil.copystat(full_source_filename, outfilename)
+
+def install_headers(d):
+ for t in d.headers:
+ fullfilename = t[0]
+ outdir = os.path.join(d.prefix, t[1])
+ fname = os.path.split(fullfilename)[1]
+ outfilename = os.path.join(outdir, fname)
+ print('Installing %s to %s' % (fname, outdir))
+ os.makedirs(outdir, exist_ok=True)
+ shutil.copyfile(fullfilename, outfilename)
+ shutil.copystat(fullfilename, outfilename)
+
+def install_targets(d):
+ for t in d.targets:
+ fname = t[0]
+ outdir = os.path.join(d.prefix, t[1])
+ aliases = t[2]
+ outname = os.path.join(outdir, fname)
+ should_strip = t[3]
+ print('Installing %s to %s' % (fname, outname))
+ os.makedirs(outdir, exist_ok=True)
+ shutil.copyfile(fname, outname)
+ shutil.copystat(fname, outname)
+ if should_strip:
+ print('Stripping target')
+ ps = subprocess.Popen(['strip', outname], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+ (stdo, stde) = ps.communicate()
+ if ps.returncode != 0:
+ print('Could not strip file.\n')
+ print('Stdout:\n%s\n' % stdo.decode())
+ print('Stderr:\n%s\n' % stde.decode())
+ sys.exit(1)
+ for alias in aliases:
+ os.symlink(fname, os.path.join(outdir, alias))
+ p = subprocess.Popen([d.depfixer, outname, d.dep_prefix], stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (stdo, stde) = p.communicate()
+ if p.returncode != 0:
+ print('Could not fix dependency info.\n')
+ print('Stdout:\n%s\n' % stdo.decode())
+ print('Stderr:\n%s\n' % stde.decode())
+ sys.exit(1)
+
+if __name__ == '__main__':
+ if len(sys.argv) != 2:
+ print('Installer script for Builder. Do not run on your own, mmm\'kay?')
+ print('%s [install info file]' % sys.argv[0])
+ datafilename = sys.argv[1]
+ do_install(datafilename)
+