deja-dup-team team mailing list archive
-
deja-dup-team team
-
Mailing list archive
-
Message #00705
[Merge] lp:~kvdveer/deja-dup/fix-for-1155645 into lp:deja-dup
Cyril Feraudet has proposed merging lp:~kvdveer/deja-dup/fix-for-1155645 into lp:deja-dup.
Requested reviews:
Déjà Dup Developers (deja-dup-hackers)
Related bugs:
Bug #1155500 in Duplicity: "Support OpenstackSwift as a backend"
https://bugs.launchpad.net/duplicity/+bug/1155500
Bug #1155645 in Déjà Dup: "Openstack swift support"
https://bugs.launchpad.net/deja-dup/+bug/1155645
For more details, see:
https://code.launchpad.net/~kvdveer/deja-dup/fix-for-1155645/+merge/278597
--
Your team Déjà Dup Developers is requested to review the proposed merge of lp:~kvdveer/deja-dup/fix-for-1155645 into lp:deja-dup.
=== modified file 'AUTHORS'
--- AUTHORS 2014-10-25 13:52:17 +0000
+++ AUTHORS 2015-11-25 14:33:37 +0000
@@ -27,7 +27,15 @@
2011-2013 Canonical Ltd
License: GPL-3+
+<<<<<<< TREE
Files: deja-dup/preferences/PreferencesPanel.c
+=======
+Files: comon/Backendopenstack.c
+Copyright: 2013 Koert van der Veer <koert@xxxxxxxxxxxx>
+License: GPL-3+
+
+Files: preferences/PreferencesPanel.c
+>>>>>>> MERGE-SOURCE
Copyright: 2010 Intel, Inc
2011 Michael Terry <mike@xxxxxxxxxxx>
License: GPL-3+
=== modified file 'data/org.gnome.DejaDup.gschema.xml.in'
--- data/org.gnome.DejaDup.gschema.xml.in 2014-04-29 02:38:47 +0000
+++ data/org.gnome.DejaDup.gschema.xml.in 2015-11-25 14:33:37 +0000
@@ -67,6 +67,7 @@
<choice value='file'/>
<choice value='gdrive'/>
<choice value='rackspace'/>
+ <choice value='openstack'/>
<choice value='s3'/>
<choice value='u1'/>
</choices>
@@ -75,6 +76,7 @@
<_description>The type of backup location. If ‘auto’, a default will be chosen based on what is available.</_description>
</key>
<child name="rackspace" schema="org.gnome.DejaDup.Rackspace"/>
+ <child name="openstack" schema="org.gnome.DejaDup.Openstack"/>
<child name="s3" schema="org.gnome.DejaDup.S3"/>
<child name="gdrive" schema="org.gnome.DejaDup.GDrive"/>
<child name="file" schema="org.gnome.DejaDup.File"/>
@@ -120,6 +122,38 @@
<_description>This is your username for the Rackspace Cloud Files service.</_description>
</key>
</schema>
+<<<<<<< TREE
+=======
+ <schema id="org.gnome.DejaDup.Openstack" path="/org/gnome/deja-dup/openstack/">
+ <key name="container" type="s">
+ <default>'$HOSTNAME'</default>
+ <_summary>The Openstack Swift container</_summary>
+ <_description>Which Openstack Swift container to store files in. This does not need to exist already. Only legal hostname strings are valid.</_description>
+ </key>
+ <key name="username" type="s">
+ <default>''</default>
+ <_summary>Your Openstack username</_summary>
+ <_description>This is your username for the Openstack Swift service.</_description>
+ </key>
+ <key name="tenant" type="s">
+ <default>''</default>
+ <_summary>Your Openstack tenant</_summary>
+ <_description>This is your tenant for the Openstack Swift service.</_description>
+ </key>
+ <key name="authurl" type="s">
+ <default>''</default>
+ <_summary>Authentication URL</_summary>
+ <_description>This is the Authentication URL, or keystone URL for the Openstack service</_description>
+ </key>
+ </schema>
+ <schema id="org.gnome.DejaDup.U1" path="/org/gnome/deja-dup/u1/">
+ <key name="folder" type="s">
+ <default>'/deja-dup/$HOSTNAME'</default>
+ <_summary>The Ubuntu One folder</_summary>
+ <_description>The folder name to store files in. If ‘$HOSTNAME’, it will default to a folder based on the name of the computer.</_description>
+ </key>
+ </schema>
+>>>>>>> MERGE-SOURCE
<schema id="org.gnome.DejaDup.File" path="/org/gnome/deja-dup/file/">
<key name="path" type="s">
<default>''</default>
=== modified file 'deja-dup/widgets/ConfigLabelLocation.vala'
--- deja-dup/widgets/ConfigLabelLocation.vala 2014-04-29 02:38:47 +0000
+++ deja-dup/widgets/ConfigLabelLocation.vala 2015-11-25 14:33:37 +0000
@@ -28,12 +28,13 @@
FilteredSettings gdrive_root;
FilteredSettings s3_root;
FilteredSettings rackspace_root;
+ FilteredSettings openstack_root;
public ConfigLabelLocation()
{
base(null);
}
-
+
construct {
img = new Gtk.Image.from_icon_name("folder", Gtk.IconSize.MENU);
fill_box();
@@ -42,6 +43,7 @@
watch_key(null, (gdrive_root = DejaDup.get_settings(GDRIVE_ROOT)));
watch_key(null, (s3_root = DejaDup.get_settings(S3_ROOT)));
watch_key(null, (rackspace_root = DejaDup.get_settings(RACKSPACE_ROOT)));
+ watch_key(null, (openstack_root = DejaDup.get_settings(OPENSTACK_ROOT)));
set_from_config.begin();
}
=== modified file 'deja-dup/widgets/ConfigLocation.vala'
--- deja-dup/widgets/ConfigLocation.vala 2014-04-29 02:38:47 +0000
+++ deja-dup/widgets/ConfigLocation.vala 2015-11-25 14:33:37 +0000
@@ -63,6 +63,7 @@
int index_s3 = -2;
int index_gdrive = -2;
int index_rackspace = -2;
+ int index_openstack = -2;
int index_u1 = -2;
int index_cloud_sep = -2;
int index_ssh;
@@ -114,6 +115,7 @@
insert_s3();
insert_gdrive();
insert_rackspace();
+ insert_openstack();
// Now insert remote servers
index_ssh = add_entry(new ThemedIcon.with_default_fallbacks("folder-remote"),
@@ -208,7 +210,19 @@
ref index_rackspace, insert_rackspace);
}
+<<<<<<< TREE
void insert_cloud_if_available(string id, Checker? checker,
+=======
+ void insert_openstack() {
+ insert_cloud_if_available("openstack", BackendOpenstack.get_checker(),
+ new ThemedIcon("deja-dup-cloud"),
+ _("Openstack Swift"),
+ new ConfigLocationOpenstack(label_sizes),
+ ref index_openstack, insert_openstack);
+ }
+
+ void insert_cloud_if_available(string id, Checker checker,
+>>>>>>> MERGE-SOURCE
Icon icon, string name,
Gtk.Widget? w, ref int index,
CloudCallback cb)
@@ -428,6 +442,8 @@
index = index_gdrive;
else if (backend == "rackspace")
index = index_rackspace;
+ else if (backend == "openstack")
+ index = index_openstack;
else if (backend == "u1")
index = index_u1;
else if (backend == "file") {
@@ -520,6 +536,8 @@
settings.set_string(BACKEND_KEY, "gdrive");
else if (index == index_rackspace)
settings.set_string(BACKEND_KEY, "rackspace");
+ else if (index == index_openstack)
+ settings.set_string(BACKEND_KEY, "openstack");
else if (index == index_u1)
settings.set_string(BACKEND_KEY, "u1");
else if (index == index_ssh)
=== added file 'deja-dup/widgets/ConfigLocationOpenstack.vala'
--- deja-dup/widgets/ConfigLocationOpenstack.vala 1970-01-01 00:00:00 +0000
+++ deja-dup/widgets/ConfigLocationOpenstack.vala 2015-11-25 14:33:37 +0000
@@ -0,0 +1,43 @@
+/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 2 -*- */
+/*
+ This file is part of Déjà Dup.
+ For copyright information, see AUTHORS.
+
+ Déjà Dup is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Déjà Dup is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+using GLib;
+
+namespace DejaDup {
+
+public class ConfigLocationOpenstack : ConfigLocationTable
+{
+ public ConfigLocationOpenstack(Gtk.SizeGroup sg) {
+ Object(label_sizes: sg);
+ }
+
+ construct {
+ add_widget(_("_Username"),
+ new ConfigEntry(DejaDup.OPENSTACK_USERNAME_KEY, DejaDup.OPENSTACK_ROOT));
+ add_widget(_("_Container"),
+ new ConfigFolder(DejaDup.OPENSTACK_CONTAINER_KEY, DejaDup.OPENSTACK_ROOT));
+ add_widget(_("_Authentication URL"),
+ new ConfigFolder(DejaDup.OPENSTACK_AUTHURL_KEY, DejaDup.OPENSTACK_ROOT));
+ add_widget(_("_Tenant name"),
+ new ConfigFolder(DejaDup.OPENSTACK_TENANT_KEY, DejaDup.OPENSTACK_ROOT));
+ }
+}
+
+}
+
=== added file 'deja-dup/widgets/Makefile.am.OTHER'
--- deja-dup/widgets/Makefile.am.OTHER 1970-01-01 00:00:00 +0000
+++ deja-dup/widgets/Makefile.am.OTHER 2015-11-25 14:33:37 +0000
@@ -0,0 +1,98 @@
+# -*- Mode: Makefile; indent-tabs-mode: t; tab-width: 2 -*-
+#
+# This file is part of Déjà Dup.
+# For copyright information, see AUTHORS.
+#
+# Déjà Dup is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Déjà Dup is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
+
+pkglib_LTLIBRARIES = libwidgets.la
+
+libwidgets_la_CFLAGS = \
+ -I$(top_srcdir)/common \
+ $(WIDGETS_CFLAGS) \
+ $(UNITY_CFLAGS) \
+ -w \
+ -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\"
+
+libwidgets_la_LDFLAGS = -avoid-version
+
+libwidgets_la_LIBADD = \
+ $(WIDGETS_LIBS) \
+ $(UNITY_LIBS) \
+ @INTLLIBS@ \
+ $(top_builddir)/common/libcommon.la
+
+libwidgets_la_VALASOURCES = \
+ ConfigBool.vala \
+ ConfigChoice.vala \
+ ConfigDelete.vala \
+ ConfigEntry.vala \
+ ConfigFolder.vala \
+ ConfigLabel.vala \
+ ConfigLabelBackupDate.vala \
+ ConfigLabelBool.vala \
+ ConfigLabelList.vala \
+ ConfigLabelLocation.vala \
+ ConfigLabelPolicy.vala \
+ ConfigList.vala \
+ ConfigLocation.vala \
+ ConfigLocationCustom.vala \
+ ConfigLocationDAV.vala \
+ ConfigLocationFile.vala \
+ ConfigLocationFTP.vala \
+ ConfigLocationRackspace.vala \
+ ConfigLocationOpenstack.vala \
+ ConfigLocationS3.vala \
+ ConfigLocationSSH.vala \
+ ConfigLocationSMB.vala \
+ ConfigLocationTable.vala \
+ ConfigLocationU1.vala \
+ ConfigLocationVolume.vala \
+ ConfigNumber.vala \
+ ConfigPeriod.vala \
+ ConfigRelPath.vala \
+ ConfigSwitch.vala \
+ ConfigURLPart.vala \
+ ConfigURLPartBool.vala \
+ ConfigWidget.vala \
+ ToggleGroup.vala \
+ WidgetUtils.vala
+
+libwidgets_la_SOURCES = \
+ $(libwidgets_la_VALASOURCES)
+
+AM_VALAFLAGS = \
+ --library=libwidgets \
+ -H widgets.h \
+ --vapidir=$(top_srcdir)/common \
+ --vapidir=$(top_srcdir)/vapi \
+ $(SHARED_VALAFLAGS) \
+ $(UNITY_VALAFLAGS) \
+ --pkg libcommon \
+ --pkg @GTK_MODULE@ \
+ --pkg uriutils \
+ --pkg libnotify \
+ --pkg config
+
+libwidgets_la_vala.stamp: $(top_srcdir)/config.h
+
+dist-hook:
+ cd $(distdir) && rm -f $(libwidgets_la_VALASOURCES:.vala=.c) \
+ widgets.h libwidgets_la_vala.stamp
+ rm -f libwidgets_la_vala.stamp # Start distcheck workarounds
+$(srcdir)/libwidgets_la_vala.stamp: chmod-srcdir
+chmod-srcdir:
+ @chmod u+w $(srcdir) # End distcheck workarounds
+
+CLEANFILES = libwidgets_la_vala.stamp
=== modified file 'libdeja/Backend.vala'
--- libdeja/Backend.vala 2014-04-29 02:38:47 +0000
+++ libdeja/Backend.vala 2015-11-25 14:33:37 +0000
@@ -43,13 +43,13 @@
public static uint64 INFINITE_SPACE = uint64.MAX;
public virtual async uint64 get_space(bool free = true) {return INFINITE_SPACE;}
public virtual bool space_can_be_infinite() {return true;}
-
+
// Arguments needed only when the particular mode is active
// If mode == INVALID, arguments needed any time the backup is referenced.
public virtual void add_argv(ToolJob.Mode mode, ref List<string> argv) {}
-
+
public abstract Backend clone();
-
+
public static string get_default_type()
{
var settings = get_settings();
@@ -59,6 +59,7 @@
backend != "s3" &&
backend != "gdrive" &&
backend != "rackspace" &&
+ backend != "openstack" &&
backend != "u1" &&
backend != "file")
backend = "auto"; // default to auto if string is not known
@@ -77,6 +78,8 @@
return new BackendU1();
else if (backend_name == "rackspace")
return new BackendRackspace();
+ else if (backend_name == "openstack")
+ return new BackendOpenstack();
else if (backend_name == "file")
return new BackendFile();
else
=== added file 'libdeja/BackendOpenstack.vala'
--- libdeja/BackendOpenstack.vala 1970-01-01 00:00:00 +0000
+++ libdeja/BackendOpenstack.vala 2015-11-25 14:33:37 +0000
@@ -0,0 +1,181 @@
+/* -*- Mode: Vala; indent-tabs-mode: nil; tab-width: 2 -*- */
+/*
+ This file is part of Déjà Dup.
+ For copyright information, see AUTHORS.
+
+ Déjà Dup is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ Déjà Dup is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+using GLib;
+
+namespace DejaDup {
+
+public const string OPENSTACK_ROOT = "Openstack";
+public const string OPENSTACK_USERNAME_KEY = "username";
+public const string OPENSTACK_CONTAINER_KEY = "container";
+public const string OPENSTACK_TENANT_KEY = "tenant";
+public const string OPENSTACK_AUTHURL_KEY = "authurl";
+
+public class BackendOpenstack : Backend
+{
+ public static Checker get_checker() {
+ return PythonChecker.get_checker("swiftclient");
+ }
+
+ public override Backend clone() {
+ return new BackendOpenstack();
+ }
+
+ public override bool is_native() {
+ return false;
+ }
+
+ public override Icon? get_icon() {
+ return new ThemedIcon("deja-dup-cloud");
+ }
+
+ public override async bool is_ready(out string when) {
+ var settings = get_settings(OPENSTACK_ROOT);
+ var authurl = get_folder_key(settings, OPENSTACK_AUTHURL_KEY);
+ when = _("Backup will begin when a network connection becomes available.");
+ return yield Network.get().can_reach (authurl);
+ }
+
+ public override string get_location(ref bool as_root)
+ {
+ var settings = get_settings(OPENSTACK_ROOT);
+ var container = get_folder_key(settings, OPENSTACK_CONTAINER_KEY);
+ if (container == "") {
+ container = Environment.get_host_name();
+ settings.set_string(OPENSTACK_CONTAINER_KEY, container);
+ }
+ return "swift://%s".printf(container);
+ }
+
+ public override string get_location_pretty()
+ {
+ var settings = get_settings(OPENSTACK_ROOT);
+ var container = settings.get_string(OPENSTACK_CONTAINER_KEY);
+ if (container == "")
+ return _("Openstack Swift");
+ else
+ // Translators: %s is a folder.
+ return _("%s on Openstack Swift").printf(container);
+ }
+
+ string settings_id;
+ string id;
+ string secret_key;
+ public override async void get_envp() throws Error
+ {
+ var settings = get_settings(OPENSTACK_ROOT);
+ settings_id = settings.get_string(OPENSTACK_USERNAME_KEY);
+ id = settings_id == null ? "" : settings_id;
+
+ var authurl = settings.get_string(OPENSTACK_AUTHURL_KEY);
+
+ if (id != "" && secret_key != null) {
+ // We've already been run before and got the key
+ got_secret_key();
+ return;
+ }
+
+ if (id != "") {
+ // First, try user's keyring
+ try {
+ secret_key = yield Secret.password_lookup(Secret.SCHEMA_COMPAT_NETWORK,
+ null,
+ "user", id,
+ "server", authurl,
+ "protocol", "https");
+ if (secret_key != null) {
+ got_secret_key();
+ return;
+ }
+ }
+ catch (Error e) {
+ // fall through to ask_password below
+ }
+ }
+
+ // Didn't find it, so ask user
+ ask_password();
+ }
+
+ async void got_password_reply(MountOperation mount_op, MountOperationResult result)
+ {
+ if (result != MountOperationResult.HANDLED) {
+ envp_ready(false, new List<string>(), _("Permission denied"));
+ return;
+ }
+
+ id = mount_op.username;
+ secret_key = mount_op.password;
+
+ // Save it
+ var remember = mount_op.password_save;
+ if (remember != PasswordSave.NEVER) {
+ string where = (remember == PasswordSave.FOR_SESSION) ?
+ Secret.COLLECTION_SESSION : Secret.COLLECTION_DEFAULT;
+
+ var settings = get_settings(OPENSTACK_ROOT);
+ var authurl = get_folder_key(settings, OPENSTACK_AUTHURL_KEY);
+ var tenant = get_folder_key(settings, OPENSTACK_TENANT_KEY);
+
+ try {
+ yield Secret.password_store(Secret.SCHEMA_COMPAT_NETWORK,
+ where,
+ "%s:%s@%s".printf(tenant, id, authurl),
+ secret_key,
+ null,
+ "user", id,
+ "server", authurl,
+ "protocol", "https");
+ }
+ catch (Error e) {
+ warning("%s\n", e.message);
+ }
+ }
+
+ got_secret_key();
+ }
+
+ void ask_password() {
+ mount_op.reply.connect(got_password_reply);
+ mount_op.ask_password("", id, "",
+ AskPasswordFlags.NEED_PASSWORD |
+ AskPasswordFlags.NEED_USERNAME |
+ AskPasswordFlags.SAVING_SUPPORTED);
+ }
+
+ void got_secret_key() {
+ var settings = get_settings(OPENSTACK_ROOT);
+
+ if (id != settings_id)
+ settings.set_string(OPENSTACK_USERNAME_KEY, id);
+
+ var tenantName = settings.set_string(OPENSTACK_TENANT_KEY, id);
+ var authurl = settings.set_string(OPENSTACK_TENANT_KEY, id);
+
+ List<string> envp = new List<string>();
+ envp.append("SWIFT_TENANTNAME=%s".printf(tenantName));
+ envp.append("SWIFT_AUTHURL=%s".printf(authurl));
+ envp.append("SWIFT_USERNAME=%s".printf(id));
+ envp.append("SWIFT_PASSWORD=%s".printf(secret_key));
+ envp_ready(true, envp);
+ }
+}
+
+} // end namespace
+
=== added file 'libdeja/Makefile.am.OTHER'
--- libdeja/Makefile.am.OTHER 1970-01-01 00:00:00 +0000
+++ libdeja/Makefile.am.OTHER 2015-11-25 14:33:37 +0000
@@ -0,0 +1,92 @@
+# -*- Mode: Makefile; indent-tabs-mode: t; tab-width: 2 -*-
+#
+# This file is part of Déjà Dup.
+# For copyright information, see AUTHORS.
+#
+# Déjà Dup is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# Déjà Dup is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Déjà Dup. If not, see <http://www.gnu.org/licenses/>.
+
+pkglib_LTLIBRARIES = libcommon.la
+
+libcommon_la_CFLAGS = \
+ $(COMMON_CFLAGS) \
+ -w \
+ -DPKG_LIBEXEC_DIR=\"$(pkglibexecdir)\" \
+ -DGETTEXT_PACKAGE=\"$(GETTEXT_PACKAGE)\"
+
+libcommon_la_LDFLAGS = -avoid-version
+
+libcommon_la_LIBADD = \
+ $(COMMON_LIBS) \
+ @INTLLIBS@
+
+noinst_HEADERS = \
+ uriutils.h
+
+libcommon_la_VALASOURCES = \
+ AsyncCommand.vala \
+ Backend.vala \
+ BackendAuto.vala \
+ BackendFile.vala \
+ BackendRackspace.vala \
+ BackendOpenstack.vala \
+ BackendS3.vala \
+ BackendU1.vala \
+ Checker.vala \
+ CommonUtils.vala \
+ DirHandling.vala \
+ FilteredSettings.vala \
+ Network.vala \
+ Operation.vala \
+ OperationBackup.vala \
+ OperationFiles.vala \
+ OperationRestore.vala \
+ OperationStatus.vala \
+ OperationVerify.vala \
+ PythonChecker.vala \
+ RecursiveDelete.vala \
+ RecursiveMove.vala \
+ RecursiveOp.vala \
+ ToolPlugin.vala
+
+libcommon_la_SOURCES = \
+ uriutils.c \
+ $(libcommon_la_VALASOURCES)
+
+AM_VALAFLAGS = \
+ --library=libcommon \
+ -H common.h \
+ --vapidir=$(top_srcdir)/vapi \
+ $(SHARED_VALAFLAGS) \
+ --pkg gio-2.0 \
+ --pkg gio-unix-2.0 \
+ --pkg libsecret-1 \
+ --pkg secret \
+ --pkg libpeas-1.0 \
+ --pkg uriutils \
+ --pkg posix \
+ --pkg config
+
+libcommon_la_vala.stamp: $(top_srcdir)/config.h
+
+dist-hook:
+ cd $(distdir) && rm -f $(libcommon_la_VALASOURCES:.vala=.c) \
+ common.h libcommon_la_vala.stamp
+ rm -f libcommon_la_vala.stamp # Start distcheck workarounds
+$(srcdir)/libcommon_la_vala.stamp: chmod-srcdir
+chmod-srcdir:
+ @chmod u+w $(srcdir) # End distcheck workarounds
+
+CLEANFILES = libcommon_la_vala.stamp
+
+EXTRA_DIST = libcommon.deps
Follow ups