11123fedadc0259c24e0ee81d05ab2496780d4297Phil#! /usr/bin/env python
21123fedadc0259c24e0ee81d05ab2496780d4297Phil
30ce149b41a10223c75f33a135d0a7ddc6bd2e022Dirk Loss"""
40ce149b41a10223c75f33a135d0a7ddc6bd2e022Dirk LossDistutils setup file for Scapy.
50ce149b41a10223c75f33a135d0a7ddc6bd2e022Dirk Loss"""
60ce149b41a10223c75f33a135d0a7ddc6bd2e022Dirk Loss
71123fedadc0259c24e0ee81d05ab2496780d4297Phil
81123fedadc0259c24e0ee81d05ab2496780d4297Philfrom distutils import archive_util
91123fedadc0259c24e0ee81d05ab2496780d4297Philfrom distutils import sysconfig
101123fedadc0259c24e0ee81d05ab2496780d4297Philfrom distutils.core import setup
111123fedadc0259c24e0ee81d05ab2496780d4297Philfrom distutils.command.sdist import sdist
121123fedadc0259c24e0ee81d05ab2496780d4297Philimport os
131123fedadc0259c24e0ee81d05ab2496780d4297Phil
141123fedadc0259c24e0ee81d05ab2496780d4297Phil
153ee32c2867f164dab6266ce653e91db5b641403fplorinquerEZIP_HEADER = """#! /bin/sh
1671ad2b6422bb7119319b971d348cd4aca434ce91PhilPYTHONPATH=$0/%s exec python -m scapy.__init__
171123fedadc0259c24e0ee81d05ab2496780d4297Phil"""
181123fedadc0259c24e0ee81d05ab2496780d4297Phil
193ee32c2867f164dab6266ce653e91db5b641403fplorinquer
20b7d3d93544f98711b2c5de7748c7bb143d9385ffPhildef make_ezipfile(base_name, base_dir, verbose=0, dry_run=0, **kwargs):
211123fedadc0259c24e0ee81d05ab2496780d4297Phil    fname = archive_util.make_zipfile(base_name, base_dir, verbose, dry_run)
223ee32c2867f164dab6266ce653e91db5b641403fplorinquer    ofname = fname + ".old"
233ee32c2867f164dab6266ce653e91db5b641403fplorinquer    os.rename(fname, ofname)
243ee32c2867f164dab6266ce653e91db5b641403fplorinquer    of = open(ofname)
253ee32c2867f164dab6266ce653e91db5b641403fplorinquer    f = open(fname, "w")
261123fedadc0259c24e0ee81d05ab2496780d4297Phil    f.write(EZIP_HEADER % base_dir)
271123fedadc0259c24e0ee81d05ab2496780d4297Phil    while True:
281123fedadc0259c24e0ee81d05ab2496780d4297Phil        data = of.read(8192)
291123fedadc0259c24e0ee81d05ab2496780d4297Phil        if not data:
301123fedadc0259c24e0ee81d05ab2496780d4297Phil            break
311123fedadc0259c24e0ee81d05ab2496780d4297Phil        f.write(data)
321123fedadc0259c24e0ee81d05ab2496780d4297Phil    f.close()
33e31a851ca76754595a20192b2a4c6674397e7f44Phil    os.system("zip -A '%s'" % fname)
341123fedadc0259c24e0ee81d05ab2496780d4297Phil    of.close()
351123fedadc0259c24e0ee81d05ab2496780d4297Phil    os.unlink(ofname)
36291400c1b6f65363e33cc982aaf0d43d31cc424egpotter    os.chmod(fname, 0o755)
371123fedadc0259c24e0ee81d05ab2496780d4297Phil    return fname
381123fedadc0259c24e0ee81d05ab2496780d4297Phil
391123fedadc0259c24e0ee81d05ab2496780d4297Phil
403ee32c2867f164dab6266ce653e91db5b641403fplorinquerarchive_util.ARCHIVE_FORMATS["ezip"] = (
413ee32c2867f164dab6266ce653e91db5b641403fplorinquer    make_ezipfile, [], 'Executable ZIP file')
421123fedadc0259c24e0ee81d05ab2496780d4297Phil
433ee32c2867f164dab6266ce653e91db5b641403fplorinquerSCRIPTS = ['bin/scapy', 'bin/UTscapy']
443ee32c2867f164dab6266ce653e91db5b641403fplorinquer# On Windows we also need additional batch files to run the above scripts
4529146dda448ed02f1457fb4ee883e9dba8ec3991Dirk Lossif os.name == "nt":
463ee32c2867f164dab6266ce653e91db5b641403fplorinquer    SCRIPTS += ['bin/scapy.bat', 'bin/UTscapy.bat']
471123fedadc0259c24e0ee81d05ab2496780d4297Phil
481123fedadc0259c24e0ee81d05ab2496780d4297Philsetup(
493ee32c2867f164dab6266ce653e91db5b641403fplorinquer    name='scapy',
504f71027fcdcb1e4ca8d7e04987588d2f7e615f4bRobin Jarry    version=__import__('scapy').VERSION,
513ee32c2867f164dab6266ce653e91db5b641403fplorinquer    packages=[
523ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy',
533ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/arch',
540e1b9206829d712aa6107975f694260761c883d5Pierre LALET        'scapy/arch/bpf',
553ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/arch/windows',
563ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/contrib',
573ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/layers',
583ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/layers/tls',
593ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/layers/tls/crypto',
603ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/modules',
6194059a1f9542d7ff26379fafcb6e1625bf67f3c4Ajax        'scapy/modules/krack',
623ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/asn1',
633ee32c2867f164dab6266ce653e91db5b641403fplorinquer        'scapy/tools',
643ee32c2867f164dab6266ce653e91db5b641403fplorinquer    ],
653ee32c2867f164dab6266ce653e91db5b641403fplorinquer    scripts=SCRIPTS,
663ee32c2867f164dab6266ce653e91db5b641403fplorinquer    data_files=[('share/man/man1', ["doc/scapy.1.gz"])],
674f71027fcdcb1e4ca8d7e04987588d2f7e615f4bRobin Jarry    package_data={
684f71027fcdcb1e4ca8d7e04987588d2f7e615f4bRobin Jarry        'scapy': ['VERSION'],
694f71027fcdcb1e4ca8d7e04987588d2f7e615f4bRobin Jarry    },
70d4d86e9cbf6620b63571942250c6bf135c8aa24bPhil
711123fedadc0259c24e0ee81d05ab2496780d4297Phil    # Metadata
723ee32c2867f164dab6266ce653e91db5b641403fplorinquer    author='Philippe BIONDI',
733ee32c2867f164dab6266ce653e91db5b641403fplorinquer    author_email='phil(at)secdev.org',
745e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET    maintainer='Pierre LALET, Guillaume VALADON',
753ee32c2867f164dab6266ce653e91db5b641403fplorinquer    description='Scapy: interactive packet manipulation tool',
763ee32c2867f164dab6266ce653e91db5b641403fplorinquer    license='GPLv2',
773ee32c2867f164dab6266ce653e91db5b641403fplorinquer    url='http://www.secdev.org/projects/scapy',
781b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET    download_url='https://github.com/secdev/scapy/tarball/master',
791b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET    keywords=["network"],
801b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET    classifiers=[
811b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Development Status :: 5 - Production/Stable",
821b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Environment :: Console",
831b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Intended Audience :: Developers",
841b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Intended Audience :: Information Technology",
851b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Intended Audience :: Science/Research",
861b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Intended Audience :: System Administrators",
871b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Intended Audience :: Telecommunications Industry",
881b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
891b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Programming Language :: Python :: 2",
901b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Programming Language :: Python :: 2.7",
915e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET        "Programming Language :: Python :: 3",
925e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET        "Programming Language :: Python :: 3.3",
935e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET        "Programming Language :: Python :: 3.4",
945e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET        "Programming Language :: Python :: 3.5",
955e4898185176c106ae4653fd1b20836ab3c725bdPierre LALET        "Programming Language :: Python :: 3.6",
961b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Topic :: Security",
971b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Topic :: System :: Networking",
981b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET        "Topic :: System :: Networking :: Monitoring",
991b1b687b8285d080ebdcf3f63557615df4bf273ePierre LALET    ]
1001123fedadc0259c24e0ee81d05ab2496780d4297Phil)
101