diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-23 13:18:56 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-02-23 13:18:56 +0200 |
commit | 603625b61c7b1aa073a4008a5b6ce812b56f8015 (patch) | |
tree | 0ad7326e0e774ad2ecc80b07e85cdf9eca5ccfc6 /meson_install.py | |
parent | 816752f51a5fad8200eefe17908903ccd11bd014 (diff) | |
download | meson-603625b61c7b1aa073a4008a5b6ce812b56f8015.zip meson-603625b61c7b1aa073a4008a5b6ce812b56f8015.tar.gz meson-603625b61c7b1aa073a4008a5b6ce812b56f8015.tar.bz2 |
Builder -> Meson renaming.
Diffstat (limited to 'meson_install.py')
-rwxr-xr-x | meson_install.py | 117 |
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) + |