Browse Source

Use cmd.Command objects to execute pre-build tasks

doc-issue-template
MrS0m30n3 7 years ago
parent
commit
9d5cff2ff5
1 changed files with 64 additions and 30 deletions
  1. 94
      setup.py

94
setup.py

@ -22,7 +22,7 @@ Examples:
Build the translations:: Build the translations::
python setup.py build
python setup.py build_trans
Requirements: Requirements:
@ -47,7 +47,9 @@ Notes:
""" """
from distutils import cmd
from distutils.core import setup from distutils.core import setup
from distutils.command.build import build
import os import os
import sys import sys
@ -55,9 +57,6 @@ import glob
from shutil import copyfile from shutil import copyfile
from subprocess import call 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" PY2EXE = len(sys.argv) >= 2 and sys.argv[1] == "py2exe"
if PY2EXE: if PY2EXE:
@ -83,34 +82,73 @@ from youtube_dl_gui import (
__packagename__ = str(__packagename__) __packagename__ = str(__packagename__)
# Helper functions
def create_scripts():
"""Create the binary scripts."""
dest_dir = os.path.join("build", "_scripts")
class BuildBin(cmd.Command):
description = "build the youtube-dl-gui binary file"
user_options = []
def initialize_options(self):
self.scripts_dir = None
def finalize_options(self):
self.scripts_dir = os.path.join("build", "_scripts")
def run(self):
if not os.path.exists(self.scripts_dir):
os.makedirs(self.scripts_dir)
copyfile(os.path.join(__packagename__, "__main__.py"),
os.path.join(self.scripts_dir, "youtube-dl-gui"))
class BuildTranslations(cmd.Command):
if not os.path.exists(dest_dir):
os.makedirs(dest_dir)
description = "build the translation files"
user_options = []
copyfile(os.path.join(__packagename__, "__main__.py"),
os.path.join(dest_dir, "youtube-dl-gui"))
def initialize_options(self):
self.exec_name = None
self.search_pattern = None
def build_translations():
"""Build the MO files."""
exec_name = "msgfmt.exe" if os.name == "nt" else "msgfmt"
def finalize_options(self):
if os.name == "nt":
self.exec_name = "msgfmt.exe"
else:
self.exec_name = "msgfmt"
search_pattern = os.path.join("youtube_dl_gui", "locale", "*", "LC_MESSAGES", "*.po")
self.search_pattern = os.path.join(__packagename__, "locale", "*", "LC_MESSAGES", "youtube_dl_gui.po")
for po_file in glob.glob(search_pattern):
mo_file = po_file.replace(".po", ".mo")
def run(self):
for po_file in glob.glob(self.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)
try:
print("building MO file for '{}'").format(po_file)
call([self.exec_name, "-o", mo_file, po_file])
except OSError:
print("could not locate file '{}', exiting...".format(self.exec_name))
sys.exit(1)
##################################
class Build(build):
"""Overwrite the default 'build' behaviour."""
sub_commands = [
("build_bin", None),
("build_trans", None)
] + build.sub_commands
def run(self):
build.run(self)
# Overwrite cmds
cmdclass = {
"build": Build,
"build_bin": BuildBin,
"build_trans": BuildTranslations
}
def linux_setup(): def linux_setup():
@ -219,11 +257,6 @@ def windows_setup():
return normal_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": if os.name == "nt":
params = windows_setup() params = windows_setup()
else: else:
@ -240,6 +273,7 @@ setup(
description = __description__, description = __description__,
long_description = __descriptionfull__, long_description = __descriptionfull__,
packages = [__packagename__], packages = [__packagename__],
cmdclass = cmdclass,
**params **params
) )
Loading…
Cancel
Save