From: Tim Yardley Date: Thu, 7 Jun 2007 17:48:27 +0000 (+0000) Subject: pypcap package X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=f808d72df67a4abdb05f79511c9ae8592aad8104;p=openwrt%2Fsvn-archive%2Farchive.git pypcap package SVN-Revision: 7525 --- diff --git a/net/pypcap/Makefile b/net/pypcap/Makefile new file mode 100644 index 0000000000..c8def4ef0c --- /dev/null +++ b/net/pypcap/Makefile @@ -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 index 0000000000..55e04665b7 --- /dev/null +++ b/net/pypcap/patches/000-no_cpickle.patch @@ -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',