|
|
#!/usr/bin/env python2 # -*- coding: utf-8 -*-
"""Youtube-dlg setup file.
Examples: Windows::
python setup.py py2exe
Linux::
python setup.py install
Build source distribution::
python setup.py sdist
Build platform distribution::
python setup.py bdist
Build the translations::
python setup.py build
Requirements:
* GNU gettext utilities
Notes: If you get 'TypeError: decoding Unicode is not supported' when you run py2exe then apply the following patch::
http://sourceforge.net/p/py2exe/patches/28/
Basic steps of the setup::
* Run pre-build tasks * Call setup handler based on OS & options * Set up hicolor icons (if supported by platform) * Set up fallback pixmaps icon (if supported by platform) * Set up package level pixmaps icons (*.png, *.ico) * Set up package level i18n files (*.mo) * Set up scripts (executables) (if supported by platform) * Run setup
"""
from distutils.core import setup
import os import sys import glob from shutil import copyfile from subprocess import call
# Commands that run the pre-build tasks EXEC_PRE_COMMANDS = ["py2exe", "install", "bdist", "build"]
PY2EXE = len(sys.argv) >= 2 and sys.argv[1] == "py2exe"
if PY2EXE: try: import py2exe except ImportError as error: print error sys.exit(1)
from youtube_dl_gui import ( __author__, __appname__, __contact__, __version__, __license__, __projecturl__, __description__, __packagename__, __descriptionfull__ )
# Setup can not handle unicode __packagename__ = str(__packagename__)
# Helper functions def create_scripts(): """Create the binary scripts.""" dest_dir = os.path.join("build", "_scripts")
if not os.path.exists(dest_dir): os.makedirs(dest_dir)
copyfile(os.path.join(__packagename__, "__main__.py"), os.path.join(dest_dir, "youtube-dl-gui"))
def build_translations(): """Build the MO files.""" exec_name = "msgfmt.exe" if os.name == "nt" else "msgfmt"
search_pattern = os.path.join("youtube_dl_gui", "locale", "*", "LC_MESSAGES", "*.po")
for po_file in glob.glob(search_pattern): mo_file = po_file.replace(".po", ".mo")
try: print "Building MO file for '%s'" % po_file call([exec_name, "-o", mo_file, po_file]) except OSError: print "Could not locate file '%s', exiting..." % exec_name sys.exit(1)
##################################
def linux_setup(): scripts = [] data_files = [] package_data = {}
# Add hicolor icons for path in glob.glob("youtube_dl_gui/data/icons/hicolor/*x*"): size = os.path.basename(path)
dst = "share/icons/hicolor/{size}/apps".format(size=size) src = "{icon_path}/apps/youtube-dl-gui.png".format(icon_path=path)
data_files.append((dst, [src]))
# Add fallback icon, see issue #14 data_files.append( ("share/pixmaps", ["youtube_dl_gui/data/pixmaps/youtube-dl-gui.png"]) )
# Add other package data package_data[__packagename__] = [ "data/pixmaps/*.png", "data/pixmaps/*.ico", "locale/*/LC_MESSAGES/*.mo" ]
# Add scripts scripts.append("build/_scripts/youtube-dl-gui")
setup_params = { "scripts": scripts, "data_files": data_files, "package_data": package_data }
return setup_params
def windows_setup(): def normal_setup(): package_data = {}
# On Windows we dont use the icons under hicolor package_data[__packagename__] = [ "data\\pixmaps\\*.png", "data\\pixmaps\\*.ico", "locale\\*\\LC_MESSAGES\\*.mo" ]
setup_params = { "package_data": package_data }
return setup_params
def py2exe_setup(): windows = [] data_files = []
# Py2exe dependencies & options dependencies = [ "C:\\Windows\\System32\\ffmpeg.exe", "C:\\Windows\\System32\\ffprobe.exe", "C:\\python27\\DLLs\\MSVCP90.dll" ]
options = { "includes": ["wx.lib.pubsub.*", "wx.lib.pubsub.core.*", "wx.lib.pubsub.core.arg1.*"] } #############################################
# Add package data data_files.extend([ ("", dependencies), ("data\\pixmaps", glob.glob("youtube_dl_gui\\data\\pixmaps\\*.*")), ])
# We have to manually add the translation files since py2exe cant do it for lang in os.listdir("youtube_dl_gui\\locale"): dst = os.path.join("locale", lang, "LC_MESSAGES") src = os.path.join("youtube_dl_gui", dst, "youtube_dl_gui.mo")
data_files.append((dst, [src]))
# Add GUI executable details windows.append({ "script": "build\\_scripts\\youtube-dl-gui", "icon_resources": [(0, "youtube_dl_gui\\data\\pixmaps\\youtube-dl-gui.ico")] })
setup_params = { "windows": windows, "data_files": data_files, "options": {"py2exe": options} }
return setup_params
if PY2EXE: return py2exe_setup()
return normal_setup()
# Execute pre-build tasks if any(command in sys.argv for command in EXEC_PRE_COMMANDS): create_scripts() build_translations()
if os.name == "nt": params = windows_setup() else: params = linux_setup()
setup( author = __author__, name = __appname__, version = __version__, license = __license__, author_email = __contact__, url = __projecturl__, description = __description__, long_description = __descriptionfull__, packages = [__packagename__],
**params )
|