#!/usr/bin/env python # idl2deb - quick hack by W. Martin Borgert to create # Debian GNU/Linux packages from idl2wrs modules for Wireshark. # Copyright 2003, 2008, W. Martin Borgert # Makefile.am and configure.ac code by: # Copyright 2001, Ericsson Inc. # Frank Singleton # # Wireshark - Network traffic analyzer # By Gerald Combs # Copyright 1998 Gerald Combs # 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 2 # 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, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 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 bootstrap(): """Generate Makefile.in and configure script.""" os.system("aclocal") os.system("autoconf") os.system("libtoolize --automake --copy --force") os.system("automake --add-missing --copy --foreign") 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]) create_file(preserve, "Makefile.am", """# plugindir = @plugindir@ plugin_LTLIBRARIES = %s.la %s_la_SOURCES = packet-%s.c %s_la_LDFLAGS = -module -avoid-version GLIB_CFLAGS = `pkg-config --cflags glib-2.0` GLIB_LIBS = `pkg-config --libs glib-2.0` BUILT_SOURCES = packet-%s.c INCLUDES = -DHAVE_CONFIG -DHAVE_SYS_TYPES_H -DHAVE_SYS_TIME_H \\ -DHAVE_STDARG_H -D_U_=\"__attribute__((unused))\" \\ -I/usr/include/wireshark -DWS_VAR_IMPORT=extern $(GLIB_CFLAGS) LDADD = $(GLIB_LIBS) # Libs must be cleared, or else libtool won't create a shared module. # If your module needs to be linked against any particular libraries, # add them here. LIBS = %s_la_DEPENDENCIES = packet-%s-static.o packet-%s-static.o: packet-%s.c $(LTCOMPILE) -c -o packet-%s-static.o \\ -D__WIRESHARK_STATIC__ packet-%s.c packet-%s.c: """ % ((base,) * 12) + idl + """ $(IDL2WRS) -I. $< > $@ """) create_file(preserve, "configure.ac", """AC_INIT(%s, 1.0) AC_PROG_LIBTOOL AM_INIT_AUTOMAKE AM_MAINTAINER_MODE AC_PROG_CC AC_STDC_HEADERS AC_PROG_INSTALL AC_SUBST(CFLAGS) AC_SUBST(CPPFLAGS) AC_SUBST(LDFLAGS) PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.2.2) AC_SUBST(GLIB_CFLAGS) AC_SUBST(GLIB_LIBS) IDL2WRS=\"`type -p idl2wrs`\" AC_SUBST(IDL2WRS) WIRESHARK_VERSION=\"%s\" plugindir=\"$libdir/wireshark/plugins/$WIRESHARK_VERSION\" AC_SUBST(plugindir) AC_OUTPUT([Makefile]) """ % (base, version)) if not os.path.isdir("debian"): os.mkdir("debian") create_file(preserve, "debian/rules", """#!/usr/bin/make -f include /usr/share/cdbs/1/rules/debhelper.mk include /usr/share/cdbs/1/class/autotools.mk PREFIX=`pwd`/debian/wireshark-giop-%s binary-post-install/wireshark-giop-%s:: rm -f $(PREFIX)/usr/lib/wireshark/plugins/%s/*.a """ % (base, base, version), 0755) create_file(preserve, "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, "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, "debian/copyright", """This package has been created automatically by idl2deb on %s for Debian GNU/Linux. Wireshark: http://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) bootstrap() 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()