Permalink
Fetching contributors…
Cannot retrieve contributors at this time
executable file 173 lines (138 sloc) 5.1 KB
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Installation and deployment script."""
from __future__ import print_function
import glob
import os
import sys
try:
from setuptools import find_packages, setup
except ImportError:
from distutils.core import find_packages, setup
try:
from distutils.command.bdist_msi import bdist_msi
except ImportError:
bdist_msi = None
try:
from distutils.command.bdist_rpm import bdist_rpm
except ImportError:
bdist_rpm = None
if sys.version < '2.7':
print('Unsupported Python version: {0:s}.'.format(sys.version))
print('Supported Python versions are 2.7 or a later 2.x version.')
sys.exit(1)
# Change PYTHONPATH to include artifacts so that we can get the version.
sys.path.insert(0, '.')
import artifacts # pylint: disable=wrong-import-position
if not bdist_msi:
BdistMSICommand = None
else:
class BdistMSICommand(bdist_msi):
"""Custom handler for the bdist_msi command."""
def run(self):
"""Builds an MSI."""
# Command bdist_msi does not support the library version, neither a date
# as a version but if we suffix it with .1 everything is fine.
self.distribution.metadata.version += '.1'
bdist_msi.run(self)
if not bdist_rpm:
BdistRPMCommand = None
else:
class BdistRPMCommand(bdist_rpm):
"""Custom handler for the bdist_rpm command."""
def _make_spec_file(self):
"""Generates the text of an RPM spec file.
Returns:
list[str]: lines of the RPM spec file.
"""
# Note that bdist_rpm can be an old style class.
if issubclass(BdistRPMCommand, object):
spec_file = super(BdistRPMCommand, self)._make_spec_file()
else:
spec_file = bdist_rpm._make_spec_file(self)
if sys.version_info[0] < 3:
python_package = 'python'
else:
python_package = 'python3'
description = []
summary = ''
in_description = False
python_spec_file = []
for line in iter(spec_file):
if line.startswith('Summary: '):
summary = line
elif line.startswith('BuildRequires: '):
line = 'BuildRequires: {0:s}-setuptools'.format(python_package)
elif line.startswith('Requires: '):
if python_package == 'python3':
line = line.replace('python', 'python3')
elif line.startswith('%description'):
in_description = True
elif line.startswith('%files'):
# Cannot use %{_libdir} here since it can expand to "lib64".
lines = [
'%files -n {0:s}-%{{name}}'.format(python_package),
'%defattr(644,root,root,755)',
'%doc ACKNOWLEDGEMENTS AUTHORS LICENSE README',
'%{_prefix}/lib/python*/site-packages/**/*.py',
'%{_prefix}/lib/python*/site-packages/artifacts*.egg-info/*',
'',
'%exclude %{_prefix}/share/doc/*',
'%exclude %{_prefix}/lib/python*/site-packages/**/*.pyc',
'%exclude %{_prefix}/lib/python*/site-packages/**/*.pyo',
'%exclude %{_prefix}/lib/python*/site-packages/**/__pycache__/*']
python_spec_file.extend(lines)
break
elif line.startswith('%prep'):
in_description = False
python_spec_file.append(
'%package -n {0:s}-%{{name}}'.format(python_package))
python_spec_file.append('{0:s}'.format(summary))
python_spec_file.append('')
python_spec_file.append(
'%description -n {0:s}-%{{name}}'.format(python_package))
python_spec_file.extend(description)
elif in_description:
# Ignore leading white lines in the description.
if not description and not line:
continue
description.append(line)
python_spec_file.append(line)
return python_spec_file
artifacts_description = 'ForensicArtifacts.com Artifact Repository.'
artifacts_long_description = (
'A free, community-sourced, machine-readable knowledge base of forensic '
'artifacts that the world can use both as an information source and '
'within other tools.')
setup(
name='artifacts',
version=artifacts.__version__,
description=artifacts_description,
long_description=artifacts_long_description,
license='Apache License, Version 2.0',
url='https://github.com/ForensicArtifacts/artifacts',
maintainer='ForensicArtifacts.com Artifact Repository maintainers',
maintainer_email='forensicartifacts@googlegroups.com',
scripts=[
os.path.join('tools', 'stats.py'),
os.path.join('tools', 'validator.py'),
],
cmdclass={
'bdist_msi': BdistMSICommand,
'bdist_rpm': BdistRPMCommand
},
classifiers=[
'Development Status :: 3 - Alpha',
'Environment :: Console',
'Operating System :: OS Independent',
'Programming Language :: Python',
],
packages=find_packages('.', exclude=['tests', 'tests.*', 'tools', 'utils']),
package_dir={'artifacts': 'artifacts'},
data_files=[
('share/artifacts', glob.glob(os.path.join('data', '*'))),
],
install_requires=[
'PyYAML >= 3.11',
],
)