From 68a264f9baac30c2b637365399e2fe82b55720e1 Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Tue, 4 Sep 2018 09:00:31 +0200 Subject: [PATCH] Add dmg building on MacOS, move build-related stuff to deploy/ --- Makefile | 26 ++- README.md | 4 +- assets/logo.ico | Bin 0 -> 16958 bytes assets/logo.png | Bin 1554 -> 18259 bytes deploy/dmgbuild_settings.py | 174 ++++++++++++++++++ deploy/mkicns | 20 ++ windows-build.bat => deploy/windows-build.bat | 2 + luftdaten-tool.spec | 5 +- 8 files changed, 221 insertions(+), 10 deletions(-) create mode 100644 assets/logo.ico create mode 100644 deploy/dmgbuild_settings.py create mode 100755 deploy/mkicns rename windows-build.bat => deploy/windows-build.bat (96%) diff --git a/Makefile b/Makefile index 2a134d1..b4ad471 100644 --- a/Makefile +++ b/Makefile @@ -5,6 +5,7 @@ PY_FILES = $(wildcard *.py) $(wildcard gui/*.py) UI_COMPILED = $(UI_FILES:.ui=.py) TS_COMPILED = $(TS_FILES:.ts=.qm) +# python3.6 on Windows is only available as python.exe ifeq (, $(shell which python3)) PY ?= python else @@ -26,13 +27,26 @@ clean: run: all $(PY) luftdaten-tool.py -dist: all - $(PY) -m PyInstaller -y luftdaten-tool.spec +# Updates all translation files in i18n/ directory +i18n-update: $(UI_COMPILED) + @for f in $(TS_FILES) ; do \ + pylupdate5 $(PY_FILES) -ts $$f -verbose; \ + done deps: $(PY) -m pip install -U -r requirements.txt -i18n-update: - @for f in $(TS_FILES) ; do \ - pylupdate5 *.py gui/*.py -ts $$f -verbose; \ - done +# Here go platform-specific buildsteps +UNAME_S := $(shell uname -s) + +ifeq ($(UNAME_S),Darwin) +PLATFORM_DEPS := assets/logo.icns +assets/logo.icns: assets/logo.png + deploy/mkicns $< +endif + +dist: all $(PLATFORM_DEPS) + $(PY) -m PyInstaller -y luftdaten-tool.spec + +dmg: dist + dmgbuild -s deploy/dmgbuild_settings.py -D app=dist/Luftdaten.info\ Flashing\ Tool.app "Luftdaten.info Flashing Tool" dist/luftdaten-tool.dmg diff --git a/README.md b/README.md index 33e3c5d..e8ca06c 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Currently Windows builds require *Python 3.6* installed system-wide and added to `%PATH%`. To install python and cygwin dependencies and build everything use -`windows-build.bat` batch script. +`deploy\windows-build.bat` batch script. ### MacOS Currently MacOS builds require *Python 3.6* and Qt SDK installed (just the "Qt > @@ -34,7 +34,7 @@ Currently MacOS builds require *Python 3.6* and Qt SDK installed (just the "Qt > Then just install dependencies and build everything using: - make deps dist + make deps dmg Development ----------- diff --git a/assets/logo.ico b/assets/logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..212081085a034c9b1d948abc7c8bdbbf252db8cc GIT binary patch literal 16958 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 literal 0 HcmV?d00001 diff --git a/assets/logo.png b/assets/logo.png index 5ae9b7c8e0c4db1beedabdbe406301a46fb138db..d3320affba28b6ab5e60cdd69224846c9c89e7fd 100644 GIT binary patch literal 18259 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 Ul#U!=U|?YIboFyt=akR{0HMIXr~m)} literal 1554 zcmeAS@N?(olHy`uVBq!ia0y~yU^oH79Lx+1471we)-W(I7zg--xH2#>{3j7?pZchY zfq_AwB*-tA!C`-c!29_L=MC;F^ardj2tU7X4+8^hou`XqNX4zUcVAArt-!;O!1%}@ z!TtUJEpNa0y%mu;GWFBnw`a<>O6WL9L`+MKgrHlu*H|rC9zUnYi)9AayTD7PwKirm zoGWC$@q)0`FLwQ_&K!TP^|u7L@kyVwe{|s(n}y&j z`GYnK1nOmOaa6FbmCpT8CEC7yhQ#`_0si8N2C$?bDOhdYJb-ZeBK-`QftI%bktOWaertt0``86PX*aZlS-j$!66_`!-2_Vm#|{ z?#b0J)jM?l`fm7U&L7|TUf`AE+!yjk{~kH{T&8NhaNi@pZ%xZY#LXLS@hUBxvVbS9 zbrOU_ zQ)Sz{MgHp#@%cL4GCIH9)BTQd+o&K z)?5i<58~xY)FOUaO?eQ>`uW6%Po)>6yq0b6eE8-y>wd?N){)=tCs?^AsqwO?xKG}3 zx#OZ-Rh!z&eY;Cc-LG0?DlG5po@+W`|8t?dTMi8Kiys-}D%@wO-VTV%I!OTJ~U$e9j}vLw(h_Elw9G@^6X|G)ULkmaIA=tvvmHE8?3gf{lK2C zCF|N%1NQ1YyYXZ#OXd5TH_4a39EthgEHa^}q|YU0x%i6rVoMjjtMRxRvu?x6-|f=h zT`J>pf2Zbu&*#aUxLIX-w)N+=TY|*qh-FK0$iB>d^vCU`B*)P&5*5orm8SfveUjtv zc1c%cro`5Hl|F7oXWvW+Nj7BvJG)qH;qRK~8UA~2`kOp^&XsNy#VE@1+3NZsj@HtE5$m^mog`v&vNtJd)s=xnsaCJ`^L&zZr(p5^6$-we3oC; zjLJXVKCi63_Up~7>{m`swEWo=vwOLmOc6U%f_2Ly1M~GQ)@v4TQ@OTk+r6G;Wg-7I zHR-H6{dD?%m!c_p0o+;6x1zbPR3CKmb=51}R%>4xrep8>qBlwHLB8TC`=$5IGPfPi z3SS};U87;?P&+Be=FYR*;x|`nrRz&>OZd?rYrR8vOa6qtFO(;^&Ww7ke)>>4i_k(F zftJb78fQduWo^I0^2t`#D=%egKIiE#_ZKHlc4?W})vgnJNv)voRZ;sZv&xC9qFR(@ ztulW8TC%C4O=e~W_pO|O$OUYdN_h|0sQg~?_ndZC*3tZc%YM2`p3mR><-54&g(Y{N zthYKaQ@Qe<+)PU$&d|5B{v|HTyHqgwigW72tEc{?_x#(oPvc%u7XR?fT%e{6pde>@idmy!|e1Y7Xt{vsJ9WRutPB`B8wNE+O_-^NF z0gslKC;VT$(6`z>@BPkSTwfo24@nY;Q9M?)-Bz*S#Ofw=}kHy^y&XE aCU$AjJ?nQL&Szj?VDNPHb6Mw<&;$TMR17cx diff --git a/deploy/dmgbuild_settings.py b/deploy/dmgbuild_settings.py new file mode 100644 index 0000000..c7588ad --- /dev/null +++ b/deploy/dmgbuild_settings.py @@ -0,0 +1,174 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import biplist +import os.path + +# +# Example settings file for dmgbuild +# + +# Use like this: dmgbuild -s settings.py "Test Volume" test.dmg + +# You can actually use this file for your own application (not just TextEdit) +# by doing e.g. +# +# dmgbuild -s settings.py -D app=/path/to/My.app "My Application" MyApp.dmg + +# .. Useful stuff .............................................................. + +application = defines.get('app', '/Applications/TextEdit.app') +appname = os.path.basename(application) + +def icon_from_app(app_path): + plist_path = os.path.join(app_path, 'Contents', 'Info.plist') + plist = biplist.readPlist(plist_path) + icon_name = plist['CFBundleIconFile'] + icon_root,icon_ext = os.path.splitext(icon_name) + if not icon_ext: + icon_ext = '.icns' + icon_name = icon_root + icon_ext + return os.path.join(app_path, 'Contents', 'Resources', icon_name) + +# .. Basics .................................................................... + +# Uncomment to override the output filename +# filename = 'test.dmg' + +# Uncomment to override the output volume name +# volume_name = 'Test' + +# Volume format (see hdiutil create -help) +format = defines.get('format', 'UDBZ') + +# Volume size (must be large enough for your files) +size = defines.get('size', '100M') + +# Files to include +files = [ application ] + +# Symlinks to create +symlinks = { 'Applications': '/Applications' } + +# Volume icon +# +# You can either define icon, in which case that icon file will be copied to the +# image, *or* you can define badge_icon, in which case the icon file you specify +# will be used to badge the system's Removable Disk icon +# +#icon = '/path/to/icon.icns' +badge_icon = icon_from_app(application) + +# Where to put the icons +icon_locations = { + appname: (140, 120), + 'Applications': (500, 120) + } + +# .. Window configuration ...................................................... + +# Background +# +# This is a STRING containing any of the following: +# +# #3344ff - web-style RGB color +# #34f - web-style RGB color, short form (#34f == #3344ff) +# rgb(1,0,0) - RGB color, each value is between 0 and 1 +# hsl(120,1,.5) - HSL (hue saturation lightness) color +# hwb(300,0,0) - HWB (hue whiteness blackness) color +# cmyk(0,1,0,0) - CMYK color +# goldenrod - X11/SVG named color +# builtin-arrow - A simple built-in background with a blue arrow +# /foo/bar/baz.png - The path to an image file +# +# The hue component in hsl() and hwb() may include a unit; it defaults to +# degrees ('deg'), but also supports radians ('rad') and gradians ('grad' +# or 'gon'). +# +# Other color components may be expressed either in the range 0 to 1, or +# as percentages (e.g. 60% is equivalent to 0.6). +background = 'builtin-arrow' + +show_status_bar = False +show_tab_view = False +show_toolbar = False +show_pathbar = False +show_sidebar = False +sidebar_width = 180 + +# Window position in ((x, y), (w, h)) format +window_rect = ((100, 100), (640, 280)) + +# Select the default view; must be one of +# +# 'icon-view' +# 'list-view' +# 'column-view' +# 'coverflow' +# +default_view = 'icon-view' + +# General view configuration +show_icon_preview = False + +# Set these to True to force inclusion of icon/list view settings (otherwise +# we only include settings for the default view) +include_icon_view_settings = 'auto' +include_list_view_settings = 'auto' + +# .. Icon view configuration ................................................... + +arrange_by = None +grid_offset = (0, 0) +grid_spacing = 100 +scroll_position = (0, 0) +label_pos = 'bottom' # or 'right' +text_size = 16 +icon_size = 128 + +# .. List view configuration ................................................... + +# Column names are as follows: +# +# name +# date-modified +# date-created +# date-added +# date-last-opened +# size +# kind +# label +# version +# comments +# +list_icon_size = 16 +list_text_size = 12 +list_scroll_position = (0, 0) +list_sort_by = 'name' +list_use_relative_dates = True +list_calculate_all_sizes = False, +list_columns = ('name', 'date-modified', 'size', 'kind', 'date-added') +list_column_widths = { + 'name': 300, + 'date-modified': 181, + 'date-created': 181, + 'date-added': 181, + 'date-last-opened': 181, + 'size': 97, + 'kind': 115, + 'label': 100, + 'version': 75, + 'comments': 300, + } +list_column_sort_directions = { + 'name': 'ascending', + 'date-modified': 'descending', + 'date-created': 'descending', + 'date-added': 'descending', + 'date-last-opened': 'descending', + 'size': 'descending', + 'kind': 'ascending', + 'label': 'ascending', + 'version': 'ascending', + 'comments': 'ascending', + } diff --git a/deploy/mkicns b/deploy/mkicns new file mode 100755 index 0000000..e30b348 --- /dev/null +++ b/deploy/mkicns @@ -0,0 +1,20 @@ +#!/bin/sh +# +# Builds .icns file from a single .png file +# + +set -e + +filename="${1%.*}" +mkdir "$filename".iconset +for i in 16 32 128 256 ; do + n=$(( i * 2 )) + sips -z $i $i "$1" --out "$filename".iconset/icon_${i}x${i}.png + sips -z $n $n "$1" --out "$filename".iconset/icon_${i}x${i}@2x.png + [[ $n -eq 512 ]] && \ + sips -z $n $n "$1" --out "$filename".iconset/icon_${n}x${n}.png + (( i++ )) +done +cp "$1" "$filename".iconset/icon_512x512@2x.png +iconutil -c icns "$filename".iconset +rm -r "$filename".iconset diff --git a/windows-build.bat b/deploy/windows-build.bat similarity index 96% rename from windows-build.bat rename to deploy/windows-build.bat index dfae8af..905cee9 100644 --- a/windows-build.bat +++ b/deploy/windows-build.bat @@ -1,3 +1,5 @@ +cd .. + if not exist build mkdir build rem Download cygwin installer diff --git a/luftdaten-tool.spec b/luftdaten-tool.spec index 2852b67..c4eb8c4 100644 --- a/luftdaten-tool.spec +++ b/luftdaten-tool.spec @@ -26,10 +26,11 @@ exe = EXE(pyz, strip=False, upx=True, runtime_tmpdir=None, - console=False ) + console=False, + icon='assets/logo.ico') # This is used on MacOS only app = BUNDLE(exe, name='Luftdaten.info Flashing Tool.app', - icon=None, + icon='assets/logo.icns', bundle_identifier=None)