#!/usr/bin/env python3 # idl2deb - quick hack by W. Martin Borgert to create # Debian GNU/Linux packages from idl2wrs modules for Wireshark. # Copyright 2003, 2008, W. Martin Borgert # Wireshark - Network traffic analyzer # By Gerald Combs # Copyright 1998 Gerald Combs # SPDX-License-Identifier: GPL-2.0-or-later import optparse import os import string import sys import time scriptinfo = """idl2deb version 2008-03-10 Copyright 2003, 2008, W. Martin Borgert Free software, released under the terms of the GPL.""" def create_file(preserve, filename, content, mode = None): """Create a file with given content.""" if preserve and os.path.isfile(filename): return f = open(filename, 'w') f.write(content) f.close() if mode: os.chmod(filename, mode) def create_files(version, deb, email, idl, name, preserve, iso, rfc): """Create all files for the .deb build process.""" base = os.path.basename(idl.lower().split(".idl")[0]) if not os.path.isdir("packaging/debian"): os.mkdir("packaging/debian") create_file(preserve, "packaging/debian/rules", """#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk PREFIX=`pwd`/packaging/debian/wireshark-giop-%s binary-post-install/wireshark-giop-%s:: rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a """ % (base, base, version), 0o755) create_file(preserve, "packaging/debian/control", """Source: wireshark-giop-%s Section: net Priority: optional Maintainer: %s <%s> Standards-Version: 3.6.1.0 Build-Depends: wireshark-dev, autotools-dev, debhelper, cdbs Package: wireshark-giop-%s Architecture: any Depends: wireshark (= %s), ${shlibs:Depends} Description: GIOP dissector for CORBA interface %s This package provides a dissector for GIOP (General Inter-ORB Protocol) for the Wireshark protocol analyser. It decodes the CORBA (Common Object Request Broker Architecture) interfaces described in the IDL (Interface Definition Language) file '%s.idl'. """ % (base, name, email, base, deb, base, base)) create_file(preserve, "packaging/debian/changelog", """wireshark-giop-%s (0.0.1-1) unstable; urgency=low * Automatically created package. -- %s <%s> %s """ % (base, name, email, rfc)) create_file(preserve, "packaging/debian/copyright", """This package has been created automatically by idl2deb on %s for Debian GNU/Linux. Wireshark: https://www.wireshark.org/ Copyright: GPL, as evidenced by existence of GPL license file \"COPYING\". (the GNU GPL may be viewed on Debian systems in /usr/share/common-licenses/GPL) """ % (iso)) def get_wrs_version(): """Detect version of wireshark-dev package.""" deb = os.popen( "dpkg-query -W --showformat='${Version}' wireshark-dev").read() debv = string.find(deb, "-") if debv == -1: debv = len(deb) version = deb[string.find(deb, ":")+1:debv] return version, deb def get_time(): """Detect current time and return ISO and RFC time string.""" currenttime = time.gmtime() return time.strftime("%Y-%m-%d %H:%M:%S +0000", currenttime), \ time.strftime("%a, %d %b %Y %H:%M:%S +0000", currenttime) def main(): opts = process_opts(sys.argv) iso, rfc = get_time() version, deb = get_wrs_version() create_files(version, deb, opts.email, opts.idl, opts.name, opts.preserve, iso, rfc) os.system("dpkg-buildpackage " + opts.dbopts) def process_opts(argv): """Process command line options.""" parser = optparse.OptionParser( version=scriptinfo, description="""Example: %prog -e me@foo.net -i bar.idl -n \"My Name\" -d \"-rfakeroot -uc -us\"""") parser.add_option("-d", "--dbopts", default="", metavar="opts", help="options for dpkg-buildpackage") parser.add_option("-e", "--email", metavar="address", default="invalid@invalid.invalid", help="use e-mail address") parser.add_option("-i", "--idl", metavar="idlfile", help="IDL file to use (mandatory)") parser.add_option("-n", "--name", default="No Name", help="use user name", metavar="name") parser.add_option("-p", "--preserve", action="store_true", help="do not overwrite files") opts, args = parser.parse_args() if not opts.idl: print("mandatory IDL file parameter missing") sys.exit(1) if not os.access(opts.idl, os.R_OK): print("IDL file not accessible") sys.exit(1) return opts if __name__ == '__main__': main()