--- 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/pcap', 'include', ''): + 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',