From b03b5dcd67191b20509d9a9c374f1b645d0771d1 Mon Sep 17 00:00:00 2001 From: fnielson Date: Thu, 8 Jan 2026 11:52:32 -0700 Subject: [PATCH 1/4] feat(oklch): added oklch to color picker options --- .gitignore | 2 ++ pick/__main__.py | 88 ++------------------------------------------- pick/converters.py | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 85 deletions(-) create mode 100644 pick/converters.py diff --git a/.gitignore b/.gitignore index f588001..5c1a7ee 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,8 @@ *.build *.changes +.idea +.venv build pick.egg-info debian/pick/ diff --git a/pick/__main__.py b/pick/__main__.py index af3fbe4..1c1d878 100644 --- a/pick/__main__.py +++ b/pick/__main__.py @@ -7,92 +7,9 @@ except: Unity = False import cairo, math, json, os, codecs, time, subprocess, sys, base64, colorsys +from .converters import rgb_to_lab, rgb_to_oklch, deltaE, LAB_COLOUR_NAMES -__VERSION__ = "1.60.178" - -if "--snark" in sys.argv: - from .snark import COLOUR_NAMES -else: - from .colours import COLOUR_NAMES - - -def rgb_to_lab(r, g, b): - """Convert RGB colours to LAB colours - thank you Roman Nazarkin, http://stackoverflow.com/a/16020102/1418014""" - inputColor = [r, g, b] - num = 0 - RGB = [0, 0, 0] - for value in inputColor: - value = float(value) / 255 - if value > 0.04045: - value = ((value + 0.055) / 1.055) ** 2.4 - else: - value = value / 12.92 - RGB[num] = value * 100 - num = num + 1 - XYZ = [0, 0, 0] - X = RGB[0] * 0.4124 + RGB[1] * 0.3576 + RGB[2] * 0.1805 - Y = RGB[0] * 0.2126 + RGB[1] * 0.7152 + RGB[2] * 0.0722 - Z = RGB[0] * 0.0193 + RGB[1] * 0.1192 + RGB[2] * 0.9505 - XYZ[0] = round(X, 4) - XYZ[1] = round(Y, 4) - XYZ[2] = round(Z, 4) - - XYZ[0] = float(XYZ[0]) / 95.047 # ref_X = 95.047 - # XYZ[0]: Observer= 2deg, Illuminant= D65 - XYZ[1] = float(XYZ[1]) / 100.0 # ref_Y = 100.000 - XYZ[2] = float(XYZ[2]) / 108.883 # ref_Z = 108.883 - - num = 0 - for value in XYZ: - if value > 0.008856: - value = value ** (0.3333333333333333) - else: - value = (7.787 * value) + (16 / 116) - XYZ[num] = value - num = num + 1 - - Lab = [0, 0, 0] - L = (116 * XYZ[1]) - 16 - a = 500 * (XYZ[0] - XYZ[1]) - b = 200 * (XYZ[1] - XYZ[2]) - - Lab[0] = round(L, 4) - Lab[1] = round(a, 4) - Lab[2] = round(b, 4) - - return Lab - - -def deltaE(labA, labB): - """deltaE is the standard way to compare two colours - for how visibly alike they are""" - deltaL = labA[0] - labB[0] - deltaA = labA[1] - labB[1] - deltaB = labA[2] - labB[2] - c1 = math.sqrt(labA[1] * labA[1] + labA[2] * labA[2]) - c2 = math.sqrt(labB[1] * labB[1] + labB[2] * labB[2]) - deltaC = c1 - c2 - deltaH = deltaA * deltaA + deltaB * deltaB - deltaC * deltaC - if deltaH < 0: - deltaH = 0 - else: - deltaH = math.sqrt(deltaH) - sc = 1.0 + 0.045 * c1 - sh = 1.0 + 0.015 * c1 - deltaLKlsl = deltaL / (1.0) - deltaCkcsc = deltaC / (sc) - deltaHkhsh = deltaH / (sh) - i = (deltaLKlsl * deltaLKlsl + deltaCkcsc * deltaCkcsc + - deltaHkhsh * deltaHkhsh) - if i < 0: - return 0 - else: - return math.sqrt(i) - - -LAB_COLOUR_NAMES = [(rgb_to_lab(x[0], x[1], x[2]), x[3]) for x in COLOUR_NAMES] - +__VERSION__ = "1.61.0" class Main(object): def __init__(self): @@ -271,6 +188,7 @@ def start_everything_first_time(self, on_window_map=None): colorsys.rgb_to_hls(r/255.0, g/255.0, b/255.0)[0] * 360, colorsys.rgb_to_hls(r/255.0, g/255.0, b/255.0)[2] * 100, colorsys.rgb_to_hls(r/255.0, g/255.0, b/255.0)[1] * 100), + "CSS oklch": lambda r, g, b: "oklch({:.4f} {:.4f} {:.2f});".format(*rgb_to_oklch(r, g, b)), "GDK.RGBA": lambda r, g, b: "Gdk.RGBA(%.3f, %.3f, %.3f, 1.0)" % ( r/255.0, g/255.0, b/255.0), "QML Qt.rgba": lambda r, g, b: "Qt.rgba(%.3f, %.3f, %.3f, 1.0)" % ( diff --git a/pick/converters.py b/pick/converters.py new file mode 100644 index 0000000..ddeb40a --- /dev/null +++ b/pick/converters.py @@ -0,0 +1,90 @@ +import math +import numpy as np +import sys +from colour.models import sRGB_to_XYZ, XYZ_to_Oklab + +if "--snark" in sys.argv: + from .snark import COLOUR_NAMES +else: + from .colours import COLOUR_NAMES + +def rgb_to_lab(r, g, b): + """Convert RGB colours to LAB colours.""" + inputColor = [r, g, b] + num = 0 + RGB = [0, 0, 0] + for value in inputColor: + value = float(value) / 255 + if value > 0.04045: + value = ((value + 0.055) / 1.055) ** 2.4 + else: + value = value / 12.92 + RGB[num] = value * 100 + num = num + 1 + XYZ = [0, 0, 0] + X = RGB[0] * 0.4124 + RGB[1] * 0.3576 + RGB[2] * 0.1805 + Y = RGB[0] * 0.2126 + RGB[1] * 0.7152 + RGB[2] * 0.0722 + Z = RGB[0] * 0.0193 + RGB[1] * 0.1192 + RGB[2] * 0.9505 + XYZ[0] = round(X, 4) + XYZ[1] = round(Y, 4) + XYZ[2] = round(Z, 4) + + XYZ[0] = float(XYZ[0]) / 95.047 # ref_X = 95.047 + XYZ[1] = float(XYZ[1]) / 100.0 # ref_Y = 100.000 + XYZ[2] = float(XYZ[2]) / 108.883 # ref_Z = 108.883 + + num = 0 + for value in XYZ: + if value > 0.008856: + value = value ** (0.3333333333333333) + else: + value = (7.787 * value) + (16 / 116) + XYZ[num] = value + num = num + 1 + + Lab = [0, 0, 0] + L = (116 * XYZ[1]) - 16 + a = 500 * (XYZ[0] - XYZ[1]) + b = 200 * (XYZ[1] - XYZ[2]) + + Lab[0] = round(L, 4) + Lab[1] = round(a, 4) + Lab[2] = round(b, 4) + + return Lab + +def rgb_to_oklch(r, g, b): + """Convert RGB (0-255) to OKLCH color space, output L and C in [0,1], H in degrees.""" + rgb_normalized = np.array([r / 255.0, g / 255.0, b / 255.0]) + xyz = sRGB_to_XYZ(rgb_normalized) + oklab = XYZ_to_Oklab(xyz) + L, a, b_val = oklab + C = np.sqrt(a**2 + b_val**2) + H = np.degrees(np.arctan2(b_val, a)) % 360 + return (L, C, H) + +def deltaE(labA, labB): + """deltaE is the standard way to compare two colours for how visibly alike they are""" + deltaL = labA[0] - labB[0] + deltaA = labA[1] - labB[1] + deltaB = labA[2] - labB[2] + c1 = math.sqrt(labA[1] * labA[1] + labA[2] * labA[2]) + c2 = math.sqrt(labB[1] * labB[1] + labB[2] * labB[2]) + deltaC = c1 - c2 + deltaH = deltaA * deltaA + deltaB * deltaB - deltaC * deltaC + if deltaH < 0: + deltaH = 0 + else: + deltaH = math.sqrt(deltaH) + sc = 1.0 + 0.045 * c1 + sh = 1.0 + 0.015 * c1 + deltaLKlsl = deltaL / (1.0) + deltaCkcsc = deltaC / (sc) + deltaHkhsh = deltaH / (sh) + i = (deltaLKlsl * deltaLKlsl + deltaCkcsc * deltaCkcsc + deltaHkhsh * deltaHkhsh) + if i < 0: + return 0 + else: + return math.sqrt(i) + +LAB_COLOUR_NAMES = [(rgb_to_lab(x[0], x[1], x[2]), x[3]) for x in COLOUR_NAMES] From afa924d5bd496b2ba035989ec3e555b059f7765a Mon Sep 17 00:00:00 2001 From: fnielson Date: Tue, 20 Jan 2026 21:33:37 -0700 Subject: [PATCH 2/4] feat(oklch): added packages to requirements --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 06a2d6f..428a7af 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ platforms='any', install_requires=[ - 'setuptools' + 'setuptools', 'colour', 'numpy' ], description='A colour picker that remembers where you picked colours from', From 6ff0f8bacb8fb19978cb19984b9e85bdb2227f8d Mon Sep 17 00:00:00 2001 From: fnielson Date: Thu, 22 Jan 2026 10:08:44 -0700 Subject: [PATCH 3/4] feat(oklch): added packages to requirements --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 428a7af..a21a6a3 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ platforms='any', install_requires=[ - 'setuptools', 'colour', 'numpy' + 'setuptools', 'colour-science', 'numpy' ], description='A colour picker that remembers where you picked colours from', From fd5b74e89f98c8685e46cf9ae52944dfecb4b10f Mon Sep 17 00:00:00 2001 From: fnielson Date: Wed, 28 Jan 2026 12:13:01 -0700 Subject: [PATCH 4/4] fix(deps): fixed build and deps. Added extra files in preparation for using non-deprecated building standards --- .gitignore | 1 + MANIFEST.in | 1 + README.md | 46 ++++++++--- flatpak/manifest.yml | 3 + pick/__main__.py | 26 ++++-- .../128x128/apps/pick-colour-picker.png | Bin .../16x16/apps/pick-colour-picker.png | Bin .../22x22/apps/pick-colour-picker.png | Bin .../24x24/apps/pick-colour-picker.png | Bin .../32x32/apps/pick-colour-picker.png | Bin .../48x48/apps/pick-colour-picker.png | Bin .../512x512/apps/pick-colour-picker.png | Bin .../64x64/apps/pick-colour-picker.png | Bin .../apps/pick-colour-picker-symbolic.svg | 0 .../assets/pick-colour-picker.desktop | 0 .../assets/pick-colour-picker.png | Bin pyproject.toml | 55 +++++++++++++ setup.py | 6 +- setup.sh | 77 ++++++++++++++++++ sil-build.sh | 6 +- snap/snapcraft.yaml | 17 +--- 21 files changed, 201 insertions(+), 37 deletions(-) create mode 100644 MANIFEST.in create mode 100644 flatpak/manifest.yml rename {data/icons => pick/assets/icons/hicolor}/128x128/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/16x16/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/22x22/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/24x24/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/32x32/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/48x48/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/512x512/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/64x64/apps/pick-colour-picker.png (100%) rename {data/icons => pick/assets/icons/hicolor}/scalable/apps/pick-colour-picker-symbolic.svg (100%) rename pick-colour-picker.desktop => pick/assets/pick-colour-picker.desktop (100%) rename pick-colour-picker.png => pick/assets/pick-colour-picker.png (100%) create mode 100644 pyproject.toml create mode 100755 setup.sh diff --git a/.gitignore b/.gitignore index 5c1a7ee..14e5d42 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ .idea .venv +dist build pick.egg-info debian/pick/ diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..e9bc3ba --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +recursive-include pick/assets * diff --git a/README.md b/README.md index 4acf412..69f1e94 100644 --- a/README.md +++ b/README.md @@ -24,17 +24,43 @@ snap install pick-colour-picker ### Source -You'll need the following dependencies: +You'll need the dependencies listed in `pyproject.toml` +Doing the steps in the **Setup** section below will install them for you. - * `gir1.2-dee-1.0` - * `gir1.2-gdkpixbuf-2.0` - * `gir1.2-glib-2.0` - * `gir1.2-gtk-3.0` - * `gir1.2-unity-5.0` - * `python3-cairo` - * `python3-gi` - * `python3-gi-cairo` +**For development with a virtual environment:** +```bash +# Remove old venv if it exists +rm -rf .venv + +# Create venv and activate it +python3 -m venv --system-site-packages .venv +source .venv/bin/activate +``` + +#### Setup +```bash +./setup.sh +``` + +#### Running Pick +```bash +python3 -m pick +``` + +## Packaging -Pick can be run from the checkout with `python3 -m pick`. +Both Flatpak and Snap packages use the shared `assets` directory located at the project root (`/assets`). Ensure any asset updates are made in this directory. +## Distribution +Create a build of the project using the following: + +```bash +sudo python3 setup.py install +``` A `setup.py` is present, so `python3 setup.py install` is possible, but beware that [uninstalling setup.py-installed apps is not as easy as it should be](https://github.com/stuartlangridge/ColourPicker/issues/62) and prepare accordingly if you plan to use this install method. + +#### (Experimental) Building a Wheel or Source Distribution +```bash +pip install build +python -m build +``` diff --git a/flatpak/manifest.yml b/flatpak/manifest.yml new file mode 100644 index 0000000..43e3229 --- /dev/null +++ b/flatpak/manifest.yml @@ -0,0 +1,3 @@ + - name: assets + src: ../assets + dest: /app/share/colourpicker/assets diff --git a/pick/__main__.py b/pick/__main__.py index 1c1d878..6bddc23 100644 --- a/pick/__main__.py +++ b/pick/__main__.py @@ -6,10 +6,22 @@ from gi.repository import Unity except: Unity = False + import cairo, math, json, os, codecs, time, subprocess, sys, base64, colorsys from .converters import rgb_to_lab, rgb_to_oklch, deltaE, LAB_COLOUR_NAMES -__VERSION__ = "1.61.0" +from importlib.resources import files, as_file +from importlib.metadata import version + +# Resources (PEP 621 safe) +icons_dir = files("pick").joinpath("assets/icons") + +# Version (from pyproject) +try: + __VERSION__ = version("pick-colour-picker") +except Exception: + __VERSION__ = "dev" + class Main(object): def __init__(self): @@ -145,11 +157,10 @@ def start_everything_first_time(self, on_window_map=None): else: # not in the theme, so we're probably running locally; # use the local one - snap_icon = os.path.join(os.path.split(__file__)[0], "..", - "data", "icons", "scalable", "apps", - "pick-colour-picker-symbolic.svg") + snap_icon = str(icons_dir.joinpath("hicolor", "scalable", "apps", + "pick-colour-picker-symbolic.svg")) flatpak_icon = ("/app/share/icons/hicolor/scalable/apps/" - "org.kryogenix.Pick-symbolic.svg") + "org.kryogenix.Pick-symbolic.svg") if os.path.isfile(snap_icon): image = Gtk.Image.new_from_file(snap_icon) elif os.path.isfile(flatpak_icon): @@ -248,9 +259,8 @@ def start_everything_first_time(self, on_window_map=None): image = None # not in the theme, so we're probably running locally; # use the local one - licon = os.path.join( - os.path.split(__file__)[0], "..", - "data", "icons", "48x48", "apps", "pick-colour-picker.png") + licon = str(icons_dir.joinpath( + "hicolor", "48x48", "apps", "pick-colour-picker.png")) if os.path.exists(licon): # print("Using local icon", licon) image = Gtk.Image.new_from_file(licon) diff --git a/data/icons/128x128/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/128x128/apps/pick-colour-picker.png similarity index 100% rename from data/icons/128x128/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/128x128/apps/pick-colour-picker.png diff --git a/data/icons/16x16/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/16x16/apps/pick-colour-picker.png similarity index 100% rename from data/icons/16x16/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/16x16/apps/pick-colour-picker.png diff --git a/data/icons/22x22/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/22x22/apps/pick-colour-picker.png similarity index 100% rename from data/icons/22x22/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/22x22/apps/pick-colour-picker.png diff --git a/data/icons/24x24/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/24x24/apps/pick-colour-picker.png similarity index 100% rename from data/icons/24x24/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/24x24/apps/pick-colour-picker.png diff --git a/data/icons/32x32/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/32x32/apps/pick-colour-picker.png similarity index 100% rename from data/icons/32x32/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/32x32/apps/pick-colour-picker.png diff --git a/data/icons/48x48/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/48x48/apps/pick-colour-picker.png similarity index 100% rename from data/icons/48x48/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/48x48/apps/pick-colour-picker.png diff --git a/data/icons/512x512/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/512x512/apps/pick-colour-picker.png similarity index 100% rename from data/icons/512x512/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/512x512/apps/pick-colour-picker.png diff --git a/data/icons/64x64/apps/pick-colour-picker.png b/pick/assets/icons/hicolor/64x64/apps/pick-colour-picker.png similarity index 100% rename from data/icons/64x64/apps/pick-colour-picker.png rename to pick/assets/icons/hicolor/64x64/apps/pick-colour-picker.png diff --git a/data/icons/scalable/apps/pick-colour-picker-symbolic.svg b/pick/assets/icons/hicolor/scalable/apps/pick-colour-picker-symbolic.svg similarity index 100% rename from data/icons/scalable/apps/pick-colour-picker-symbolic.svg rename to pick/assets/icons/hicolor/scalable/apps/pick-colour-picker-symbolic.svg diff --git a/pick-colour-picker.desktop b/pick/assets/pick-colour-picker.desktop similarity index 100% rename from pick-colour-picker.desktop rename to pick/assets/pick-colour-picker.desktop diff --git a/pick-colour-picker.png b/pick/assets/pick-colour-picker.png similarity index 100% rename from pick-colour-picker.png rename to pick/assets/pick-colour-picker.png diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8f5ed31 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,55 @@ +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "pick-colour-picker" +version = "1.61.0" +description = "A colour picker that remembers where you picked colours from" +readme = "README.md" +license = { text = "MIT" } + +authors = [ + { name = "Stuart Langridge", email = "sil@kryogenix.org" } +] + +keywords = ["pick", "colour", "colour picker", "color", "color picker"] + +classifiers = [ + "Programming Language :: Python", + "Environment :: X11 Applications :: GTK", + "Development Status :: 4 - Beta", + "Intended Audience :: End Users/Desktop", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Topic :: Multimedia :: Graphics" +] + +dependencies = [ + "colour-science", +] + +[tool.system-dependencies] +system-dependencies = [ + "gir1.2-dee-1.0", + "gir1.2-gdkpixbuf-2.0", + "gir1.2-glib-2.0", + "gir1.2-gtk-3.0", + "gir1.2-unity-7.0", + "python3-cairo", + "python3-gi", + "python3-gi-cairo", +] + +[project.urls] +Homepage = "https://kryogenix.org/code/pick" + +[project.gui-scripts] +pick-colour-picker = "pick.__main__:main" + +[tool.setuptools] +include-package-data = true + +[tool.setuptools.packages.find] +where = ["."] + diff --git a/setup.py b/setup.py index a21a6a3..7d3f23e 100644 --- a/setup.py +++ b/setup.py @@ -4,8 +4,8 @@ from setuptools import setup icons = [] -for dirpath, dirnames, filenames in os.walk("data/icons/"): - relpath = dirpath[len("data/icons/"):] +for dirpath, dirnames, filenames in os.walk("pick/assets/icons/"): + relpath = dirpath[len("pick/assets/icons/"):] if relpath and filenames: icons.append((sys.prefix+"/share/icons/hicolor/"+relpath, [os.path.join(dirpath, x) for x in filenames])) @@ -33,7 +33,7 @@ platforms='any', install_requires=[ - 'setuptools', 'colour-science', 'numpy' + 'setuptools' ], description='A colour picker that remembers where you picked colours from', diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..b11d26e --- /dev/null +++ b/setup.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash + +# Exit on error +set -e + +PIP="pip" + +usage() { + echo "Usage: $0 [-p ] [-h]" + echo "" + echo "Options:" + echo " -p, --pip Specify pip executable to use (default: pip)" + echo " -h, --help Show this help message" +} + +# Parse arguments +while [[ $# -gt 0 ]]; do + case "$1" in + -p|--pip) + PIP="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + *) + break + ;; + esac +done + +# Check for pyproject.toml +if [ ! -f pyproject.toml ]; then + echo "pyproject.toml not found in current directory." + exit 1 +fi + +# Check if running inside a venv and if it has access to system site packages +if python3 -c "import sys; print(getattr(sys, 'real_prefix', None) or sys.prefix != getattr(sys, 'base_prefix', sys.prefix))" | grep -q "True"; then + # In a venv, check for system site packages + if ! python3 -c "import site; print(any('site-packages' in p and 'local' not in p for p in site.getsitepackages()))" | grep -q "True"; then + echo "WARNING: Your virtual environment does not have access to system site packages." + echo " Please recreate it with:" + echo " python3 -m venv --system-site-packages .venv" + echo " Otherwise, system packages like 'gi' will not be available." + fi +fi + +# Extract Python dependencies from pyproject.toml (PEP 621 or poetry format) +DEPS=$(awk '/^\[project\]/{flag=1} flag && /^dependencies = \[/{getline; while($0 !~ /\]/){gsub(/[",]/,""); print $1; getline}}' pyproject.toml) + +# Extract system dependencies from [tool.system-dependencies] section +SYS_DEPS=$(awk '/^\[tool.system-dependencies\]/{flag=1; next} /^\[.*\]/{flag=0} flag && NF {gsub(/[",\[\]]/, ""); if ($0 !~ /^system-dependencies/) print}' pyproject.toml | tr '\n' ' ') + +if [ -z "$DEPS" ]; then + echo "No Python dependencies found in pyproject.toml." +else + echo "Installing Python dependencies:" + echo "$DEPS" + echo "" + echo "---" + for dep in $DEPS; do + echo "Running: $PIP install $dep" + "$PIP" install "$dep" + done +fi + +if [ -n "$SYS_DEPS" ]; then + echo "" + echo "Installing system dependencies with apt-get (requires sudo):" + echo "$SYS_DEPS" + echo "" + echo "---" + sudo apt-get update + sudo apt-get install -y $SYS_DEPS +fi diff --git a/sil-build.sh b/sil-build.sh index 89b799f..318ab87 100755 --- a/sil-build.sh +++ b/sil-build.sh @@ -1,13 +1,13 @@ #!/bin/bash # Stuart's build script. Yes. -# Basically this is here to confirm that Stuart remembered to update __VERSION__ in __main__.py +# Basically this is here to confirm that Stuart remembered to update the version in both files -PYV=$(grep "__VERSION__ =" pick/__main__.py | cut -d'"' -f2) +PYV=$(grep "version =" pyproject.toml | cut -d'"' -f2) SNAPV=$(grep '^version:' snapcraft.yaml | cut -d'"' -f2) if [ A$PYV != A$SNAPV ]; then - echo The versions from snapcraft.yaml and pick/__main__.py differ. Fix it. + echo The versions from snapcraft.yaml and pyproject.toml differ. Fix it. exit 1 fi diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 669ea39..1a73cf3 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -57,19 +57,8 @@ apps: - x11 parts: - desktop-gtk3: - build-packages: - - libgtk-3-dev - make-parameters: - - FLAVOR=gtk3 - plugin: make - source: https://github.com/ubuntu/snapcraft-desktop-helpers.git - source-subdir: gtk - - pick-colour-picker: - after: - - desktop-gtk3 - source: . + colourpicker: + source: ../ plugin: python python-version: python3 stage-packages: @@ -84,6 +73,8 @@ parts: override-pull: | snapcraftctl pull sed -i 's|Icon=pick-colour-picker|Icon=${SNAP}/usr/share/pixmaps/pick-colour-picker.png|g' pick-colour-picker.desktop + organize: + assets: usr/share/colourpicker/assets # Most of what Pick requires is provided by the GNOME platform snap; so just prime what we need. prime: - bin