pypcap package
authorTim Yardley <lst@openwrt.org>
Thu, 7 Jun 2007 17:48:27 +0000 (17:48 +0000)
committerTim Yardley <lst@openwrt.org>
Thu, 7 Jun 2007 17:48:27 +0000 (17:48 +0000)
SVN-Revision: 7525

net/pypcap/Makefile [new file with mode: 0644]
net/pypcap/patches/000-no_cpickle.patch [new file with mode: 0644]

diff --git a/net/pypcap/Makefile b/net/pypcap/Makefile
new file mode 100644 (file)
index 0000000..c8def4e
--- /dev/null
@@ -0,0 +1,39 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pypcap
+PKG_VERSION:=1.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://pypcap.googlecode.com/files
+PKG_CAT:=zcat
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+PKG_INSTALL_DIR:=$(PKG_BUILD_DIR)/ipkg-install
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/pypcap
+  DEPENDS:=+python +libpcap
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=pypcap
+  DESCRIPTION:=\
+       pypcap
+  URL:=http://www
+endef
+
+define Build/Compile
+       cd $(PKG_BUILD_DIR); \
+       PCAP_HOME=$(STAGING_DIR)/usr \
+       $(STAGING_DIR)/usr/bin/hostpython ./setup.py build
+endef
+
+define Package/pypcap/install
+       cd $(PKG_BUILD_DIR); \
+       $(STAGING_DIR)/usr/bin/hostpython ./setup.py install \
+               --no-compile --prefix $(PKG_INSTALL_DIR)/usr
+       cp -a $(PKG_INSTALL_DIR)/* $(1)/
+endef
+
+$(eval $(call BuildPackage,pypcap))
diff --git a/net/pypcap/patches/000-no_cpickle.patch b/net/pypcap/patches/000-no_cpickle.patch
new file mode 100644 (file)
index 0000000..55e0466
--- /dev/null
@@ -0,0 +1,142 @@
+--- pypcap/setup.py    2006-03-15 13:59:54.000000000 -0600
++++ pypcap.new/setup.py        2007-05-25 17:29:02.413355500 -0500
+@@ -4,69 +4,53 @@
+ from distutils.core import setup, Extension
+ from distutils.command import config, clean
+-import cPickle, glob, os, sys
++import os,sys,glob
+-pcap_config = {}
+-pcap_cache = 'config.pkl'
++# where to find pcap
++pcap_location = os.environ.get('PCAP_HOME')
+-class config_pcap(config.config):
+-    description = 'configure pcap paths'
+-    user_options = [ ('with-pcap=', None,
+-                      'path to pcap build or installation directory') ]
+-    
+-    def initialize_options(self):
+-        config.config.initialize_options(self)
+-        self.dump_source = 0
+-        #self.noisy = 0
+-        self.with_pcap = None
+-
+-    def _write_config_h(self, cfg):
+-        # XXX - write out config.h for pcap_ex.c
+-        d = {}
+-        if os.path.exists(os.path.join(cfg['include_dirs'][0], 'pcap-int.h')):
+-            d['HAVE_PCAP_INT_H'] = 1
+-        buf = open(os.path.join(cfg['include_dirs'][0], 'pcap.h')).read()
+-        if buf.find('pcap_file(') != -1:
+-            d['HAVE_PCAP_FILE'] = 1
+-        if buf.find('pcap_compile_nopcap(') != -1:
+-            d['HAVE_PCAP_COMPILE_NOPCAP'] = 1
+-        if buf.find('pcap_setnonblock(') != -1:
+-            d['HAVE_PCAP_SETNONBLOCK'] = 1
+-        f = open('config.h', 'w')
+-        for k, v in d.iteritems():
+-            f.write('#define %s %s\n' % (k, v))
+-    
+-    def _pcap_config(self, dirs=[ None ]):
+-        cfg = {}
+-        if not dirs[0]:
+-            dirs = [ '/usr', sys.prefix ] + glob.glob('/opt/libpcap*') + \
+-                   glob.glob('../libpcap*') + glob.glob('../wpdpack*')
+-        for d in dirs:
+-            for sd in ('include', 'include/pcap', ''):
+-                incdirs = [ os.path.join(d, sd) ]
+-                if os.path.exists(os.path.join(d, sd, 'pcap.h')):
+-                    cfg['include_dirs'] = [ os.path.join(d, sd) ]
+-                    for sd in ('lib', ''):
+-                        for lib in (('pcap', 'libpcap.a'),
+-                                    ('pcap', 'libpcap.dylib'),
+-                                    ('wpcap', 'wpcap.lib')):
+-                            if os.path.exists(os.path.join(d, sd, lib[1])):
+-                                cfg['library_dirs'] = [ os.path.join(d, sd) ]
+-                                cfg['libraries'] = [ lib[0] ]
+-                                if lib[0] == 'wpcap':
+-                                    cfg['libraries'].append('iphlpapi')
+-                                    cfg['extra_compile_args'] = \
+-                                        [ '-DWIN32', '-DWPCAP' ]
+-                                print 'found', cfg
+-                                self._write_config_h(cfg)
+-                                return cfg
+-        raise "couldn't find pcap build or installation directory"
+-    
+-    def run(self):
+-        #config.log.set_verbosity(0)
+-        cPickle.dump(self._pcap_config([ self.with_pcap ]),
+-                     open(pcap_cache, 'wb'))
+-        self.temp_files.append(pcap_cache)
++def write_config_h(cfg):
++    # XXX - write out config.h for pcap_ex.c
++    d = {}
++    if os.path.exists(os.path.join(cfg['include_dirs'][0], 'pcap-int.h')):
++        d['HAVE_PCAP_INT_H'] = 1
++    buf = open(os.path.join(cfg['include_dirs'][0], 'pcap.h')).read()
++    if buf.find('pcap_file(') != -1:
++        d['HAVE_PCAP_FILE'] = 1
++    if buf.find('pcap_compile_nopcap(') != -1:
++        d['HAVE_PCAP_COMPILE_NOPCAP'] = 1
++    if buf.find('pcap_setnonblock(') != -1:
++        d['HAVE_PCAP_SETNONBLOCK'] = 1
++    f = open('config.h', 'w')
++    for k, v in d.iteritems():
++        f.write('#define %s %s\n' % (k, v))
++
++
++def f_pcap_config(dirs=[ None ]):
++    cfg = {}
++    if not dirs[0]:
++        dirs = [ '/usr', sys.prefix ] + glob.glob('/opt/libpcap*') + \
++               glob.glob('../libpcap*') + glob.glob('../wpdpack*')
++    for d in dirs:
++        for sd in ('include', 'include/pcap', ''):
++            incdirs = [ os.path.join(d, sd) ]
++            if os.path.exists(os.path.join(d, sd, 'pcap.h')):
++                cfg['include_dirs'] = [ os.path.join(d, sd) ]
++                for sd in ('lib', ''):
++                    for lib in (('pcap', 'libpcap.a'),
++                                ('pcap', 'libpcap.dylib'),
++                                ('wpcap', 'wpcap.lib')):
++                        if os.path.exists(os.path.join(d, sd, lib[1])):
++                            cfg['library_dirs'] = [ os.path.join(d, sd) ]
++                            cfg['libraries'] = [ lib[0] ]
++                            if lib[0] == 'wpcap':
++                                cfg['libraries'].append('iphlpapi')
++                                cfg['extra_compile_args'] = \
++                                    [ '-DWIN32', '-DWPCAP' ]
++                            print 'found', cfg
++                            write_config_h(cfg)
++                            return cfg
++    raise "couldn't find pcap build or installation directory"
+ class clean_pcap(clean.clean):
+     def run(self):
+@@ -75,13 +59,9 @@
+             print "removing '%s'" % pcap_cache
+             os.unlink(pcap_cache)
+-if len(sys.argv) > 1 and sys.argv[1] == 'build':
+-    try:
+-        pcap_config = cPickle.load(open(pcap_cache))
+-    except IOError:
+-        print >>sys.stderr, 'run "%s config" first!' % sys.argv[0]
+-        sys.exit(1)
++
++pcap_config = f_pcap_config([pcap_location])
+ pcap = Extension(name='pcap',
+                  sources=[ 'pcap.c', 'pcap_ex.c' ],
+                  include_dirs=pcap_config.get('include_dirs', ''),
+@@ -89,7 +69,7 @@
+                  libraries=pcap_config.get('libraries', ''),
+                  extra_compile_args=pcap_config.get('extra_compile_args', ''))
+-pcap_cmds = { 'config':config_pcap, 'clean':clean_pcap }
++pcap_cmds = { 'clean':clean_pcap }
+ setup(name='pcap',
+       version='1.1',