[youtube] Fix empty description extraction (#26575) (closes #26006)
[youtube-dl] / setup.py
1 #!/usr/bin/env python
2 # coding: utf-8
3
4 from __future__ import print_function
5
6 import os.path
7 import warnings
8 import sys
9
10 try:
11     from setuptools import setup, Command
12     setuptools_available = True
13 except ImportError:
14     from distutils.core import setup, Command
15     setuptools_available = False
16 from distutils.spawn import spawn
17
18 try:
19     # This will create an exe that needs Microsoft Visual C++ 2008
20     # Redistributable Package
21     import py2exe
22 except ImportError:
23     if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe':
24         print('Cannot import py2exe', file=sys.stderr)
25         exit(1)
26
27 py2exe_options = {
28     'bundle_files': 1,
29     'compressed': 1,
30     'optimize': 2,
31     'dist_dir': '.',
32     'dll_excludes': ['w9xpopen.exe', 'crypt32.dll'],
33 }
34
35 # Get the version from youtube_dl/version.py without importing the package
36 exec(compile(open('youtube_dl/version.py').read(),
37              'youtube_dl/version.py', 'exec'))
38
39 DESCRIPTION = 'YouTube video downloader'
40 LONG_DESCRIPTION = 'Command-line program to download videos from YouTube.com and other video sites'
41
42 py2exe_console = [{
43     'script': './youtube_dl/__main__.py',
44     'dest_base': 'youtube-dl',
45     'version': __version__,
46     'description': DESCRIPTION,
47     'comments': LONG_DESCRIPTION,
48     'product_name': 'youtube-dl',
49     'product_version': __version__,
50 }]
51
52 py2exe_params = {
53     'console': py2exe_console,
54     'options': {'py2exe': py2exe_options},
55     'zipfile': None
56 }
57
58 if len(sys.argv) >= 2 and sys.argv[1] == 'py2exe':
59     params = py2exe_params
60 else:
61     files_spec = [
62         ('etc/bash_completion.d', ['youtube-dl.bash-completion']),
63         ('etc/fish/completions', ['youtube-dl.fish']),
64         ('share/doc/youtube_dl', ['README.txt']),
65         ('share/man/man1', ['youtube-dl.1'])
66     ]
67     root = os.path.dirname(os.path.abspath(__file__))
68     data_files = []
69     for dirname, files in files_spec:
70         resfiles = []
71         for fn in files:
72             if not os.path.exists(fn):
73                 warnings.warn('Skipping file %s since it is not present. Type  make  to build all automatically generated files.' % fn)
74             else:
75                 resfiles.append(fn)
76         data_files.append((dirname, resfiles))
77
78     params = {
79         'data_files': data_files,
80     }
81     if setuptools_available:
82         params['entry_points'] = {'console_scripts': ['youtube-dl = youtube_dl:main']}
83     else:
84         params['scripts'] = ['bin/youtube-dl']
85
86 class build_lazy_extractors(Command):
87     description = 'Build the extractor lazy loading module'
88     user_options = []
89
90     def initialize_options(self):
91         pass
92
93     def finalize_options(self):
94         pass
95
96     def run(self):
97         spawn(
98             [sys.executable, 'devscripts/make_lazy_extractors.py', 'youtube_dl/extractor/lazy_extractors.py'],
99             dry_run=self.dry_run,
100         )
101
102 setup(
103     name='youtube_dl',
104     version=__version__,
105     description=DESCRIPTION,
106     long_description=LONG_DESCRIPTION,
107     url='https://github.com/ytdl-org/youtube-dl',
108     author='Ricardo Garcia',
109     author_email='ytdl@yt-dl.org',
110     maintainer='Sergey M.',
111     maintainer_email='dstftw@gmail.com',
112     license='Unlicense',
113     packages=[
114         'youtube_dl',
115         'youtube_dl.extractor', 'youtube_dl.downloader',
116         'youtube_dl.postprocessor'],
117
118     # Provokes warning on most systems (why?!)
119     # test_suite = 'nose.collector',
120     # test_requires = ['nosetest'],
121
122     classifiers=[
123         'Topic :: Multimedia :: Video',
124         'Development Status :: 5 - Production/Stable',
125         'Environment :: Console',
126         'License :: Public Domain',
127         'Programming Language :: Python',
128         'Programming Language :: Python :: 2',
129         'Programming Language :: Python :: 2.6',
130         'Programming Language :: Python :: 2.7',
131         'Programming Language :: Python :: 3',
132         'Programming Language :: Python :: 3.2',
133         'Programming Language :: Python :: 3.3',
134         'Programming Language :: Python :: 3.4',
135         'Programming Language :: Python :: 3.5',
136         'Programming Language :: Python :: 3.6',
137         'Programming Language :: Python :: 3.7',
138         'Programming Language :: Python :: 3.8',
139         'Programming Language :: Python :: Implementation',
140         'Programming Language :: Python :: Implementation :: CPython',
141         'Programming Language :: Python :: Implementation :: IronPython',
142         'Programming Language :: Python :: Implementation :: Jython',
143         'Programming Language :: Python :: Implementation :: PyPy',
144     ],
145
146     cmdclass={'build_lazy_extractors': build_lazy_extractors},
147     **params
148 )