From 03d6d746b742fb21ca22086ba6b72943a845ecc9 Mon Sep 17 00:00:00 2001 From: Bert Vermeulen Date: Wed, 27 Nov 2013 16:47:04 +0100 Subject: Automate protocol decoder installation. This automatically figures out the files to install for each protocol decoder, without involving autotools. All python files (filenames ending in .py) are always installed. If a protocol decoder requires installation of a non-python file, a small file called 'config' can be created in that protocol decoder's directory, with the following content: # comments are ok extra-install vendorlist.txt commands.txt --- tools/install-decoders | 109 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100755 tools/install-decoders (limited to 'tools') diff --git a/tools/install-decoders b/tools/install-decoders new file mode 100755 index 0000000..8134539 --- /dev/null +++ b/tools/install-decoders @@ -0,0 +1,109 @@ +#!/usr/bin/env python3 +# +# This file is part of the libsigrokdecode project. +# +# Copyright (C) 2012 Bert Vermeulen +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# + +import os +import sys +from shutil import copy +from getopt import getopt + + +def install(srcdir, dstdir): + worklist = [] + for pd in os.listdir(srcdir): + pd_dir = srcdir + '/' + pd + if not os.path.isdir(pd_dir): + continue + install_list = [] + for f in os.listdir(pd_dir): + pd_file = pd_dir + '/' + f + if not os.path.isfile(pd_file): + continue + if f == 'config': + install_list.extend(config_get_extra_install(pd_file)) + elif f[-3:] == '.py': + install_list.append(f) + worklist.append((pd, pd_dir, install_list)) + + print("Installing %d protocol decoders:" % len(worklist)) + col = 0 + for pd, pd_dir, install_list in worklist: + msg = pd + ' ' + if (col + len(msg) > 80): + print() + col = 0 + print(msg, end='') + col += len(msg) + pd_dst = dstdir + '/' + pd + try: + os.mkdir(pd_dst) + except FileExistsError: + pass + for f in install_list: + copy(pd_dir + '/' + f, pd_dst) + print() + + +def config_get_extra_install(config_file): + install_list = [] + for line in open(config_file).read().split('\n'): + line = line.strip() + if len(line) == 0 or line[0] == '#': + continue + words = line.split() + if words[0] != 'extra-install': + continue + install_list.extend(words[1:]) + + return install_list + + +def usage(msg=None): + if msg: + print(msg) + ret = 1 + else: + ret = 0 + print("""Usage: + install-decoders [-i ] -o """) + sys.exit(ret) + + +# +# main +# + +src = 'decoders' +dst = None +try: + opts, args = getopt(sys.argv[1:], 'i:o:') + for opt, arg in opts: + if opt == '-i': + src = arg + elif opt == '-o': + dst = arg +except Exception as e: + usage(str(e)) + +if len(args) != 0 or dst is None: + usage() + +install(src, dst) + + -- cgit v1.2.3-70-g09d2