From 569c00ff5ff301dec5a8ffc1608d0b0cdaccf522 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sun, 26 Aug 2018 18:38:35 +0300 Subject: [PATCH] Allow for parallel development instance This adds a configuration option in meson, if set it changes the application ID allowing for stable and development version to be run at the same time. --- .gitlab-ci.yml | 7 ++-- meson.build | 36 +++++++++++++++---- meson_options.txt | 9 +++++ ...casts.json => org.gnome.PodcastsDevel.json | 6 ++-- podcasts-gtk/build.rs | 9 ++--- podcasts-gtk/resources/gtk/empty_view.ui | 3 +- podcasts-gtk/resources/gtk/style.css | 12 +++++++ podcasts-gtk/resources/icons/meson.build | 16 ++++++++- podcasts-gtk/resources/meson.build | 32 ++++++++++++----- ...n => org.gnome.Podcasts.appdata.xml.in.in} | 2 +- ...op.in => org.gnome.Podcasts.desktop.in.in} | 2 +- .../resources/org.gnome.Podcasts.service.in | 4 +-- podcasts-gtk/src/app.rs | 9 +++-- podcasts-gtk/src/widgets/aboutdialog.rs | 6 ++-- podcasts-gtk/src/widgets/empty.rs | 5 ++- scripts/cargo.sh | 7 ++-- 16 files changed, 121 insertions(+), 44 deletions(-) create mode 100644 meson_options.txt rename org.gnome.Podcasts.json => org.gnome.PodcastsDevel.json (91%) rename podcasts-gtk/resources/{org.gnome.Podcasts.appdata.xml.in => org.gnome.Podcasts.appdata.xml.in.in} (97%) rename podcasts-gtk/resources/{org.gnome.Podcasts.desktop.in => org.gnome.Podcasts.desktop.in.in} (95%) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f511ee5..45a9210 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -10,9 +10,10 @@ flatpak: image: "registry.gitlab.gnome.org/gnome/gnome-runtime-images/rust_bundle:master" stage: "test" variables: - MANIFEST_PATH: "org.gnome.Podcasts.json" + MANIFEST_PATH: "org.gnome.PodcastsDevel.json" FLATPAK_MODULE: "gnome-podcasts" - DBUS_ID: "org.gnome.Podcasts" + CONFIGURE_ARGS: "-Dprofile=development" + DBUS_ID: "org.gnome.PodcastsDevel" script: - flatpak-builder --stop-at=${FLATPAK_MODULE} app ${MANIFEST_PATH} @@ -21,7 +22,7 @@ flatpak: - flatpak-builder --run app ${MANIFEST_PATH} glib-compile-resources --sourcedir=podcasts-gtk/resources/ podcasts-gtk/resources/resources.xml # Build the flatpak repo - - flatpak-builder --run app ${MANIFEST_PATH} meson --prefix=/app _build + - flatpak-builder --run app ${MANIFEST_PATH} meson --prefix=/app ${CONFIGURE_ARGS} _build - flatpak-builder --run app ${MANIFEST_PATH} ninja -C _build install # Run the tests diff --git a/meson.build b/meson.build index 0d31185..f621f63 100644 --- a/meson.build +++ b/meson.build @@ -7,6 +7,25 @@ project( license: 'GPLv3', ) +if get_option('profile') == 'development' + profile = 'Devel' + vcs_tag = run_command('git', 'rev-parse', '--short', 'HEAD').stdout().strip() + if vcs_tag == '' + version_suffix = '-devel' + else + version_suffix = '-@0@'.format (vcs_tag) + endif +else + profile = '' + version_suffix = '' +endif + +application_id = 'org.gnome.Podcasts@0@'.format(profile) +i18n = import('i18n') + +subdir('podcasts-gtk/po') +podir = join_paths (meson.source_root (), 'podcasts-gtk', 'po') + podcasts_version = meson.project_version() version_array = podcasts_version.split('.') podcasts_major_version = version_array[0].to_int() @@ -18,16 +37,12 @@ podcasts_bindir = join_paths(podcasts_prefix, get_option('bindir')) podcasts_localedir = join_paths(podcasts_prefix, get_option('localedir')) podcasts_conf = configuration_data() -podcasts_conf.set('BINDIR', podcasts_bindir) +podcasts_conf.set('appid', application_id) +podcasts_conf.set('bindir', podcasts_bindir) datadir = get_option('datadir') -icondir = join_paths(datadir, 'icons') subdir('podcasts-gtk/resources') -i18n = import('i18n') -subdir('podcasts-gtk/po') -podir = join_paths (meson.source_root (), 'podcasts-gtk', 'po') - cargo = find_program('cargo', required: false) gresource = find_program('glib-compile-resources', required: false) cargo_vendor = find_program('cargo-vendor', required: false) @@ -38,7 +53,14 @@ cargo_release = custom_target('cargo-build', output: ['gnome-podcasts'], install: true, install_dir: podcasts_bindir, - command: [cargo_script, '@CURRENT_SOURCE_DIR@', '@OUTPUT@', podcasts_localedir]) + command: [cargo_script, + '@CURRENT_SOURCE_DIR@', + '@OUTPUT@', + podcasts_localedir, + application_id, + podcasts_version + version_suffix, + profile + ]) run_target('release', command: ['scripts/release.sh', meson.project_name() + '-' + podcasts_version diff --git a/meson_options.txt b/meson_options.txt new file mode 100644 index 0000000..4c5cc39 --- /dev/null +++ b/meson_options.txt @@ -0,0 +1,9 @@ +option ( + 'profile', + type: 'combo', + choices: [ + 'default', + 'development' + ], + value: 'default' +) diff --git a/org.gnome.Podcasts.json b/org.gnome.PodcastsDevel.json similarity index 91% rename from org.gnome.Podcasts.json rename to org.gnome.PodcastsDevel.json index a7f0f32..a155dc1 100644 --- a/org.gnome.Podcasts.json +++ b/org.gnome.PodcastsDevel.json @@ -1,5 +1,5 @@ { - "app-id" : "org.gnome.Podcasts", + "app-id" : "org.gnome.PodcastsDevel", "runtime" : "org.gnome.Platform", "runtime-version" : "master", "sdk" : "org.gnome.Sdk", @@ -30,8 +30,7 @@ ], "env" : { "CARGO_HOME" : "/run/build/Podcasts/cargo", - "RUST_BACKTRACE" : "1", - "DEBUG" : "true" + "RUST_BACKTRACE" : "1" } }, "modules" : [ @@ -48,6 +47,7 @@ { "name" : "gnome-podcasts", "buildsystem" : "meson", + "config-opts" : [ "-Dprofile=development" ], "sources" : [ { "type" : "git", diff --git a/podcasts-gtk/build.rs b/podcasts-gtk/build.rs index 45d6332..c8279e6 100644 --- a/podcasts-gtk/build.rs +++ b/podcasts-gtk/build.rs @@ -1,7 +1,3 @@ -use std::env; -use std::fs::File; -use std::io::Write; -use std::path::Path; use std::process::Command; fn main() { @@ -9,9 +5,10 @@ fn main() { println!("cargo:rerun-if-changed=resources"); println!("cargo:rerun-if-changed=resources/*"); - Command::new("glib-compile-resources") + let out = Command::new("glib-compile-resources") .args(&["--generate", "resources.xml"]) .current_dir("resources") .status() - .unwrap(); + .expect("failed to generate resources"); + assert!(out.success()); } diff --git a/podcasts-gtk/resources/gtk/empty_view.ui b/podcasts-gtk/resources/gtk/empty_view.ui index d12ad8e..a999f16 100644 --- a/podcasts-gtk/resources/gtk/empty_view.ui +++ b/podcasts-gtk/resources/gtk/empty_view.ui @@ -81,13 +81,12 @@ Tobias Bernard vertical 12 - + True False center center 256 - org.gnome.Podcasts-symbolic diff --git a/podcasts-gtk/resources/gtk/style.css b/podcasts-gtk/resources/gtk/style.css index 3af698c..2635c1c 100644 --- a/podcasts-gtk/resources/gtk/style.css +++ b/podcasts-gtk/resources/gtk/style.css @@ -17,4 +17,16 @@ list, border { .player-show-label { font-size: smaller; +} + +.devel headerbar { + background: transparent -gtk-icontheme("system-run-symbolic") 80% 0/128px 128px no-repeat, + linear-gradient(to left, + mix(@theme_selected_bg_color, @theme_bg_color, 0.5) 8%, + @theme_bg_color 25%); + color: alpha(@theme_fg_color, 0.1); +} + +.devel headerbar label { + color: @theme_fg_color; } \ No newline at end of file diff --git a/podcasts-gtk/resources/icons/meson.build b/podcasts-gtk/resources/icons/meson.build index 59c9673..8555a1c 100644 --- a/podcasts-gtk/resources/icons/meson.build +++ b/podcasts-gtk/resources/icons/meson.build @@ -1 +1,15 @@ -install_subdir('hicolor', install_dir: icondir) \ No newline at end of file +scalable_dir = join_paths('hicolor', 'scalable', 'apps') + +install_data( + join_paths(scalable_dir, 'org.gnome.Podcasts.svg'), + install_dir: join_paths(datadir, 'icons', scalable_dir), + rename: '@0@.svg'.format(application_id) +) + +symbolic_dir = join_paths('hicolor', 'symbolic', 'apps') + +install_data( + join_paths(symbolic_dir, 'org.gnome.Podcasts-symbolic.svg'), + install_dir: join_paths(datadir, 'icons', symbolic_dir), + rename: '@0@-symbolic.svg'.format(application_id) +) \ No newline at end of file diff --git a/podcasts-gtk/resources/meson.build b/podcasts-gtk/resources/meson.build index 425471b..4078de7 100644 --- a/podcasts-gtk/resources/meson.build +++ b/podcasts-gtk/resources/meson.build @@ -1,27 +1,41 @@ subdir('icons') +desktop_conf = configuration_data() +desktop_conf.set('icon', application_id) i18n.merge_file ('desktop-file', type: 'desktop', - input: 'org.gnome.Podcasts.desktop.in', - output: 'org.gnome.Podcasts.desktop', + input: configure_file( + input: files('org.gnome.Podcasts.desktop.in.in'), + output: 'org.gnome.Podcasts.desktop.in', + configuration: desktop_conf + ), + output: '@0@.desktop'.format(application_id), po_dir: podir, install: true, install_dir: join_paths (datadir, 'applications') ) +appdata_conf = configuration_data() +appdata_conf.set('appid', application_id) i18n.merge_file ('appdata-file', - input: 'org.gnome.Podcasts.appdata.xml.in', - output: 'org.gnome.Podcasts.appdata.xml', + input: configure_file( + input: files('org.gnome.Podcasts.appdata.xml.in.in'), + output: 'org.gnome.Podcasts.appdata.xml.in', + configuration: appdata_conf + ), + output: '@0@.appdata.xml'.format(application_id), po_dir: podir, install: true, - install_dir: join_paths (datadir, 'appdata') + install_dir: join_paths (datadir, 'metainfo') ) install_data('org.gnome.Podcasts.gschema.xml', install_dir: join_paths(datadir, 'glib-2.0', 'schemas')) -configure_file(input: 'org.gnome.Podcasts.service.in', - output: 'org.gnome.Podcasts.service', - configuration: podcasts_conf, - install_dir: join_paths([datadir,'dbus-1/services'])) +configure_file( + input: 'org.gnome.Podcasts.service.in', + output: '@0@.service'.format(application_id), + configuration: podcasts_conf, + install_dir: join_paths(datadir,'dbus-1', 'services') +) meson.add_install_script('../../scripts/compile-gschema.py') diff --git a/podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in b/podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in similarity index 97% rename from podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in rename to podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in index 00b62e0..ffd0892 100644 --- a/podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in +++ b/podcasts-gtk/resources/org.gnome.Podcasts.appdata.xml.in.in @@ -1,6 +1,6 @@ - org.gnome.Podcasts + @appid@ Podcasts GPL-3.0 CC0-1.0 diff --git a/podcasts-gtk/resources/org.gnome.Podcasts.desktop.in b/podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in similarity index 95% rename from podcasts-gtk/resources/org.gnome.Podcasts.desktop.in rename to podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in index a0ecd30..a6f62a4 100644 --- a/podcasts-gtk/resources/org.gnome.Podcasts.desktop.in +++ b/podcasts-gtk/resources/org.gnome.Podcasts.desktop.in.in @@ -2,7 +2,7 @@ Name=Podcasts Comment=Listen to your favorite podcasts, right from your desktop. # Translators: Do NOT translate or transliterate this text (this is an icon file name)! -Icon=org.gnome.Podcasts +Icon=@icon@ Exec=gnome-podcasts Terminal=false Type=Application diff --git a/podcasts-gtk/resources/org.gnome.Podcasts.service.in b/podcasts-gtk/resources/org.gnome.Podcasts.service.in index a9a24cb..54b367b 100644 --- a/podcasts-gtk/resources/org.gnome.Podcasts.service.in +++ b/podcasts-gtk/resources/org.gnome.Podcasts.service.in @@ -1,3 +1,3 @@ [D-BUS Service] -Name=org.gnome.Podcasts -Exec=@BINDIR@/gnome-podcasts --gapplication-service \ No newline at end of file +Name=@appid@ +Exec=@bindir@/gnome-podcasts --gapplication-service \ No newline at end of file diff --git a/podcasts-gtk/src/app.rs b/podcasts-gtk/src/app.rs index b4397c4..bde3b79 100644 --- a/podcasts-gtk/src/app.rs +++ b/podcasts-gtk/src/app.rs @@ -28,7 +28,8 @@ use std::sync::Arc; use i18n::i18n; -pub(crate) const APP_ID: &str = "org.gnome.Podcasts"; +pub(crate) const APP_ID: &str = env!("APP_ID"); +pub(crate) const VERSION: &str = env!("VERSION"); /// Creates an action named `name` in the action map `T with the handler `F` fn action(thing: &T, name: &str, action: F) @@ -82,12 +83,15 @@ pub(crate) struct App { impl App { pub(crate) fn new(application: >k::Application) -> Rc { - let settings = gio::Settings::new(APP_ID); + let settings = gio::Settings::new("org.gnome.Podcasts"); let (sender, receiver) = unbounded(); let window = gtk::ApplicationWindow::new(application); window.set_title(&i18n("Podcasts")); + if APP_ID.ends_with("Devel") { + window.get_style_context().map(|c| c.add_class("devel")); + } let weak_s = settings.downgrade(); let weak_app = application.downgrade(); @@ -380,6 +384,7 @@ impl App { let application = gtk::Application::new(APP_ID, gio::ApplicationFlags::empty()) .expect("Application initialization failed..."); + application.set_resource_base_path("/org/gnome/Podcasts"); let weak_app = application.downgrade(); application.connect_startup(move |_| { diff --git a/podcasts-gtk/src/widgets/aboutdialog.rs b/podcasts-gtk/src/widgets/aboutdialog.rs index 40b8086..9c54bcd 100644 --- a/podcasts-gtk/src/widgets/aboutdialog.rs +++ b/podcasts-gtk/src/widgets/aboutdialog.rs @@ -1,4 +1,4 @@ -use app::APP_ID; +use app::{APP_ID, VERSION}; use gtk; use gtk::prelude::*; @@ -27,9 +27,7 @@ pub(crate) fn about_dialog(window: >k::ApplicationWindow) { dialog.set_copyright("© 2017, 2018 Jordan Petridis"); dialog.set_license_type(gtk::License::Gpl30); dialog.set_modal(true); - // TODO: make it show it fetches the commit hash from which it was built - // and the version number is kept in sync automatically - dialog.set_version("0.4.4"); + dialog.set_version(VERSION); dialog.set_program_name(&i18n("Podcasts")); dialog.set_website("https://wiki.gnome.org/Apps/Podcasts"); dialog.set_website_label(i18n("Learn more about GNOME Podcasts").as_str()); diff --git a/podcasts-gtk/src/widgets/empty.rs b/podcasts-gtk/src/widgets/empty.rs index 64ed885..58326a7 100644 --- a/podcasts-gtk/src/widgets/empty.rs +++ b/podcasts-gtk/src/widgets/empty.rs @@ -1,4 +1,5 @@ -use gtk; +use app::APP_ID; +use gtk::{self, prelude::*}; use std::ops::Deref; #[derive(Clone, Debug)] @@ -15,6 +16,8 @@ impl Default for EmptyView { fn default() -> Self { let builder = gtk::Builder::new_from_resource("/org/gnome/Podcasts/gtk/empty_view.ui"); let view: gtk::Box = builder.get_object("empty_view").unwrap(); + let image: gtk::Image = builder.get_object("image").unwrap(); + image.set_from_icon_name(format!("{}-symbolic", APP_ID).as_str(), 256); EmptyView(view) } } diff --git a/scripts/cargo.sh b/scripts/cargo.sh index 510fed3..14cebbc 100755 --- a/scripts/cargo.sh +++ b/scripts/cargo.sh @@ -2,9 +2,12 @@ export CARGO_HOME=$1/target/cargo-home export RUSTFLAGS="--cfg rayon_unstable" -export PODCASTS_LOCALEDIR="$3" +export LOCALEDIR="$3" +export APP_ID="$4" +export VERSION="$5" +export PROFILE="$6" -if [[ $DEBUG = true ]] +if [[ "$PROFILE" == "Devel" ]] then echo "DEBUG MODE" cargo build -p podcasts-gtk && cp $1/target/debug/podcasts-gtk $2