Packaging work
authorEd Page <eopage@byu.net>
Thu, 4 Aug 2011 03:30:51 +0000 (22:30 -0500)
committerEd Page <eopage@byu.net>
Fri, 5 Aug 2011 02:32:12 +0000 (21:32 -0500)
Makefile
data/ejpi.desktop [deleted file]
data/template.desktop [new file with mode: 0644]
setup.py
support/scale.py

index d62b1ba..6351708 100644 (file)
--- 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 (file)
index 703cec5..0000000
+++ /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 (file)
index 0000000..68bac42
--- /dev/null
@@ -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
index 1e25ab3..9774520 100755 (executable)
--- 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",
                },
        },
index c706802..f9eb784 100755 (executable)
@@ -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)