From 422fde729217d9b3c35630094c4facade593e3ea Mon Sep 17 00:00:00 2001 From: Ed Page Date: Wed, 3 Aug 2011 22:30:51 -0500 Subject: [PATCH] Packaging work --- Makefile | 75 ++++++++++++++++++++++++--------- data/ejpi.desktop | 10 ----- data/template.desktop | 22 ++++++++++ setup.py | 112 +++++++++++++++++++++++++++++-------------------- support/scale.py | 13 +++++- 5 files changed, 156 insertions(+), 76 deletions(-) delete mode 100644 data/ejpi.desktop create mode 100644 data/template.desktop diff --git a/Makefile b/Makefile index d62b1ba..6351708 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,19 @@ PROJECT_NAME=ejpi PACKAGE_NAME=$(PROJECT_NAME) + SOURCE_PATH=$(PACKAGE_NAME) SOURCE=$(shell find $(SOURCE_PATH) -iname "*.py") -PROGRAM=$(PROJECT_NAME) -OBJ=$(SOURCE:.py=.pyc) + +PROGRAM=$(PROJECT_NAME)-calc DIST_BASE_PATH=./dist -ICON_SIZES=22 28 32 48 +ICON_SIZES=22 28 32 48 80 ICONS=$(foreach size, $(ICON_SIZES), data/icons/$(size)/$(PROJECT_NAME).png) +PACKAGE_VARIANTS=fremantle harmattan ubuntu +DESKTOP_FILES=$(foreach variant, $(PACKAGE_VARIANTS), data/$(variant)/$(PROJECT_NAME).desktop) +SETUP_FILES=$(foreach variant, $(PACKAGE_VARIANTS), ./setup.$(variant).py) +DIST_PATHS=$(foreach variant, $(PACKAGE_VARIANTS), $(DIST_BASE_PATH)_$(variant)) $(DIST_BASE_PATH)_diablo + +OBJ=$(SOURCE:.py=.pyc) TAG_FILE=~/.ctags/$(PROJECT_NAME).tags TODO_FILE=./TODO @@ -21,6 +28,7 @@ PROFILE_VIEW=python -m pstats .profile TODO_FINDER=support/todo.py CTAGS=ctags-exuberant + .PHONY: all run profile debug test build lint tags todo clean distclean all: test @@ -38,22 +46,20 @@ debug: $(OBJ) test: $(OBJ) $(UNIT_TEST) -setup.fremantle.py: setup.py - cog.py -D desktopFilePath=/usr/share/applications/hildon -o ./setup.fremantle.py ./setup.py - chmod +x ./setup.fremantle.py - -setup.harmattan.py: setup.py - cog.py -D desktopFilePath=/usr/share/applications -o ./setup.harmattan.py ./setup.py - chmod +x ./setup.harmattan.py - -package: $(OBJ) $(ICONS) setup.harmattan.py setup.fremantle.py +package: $(OBJ) $(ICONS) $(SETUP_FILES) $(DESKTOP_FILES) + rm -Rf $(DIST_BASE_PATH)_*/* ./setup.fremantle.py sdist_diablo -d $(DIST_BASE_PATH)_diablo ./setup.fremantle.py sdist_fremantle -d $(DIST_BASE_PATH)_fremantle ./setup.harmattan.py sdist_harmattan -d $(DIST_BASE_PATH)_harmattan + ./setup.ubuntu.py sdist_ubuntu -d $(DIST_BASE_PATH)_ubuntu + mkdir $(DIST_BASE_PATH)_ubuntu/build + cd $(DIST_BASE_PATH)_ubuntu/build ; tar -zxvf ../*.tar.gz + cd $(DIST_BASE_PATH)_ubuntu/build ; dpkg-buildpackage -tc -rfakeroot -us -uc upload: dput diablo-extras-builder $(DIST_BASE_PATH)_diablo/$(PROJECT_NAME)*.changes dput fremantle-extras-builder $(DIST_BASE_PATH)_fremantle/$(PROJECT_NAME)*.changes + cp $(DIST_BASE_PATH)_ubuntu/*.deb www/ejpi.deb lint: $(OBJ) $(foreach file, $(SOURCE), $(LINT) $(file) ; ) @@ -64,12 +70,9 @@ todo: $(TODO_FILE) clean: rm -Rf $(OBJ) - rm -f $(ICONS) rm -Rf $(TODO_FILE) - rm -f setup.harmattan.py setup.fremantle.py - rm -Rf $(DIST_BASE_PATH)_diablo build - rm -Rf $(DIST_BASE_PATH)_fremantle build - rm -Rf $(DIST_BASE_PATH)_harmattan build + rm -f $(ICONS) $(SETUP_FILES) $(DESKTOP_FILES) + rm -Rf $(DIST_PATHS) distclean: clean find $(SOURCE_PATH) -name "*.*~" | xargs rm -f @@ -77,9 +80,43 @@ distclean: clean find $(SOURCE_PATH) -name "*.bak" | xargs rm -f find $(SOURCE_PATH) -name ".*.swp" | xargs rm -f + +$(SETUP_FILES): VARIANT=$(word 2, $(subst ., ,$@)) + +setup.fremantle.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH==/usr/share/applications/hildon \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -o $@ $< + chmod +x $@ + +setup.harmattan.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH=/usr/share/applications \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -o $@ $< + chmod +x $@ + +setup.ubuntu.py: setup.py src/constants.py + cog.py -c \ + -D DESKTOP_FILE_PATH=/usr/share/applications \ + -D INPUT_DESKTOP_FILE=data/$(VARIANT)/$(PROJECT_NAME).desktop \ + -o $@ $< + chmod +x $@ + +$(ICONS): SIZE=$(word 3, $(subst /, ,$@)) $(ICONS): data/$(PROJECT_NAME).png support/scale.py - mkdir -p $(dir $(ICONS)) - $(foreach size, $(ICON_SIZES), support/scale.py --input data/$(PROJECT_NAME).png --output data/icons/$(size)/$(PROJECT_NAME).png --size $(size) ; ) + mkdir -p $(dir $@) + support/scale.py --input $< --output $@ --size $(SIZE) + +$(DESKTOP_FILES): VARIANT=$(word 2, $(subst /, ,$@)) +$(DESKTOP_FILES): data/template.desktop + mkdir -p $(dir $@) + cog.py -c \ + -D VARIANT=$(VARIANT) \ + -D PROGRAM=$(PROGRAM) \ + -o $@ $< + $(TAG_FILE): $(OBJ) mkdir -p $(dir $(TAG_FILE)) diff --git a/data/ejpi.desktop b/data/ejpi.desktop deleted file mode 100644 index 703cec5..0000000 --- a/data/ejpi.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=ejpi -Comment=RPN Calculator -Exec=/usr/bin/run-standalone.sh /opt/ejpi/bin/ejpi.py -Icon=ejpi -Categories=Engineering;Science;Education;Utility;Qt; -Type=Application -Encoding=UTF-8 -Version=1.0 -X-Osso-Type=application/x-executable diff --git a/data/template.desktop b/data/template.desktop new file mode 100644 index 0000000..68bac42 --- /dev/null +++ b/data/template.desktop @@ -0,0 +1,22 @@ +[Desktop Entry] +Name=ejpi +GenericName=Calculator +Comment=RPN Calculator +#[[[cog +# if VARIANT == "fremantle": +# cog.outl("Exec=/usr/bin/run-standalone.sh /usr/bin/%s" % PROGRAM) +# elif VARIANT == "harmattan": +# cog.outl("Exec=/usr/bin/invoker --single-instance --type=e /usr/bin/%s" % PROGRAM) +# elif VARIANT == "ubuntu": +# cog.outl("Exec=/usr/bin/%s" % PROGRAM) +# else: +# raise RuntimeError("Unsupported desktop file flavor %r" % PROGRAM) +#]]] +Exec=/usr/bin/run-standalone.sh /opt/ejpi/bin/ejpi.py +#[[[end]]] +Icon=ejpi +Categories=Engineering;Science;Education;Utility;Qt; +Type=Application +Encoding=UTF-8 +Version=1.0 +X-Osso-Type=application/x-executable diff --git a/setup.py b/setup.py index 1e25ab3..9774520 100755 --- a/setup.py +++ b/setup.py @@ -13,7 +13,29 @@ except ImportError: print 'sdist_maemo command not available' from distutils.core import setup -from ejpi import constants + + +#[[[cog +# import cog +# from ejpi import constants +# cog.outl('APP_NAME="%s"' % constants.__app_name__) +# cog.outl('PRETTY_APP_NAME="%s"' % constants.__pretty_app_name__) +# cog.outl('VERSION="%s"' % constants.__version__) +# cog.outl('BUILD="%s"' % constants.__build__) +# cog.outl('DESKTOP_FILE_PATH="%s"' % DESKTOP_FILE_PATH) +# cog.outl('INPUT_DESKTOP_FILE="%s"' % INPUT_DESKTOP_FILE) +#]]] +APP_NAME="ejpi" +PRETTY_APP_NAME="e**(j pi) + 1 = 0" +VERSION="0.1.0" +BUILD=0 +DESKTOP_FILE_PATH="/usr/share/applications" +INPUT_DESKTOP_FILE="data/harmattan/ejpi.desktop" +#[[[end]]] + +CHANGES = """ +""" +BUGTRACKER_URL = "https://bugs.maemo.org/enter_bug.cgi?product=ejpi" def is_package(path): @@ -42,13 +64,9 @@ def find_packages(path, base="", includeRoot=False): yield mname -changes = "" -icon = "data/%s.png" % constants.__app_name__ - - setup( - name=constants.__app_name__, - version=constants.__version__, + name=APP_NAME, + version=VERSION, description="RPN calculator designed for touchscreens", long_description="RPN calculator designed for touchscreens", author="Ed Page", @@ -60,77 +78,79 @@ setup( scripts=[ "ejpi-calc", ], - packages=list(find_packages(constants.__app_name__, includeRoot=True)), + packages=list(find_packages(APP_NAME, includeRoot=True)), data_files=[ - #[[[cog - # import cog - # cog.outl(' ("%s", ["data/%%s.desktop" %% constants.__app_name__]),' % desktopFilePath) - #]]] - ("/usr/share/applications", ["data/%s.desktop" % constants.__app_name__]), - #[[[end]]] - ("/usr/share/icons/hicolor/22x22/apps", ["data/icons/22/%s.png" % constants.__app_name__]), - ("/usr/share/icons/hicolor/28x28/apps", ["data/icons/28/%s.png" % constants.__app_name__]), - ("/usr/share/icons/hicolor/32x32/apps", ["data/icons/32/%s.png" % constants.__app_name__]), - ("/usr/share/icons/hicolor/48x48/apps", ["data/icons/48/%s.png" % constants.__app_name__]), - ("/usr/share/icons/hicolor/scalable/apps", ["data/%s.svg" % constants.__app_name__]), + (DESKTOP_FILE_PATH, [INPUT_DESKTOP_FILE]), + ("/usr/share/icons/hicolor/22x22/apps", ["data/icons/22/%s.png" % APP_NAME]), + ("/usr/share/icons/hicolor/28x28/apps", ["data/icons/28/%s.png" % APP_NAME]), + ("/usr/share/icons/hicolor/32x32/apps", ["data/icons/32/%s.png" % APP_NAME]), + ("/usr/share/icons/hicolor/48x48/apps", ["data/icons/48/%s.png" % APP_NAME]), + ("/usr/share/icons/hicolor/80x80/apps", ["data/icons/80/%s.png" % APP_NAME]), + ("/usr/share/icons/hicolor/scalable/apps", ["data/%s.svg" % APP_NAME]), ], requires=[ "PySide", ], cmdclass={ + 'sdist_ubuntu': sdist_maemo, 'sdist_diablo': sdist_maemo, 'sdist_fremantle': sdist_maemo, 'sdist_harmattan': sdist_maemo, }, options={ + "sdist_ubuntu": { + "debian_package": APP_NAME, + "section": "math", + "copyright": "lgpl", + "changelog": CHANGES, + "buildversion": str(BUILD), + "depends": "python, python-pyside.qtcore, python-pyside.qtgui", + "architecture": "any", + }, "sdist_diablo": { - "debian_package": constants.__app_name__, - "Maemo_Display_Name": constants.__pretty_app_name__, - #"Maemo_Upgrade_Description": changes, - "Maemo_Bugtracker": "https://bugs.maemo.org/enter_bug.cgi?product=ejpi", - "Maemo_Icon_26": "data/icons/48/%s.png" % constants.__app_name__, - "MeeGo_Desktop_Entry_Filename": constants.__app_name__, - #"MeeGo_Desktop_Entry": "", + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/26/%s.png" % APP_NAME, "section": "user/science", "copyright": "lgpl", - "changelog": changes, - "buildversion": str(constants.__build__), + "changelog": CHANGES, + "buildversion": str(BUILD), "depends": "python, python-qt4-core, python-qt4-gui", "architecture": "any", }, "sdist_fremantle": { - "debian_package": constants.__app_name__, - "Maemo_Display_Name": constants.__pretty_app_name__, - #"Maemo_Upgrade_Description": changes, - "Maemo_Bugtracker": "https://bugs.maemo.org/enter_bug.cgi?product=ejpi", - "Maemo_Icon_26": "data/icons/48/%s.png" % constants.__app_name__, - "MeeGo_Desktop_Entry_Filename": constants.__app_name__, - #"MeeGo_Desktop_Entry": "", + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/48/%s.png" % APP_NAME, "section": "user/science", "copyright": "lgpl", - "changelog": changes, - "buildversion": str(constants.__build__), + "changelog": CHANGES, + "buildversion": str(BUILD), "depends": "python, python-pyside.qtcore, python-pyside.qtgui, python-pyside.maemo5", "architecture": "any", }, "sdist_harmattan": { - "debian_package": constants.__app_name__, - "Maemo_Display_Name": constants.__pretty_app_name__, - #"Maemo_Upgrade_Description": changes, - "Maemo_Bugtracker": "https://bugs.maemo.org/enter_bug.cgi?product=ejpi", - "Maemo_Icon_26": "data/icons/26/%s.png" % constants.__app_name__, - "MeeGo_Desktop_Entry_Filename": constants.__app_name__, + "debian_package": APP_NAME, + "Maemo_Display_Name": PRETTY_APP_NAME, + #"Maemo_Upgrade_Description": CHANGES, + "Maemo_Bugtracker": BUGTRACKER_URL, + "Maemo_Icon_26": "data/icons/48/%s.png" % APP_NAME, + "MeeGo_Desktop_Entry_Filename": APP_NAME, #"MeeGo_Desktop_Entry": "", "section": "user/science", "copyright": "lgpl", - "changelog": changes, - "buildversion": str(constants.__build__), + "changelog": CHANGES, + "buildversion": str(BUILD), "depends": "python, python-pyside.qtcore, python-pyside.qtgui", "architecture": "any", }, "bdist_rpm": { "requires": "REPLACEME", - "icon": icon, + "icon": "data/icons/48/%s.png" % APP_NAME, "group": "REPLACEME", }, }, diff --git a/support/scale.py b/support/scale.py index c706802..f9eb784 100755 --- a/support/scale.py +++ b/support/scale.py @@ -3,9 +3,11 @@ from __future__ import with_statement from __future__ import division -from PIL import Image +import os import logging +from PIL import Image + _moduleLogger = logging.getLogger(__name__) @@ -30,6 +32,15 @@ def main(args): parser.error("No positional arguments supported") if None in [options.input, options.output, options.size]: parser.error("Missing argument") + if options.size == "guess": + parts = reversed(os.path.split(options.output)) + for part in parts: + try: + options.size = int(part) + _moduleLogger.info("Assuming image size of %r" % options.size) + break + except ValueError: + pass icon = Image.open(options.input) icon.thumbnail((options.size, options.size), Image.ANTIALIAS) -- 1.7.9.5