diff --git a/setup.py b/setup.py index 4c97e84..496e001 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ Examples: Build the translations:: - python setup.py build + python setup.py build_trans Requirements: @@ -47,7 +47,9 @@ Notes: """ +from distutils import cmd from distutils.core import setup +from distutils.command.build import build import os import sys @@ -55,9 +57,6 @@ 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: @@ -83,34 +82,73 @@ from youtube_dl_gui import ( __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(): @@ -219,11 +257,6 @@ def windows_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: @@ -240,6 +273,7 @@ setup( description = __description__, long_description = __descriptionfull__, packages = [__packagename__], + cmdclass = cmdclass, **params )