click-0.4.21.1ubuntu0.2/ 0000775 0000000 0000000 00000000000 12320742335 011376 5 ustar click-0.4.21.1ubuntu0.2/pk-plugin/ 0000775 0000000 0000000 00000000000 12320742335 013304 5 ustar click-0.4.21.1ubuntu0.2/pk-plugin/com.ubuntu.click.policy.in 0000664 0000000 0000000 00000002152 12320742124 020311 0 ustar
Click
https://launchpad.net/click
package-x-generic
<_description gettext-domain="click">Install package
<_message gettext-domain="click">To install software, you need to authenticate.
auth_self
auth_self
yes
<_description gettext-domain="click">Remove package
<_message gettext-domain="click">To remove software, you need to authenticate.
auth_self
auth_self
yes
click-0.4.21.1ubuntu0.2/pk-plugin/README 0000664 0000000 0000000 00000001717 12320742124 014166 0 ustar This plugin is experimental, although it does minimally work. To make it
usable on Ubuntu Touch when connected remotely (adb/ssh) you may need to
override PolicyKit's defaults:
$ sudo cat /etc/polkit-1/localauthority/50-local.d/10-click.pkla
[Allow installation of Click packages]
Identity=unix-user:phablet
Action=com.ubuntu.click.package-install;com.ubuntu.click.package-remove
ResultAny=yes
(This is now installed in
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.click.pkla, for the
time being.)
Once that's done, install packagekit and packagekit-plugin-click, and you
should be able to do things like:
$ pkcon -p install-local foo.click
I have not done any work on figuring out how to make this work on systems
with aptdaemon. If you want to try this on a normal Ubuntu desktop system,
then for the time being I recommend creating an LXC container for the
purpose:
$ sudo lxc-create -t ubuntu -n saucy-click -- -r saucy -a amd64 -b $USER
click-0.4.21.1ubuntu0.2/pk-plugin/Makefile.am 0000664 0000000 0000000 00000001352 12320742124 015335 0 ustar plugindir = @pkpluginlibdir@/packagekit-plugins
plugin_LTLIBRARIES = libpk_plugin_click.la
libpk_plugin_click_la_SOURCES = pk-plugin-click.c
libpk_plugin_click_la_CPPFLAGS = -I$(top_builddir)/lib/click
libpk_plugin_click_la_CFLAGS = @PKPLUGIN_CFLAGS@
libpk_plugin_click_la_LIBADD = \
$(top_builddir)/lib/click/libclick-0.4.la \
@PKPLUGIN_LIBS@
libpk_plugin_click_la_LDFLAGS = -avoid-version
polkit_policydir = $(datadir)/polkit-1/actions
dist_polkit_policy_DATA = com.ubuntu.click.policy
@INTLTOOL_POLICY_RULE@
EXTRA_DIST = com.ubuntu.click.policy.in
DISTCLEANFILES = com.ubuntu.click.policy
polkit_localauthoritydir = $(localstatedir)/lib/polkit-1/localauthority/10-vendor.d
dist_polkit_localauthority_DATA = com.ubuntu.click.pkla
click-0.4.21.1ubuntu0.2/pk-plugin/pk-plugin-click.c 0000664 0000000 0000000 00000057541 12320742124 016451 0 ustar /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2010-2013 Matthias Klumpp
* Copyright (C) 2011 Richard Hughes
* Copyright (C) 2013 Canonical Ltd.
*
* This program 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; version 3 of the License.
*
* This program 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 this program. If not, see .
*/
#define _GNU_SOURCE
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define I_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE
#include
#define I_KNOW_THE_PACKAGEKIT_PLUGIN_API_IS_SUBJECT_TO_CHANGE
#include
#include "click.h"
struct PkPluginPrivate {
guint dummy;
};
#define DEFAULT_PATH \
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
/**
* click_is_click_file:
*
* Check if a given file is a Click package file.
*/
static gboolean
click_is_click_file (const gchar *filename)
{
gboolean ret = FALSE;
GFile *file;
GFileInfo *info = NULL;
const gchar *content_type;
file = g_file_new_for_path (filename);
info = g_file_query_info (file, G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
G_FILE_QUERY_INFO_NONE, NULL, NULL);
if (!info)
goto out;
content_type = g_file_info_get_content_type (info);
if (strcmp (content_type, "application/x-click") == 0)
ret = TRUE;
out:
g_clear_object (&info);
g_clear_object (&file);
return ret;
}
static gchar **
click_filter_click_files (PkTransaction *transaction, gchar **files)
{
gchar **native_files = NULL;
gchar **click_files = NULL;
GPtrArray *native = NULL;
GPtrArray *click = NULL;
gint i;
gboolean ret = FALSE;
/* Are there any Click packages at all? If not, we can bail out
* early.
*/
for (i = 0; files[i]; ++i) {
ret = click_is_click_file (files[i]);
if (ret)
break;
}
if (!ret)
goto out;
/* Find and filter Click packages. */
native = g_ptr_array_new_with_free_func (g_free);
click = g_ptr_array_new_with_free_func (g_free);
for (i = 0; files[i]; ++i) {
ret = click_is_click_file (files[i]);
g_ptr_array_add (ret ? click : native, g_strdup (files[i]));
}
native_files = pk_ptr_array_to_strv (native);
click_files = pk_ptr_array_to_strv (click);
pk_transaction_set_full_paths (transaction, native_files);
out:
g_strfreev (native_files);
if (native)
g_ptr_array_unref (native);
if (click)
g_ptr_array_unref (click);
return click_files;
}
static gboolean
click_pkid_data_is_click (const gchar *data)
{
gchar **tokens;
gboolean ret;
tokens = g_strsplit (data, ",", 2);
ret = g_strcmp0 (tokens[0], "local:click") == 0 ||
g_strcmp0 (tokens[0], "installed:click") == 0;
g_strfreev (tokens);
return ret;
}
/**
* click_is_click_package:
*
* Check if a given PackageKit package-id is a Click package.
*/
static gboolean
click_is_click_package (const gchar *package_id)
{
gchar **parts = NULL;
gboolean ret = FALSE;
parts = pk_package_id_split (package_id);
if (!parts)
goto out;
ret = click_pkid_data_is_click (parts[PK_PACKAGE_ID_DATA]);
out:
g_strfreev (parts);
return ret;
}
static gchar **
click_filter_click_packages (PkTransaction *transaction, gchar **package_ids)
{
gchar **native_package_ids = NULL;
gchar **click_package_ids = NULL;
GPtrArray *native = NULL;
GPtrArray *click = NULL;
gint i;
gboolean ret = FALSE;
/* Are there any Click packages at all? If not, we can bail out
* early.
*/
for (i = 0; package_ids[i]; ++i) {
ret = click_is_click_package (package_ids[i]);
if (ret)
break;
}
if (!ret)
goto out;
/* Find and filter Click packages. */
native = g_ptr_array_new_with_free_func (g_free);
click = g_ptr_array_new_with_free_func (g_free);
for (i = 0; package_ids[i]; ++i) {
ret = click_is_click_package (package_ids[i]);
g_ptr_array_add (ret ? click : native,
g_strdup (package_ids[i]));
}
native_package_ids = pk_ptr_array_to_strv (native);
click_package_ids = pk_ptr_array_to_strv (click);
pk_transaction_set_package_ids (transaction, native_package_ids);
out:
g_strfreev (native_package_ids);
if (native)
g_ptr_array_unref (native);
if (click)
g_ptr_array_unref (click);
return click_package_ids;
}
/**
* click_get_username_for_uid:
*
* Return the username corresponding to a given user ID, or NULL. The
* caller is responsible for freeing the result.
*/
static gchar *
click_get_username_for_uid (uid_t uid)
{
struct passwd pwbuf, *pwbufp;
char *buf = NULL;
size_t buflen;
gchar *username = NULL;
buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
if (buflen == -1)
buflen = 1024;
buf = g_malloc (buflen);
for (;;) {
int ret;
/* TODO: getpwuid_r is apparently a portability headache;
* see glib/gio/glocalfileinfo.c. But for now we only care
* about Linux.
*/
ret = getpwuid_r (uid, &pwbuf, buf, buflen, &pwbufp);
if (pwbufp)
break;
if (ret != ERANGE)
goto out;
buflen *= 2; /* TODO: check overflow */
buf = g_realloc (buf, buflen);
}
username = g_strdup (pwbuf.pw_name);
out:
g_free (buf);
return username;
}
/**
* click_get_envp:
*
* Return the environment needed by click. This is the same as the
* environment we got, except with a reasonable PATH (PackageKit clears its
* environment by default).
*/
static gchar **
click_get_envp (void)
{
gchar **environ;
gchar **env_item;
guint env_len;
environ = g_get_environ ();
env_len = 0;
for (env_item = environ; env_item && *env_item; ++env_item) {
if (strncmp (*env_item, "PATH=", sizeof ("PATH=") - 1) == 0)
return environ;
++env_len;
}
env_len = environ ? g_strv_length (environ) : 0;
environ = g_realloc_n (environ, env_len + 2, sizeof (*environ));
environ[env_len] = g_strdup ("PATH=" DEFAULT_PATH);
environ[env_len + 1] = NULL;
return environ;
}
static void
click_pk_error (PkPlugin *plugin, PkErrorEnum code,
const char *summary, const char *extra)
{
if (pk_backend_job_get_is_error_set (plugin->job)) {
/* PK already has an error; just log this. */
g_warning ("%s", summary);
if (extra)
g_warning ("%s", extra);
} else if (extra)
pk_backend_job_error_code
(plugin->job, code, "%s\n%s", summary, extra);
else
pk_backend_job_error_code (plugin->job, code, "%s", summary);
}
static JsonParser *
click_get_manifest (PkPlugin *plugin, const gchar *filename)
{
gboolean ret;
gchar **argv = NULL;
gint i;
gchar **envp = NULL;
gchar *manifest_text = NULL;
gchar *click_stderr = NULL;
gint click_status;
JsonParser *parser = NULL;
argv = g_malloc0_n (4, sizeof (*argv));
i = 0;
argv[i++] = g_strdup ("click");
argv[i++] = g_strdup ("info");
argv[i++] = g_strdup (filename);
envp = click_get_envp ();
ret = g_spawn_sync (NULL, argv, envp, G_SPAWN_SEARCH_PATH,
NULL, NULL, &manifest_text, &click_stderr,
&click_status, NULL);
if (!ret)
goto out;
if (!g_spawn_check_exit_status (click_status, NULL)) {
gchar *summary = g_strdup_printf
("\"click info %s\" failed.", filename);
click_pk_error (plugin, PK_ERROR_ENUM_INTERNAL_ERROR,
summary, click_stderr);
g_free (summary);
goto out;
}
parser = json_parser_new ();
if (!parser)
goto out;
json_parser_load_from_data (parser, manifest_text, -1, NULL);
out:
g_strfreev (argv);
g_strfreev (envp);
g_free (manifest_text);
g_free (click_stderr);
return parser;
}
static gchar *
click_get_field_string (JsonObject *manifest, const gchar *field)
{
JsonNode *node;
node = json_object_get_member (manifest, field);
if (!node)
return NULL;
return json_node_dup_string (node);
}
static JsonObject *
click_get_field_object (JsonObject *manifest, const gchar *field)
{
JsonNode *node;
node = json_object_get_member (manifest, field);
if (!node)
return NULL;
/* Note that this does not take a reference. */
return json_node_get_object (node);
}
static gboolean
click_get_field_boolean (JsonObject *manifest, const gchar *field,
gboolean def)
{
JsonNode *node;
node = json_object_get_member (manifest, field);
if (!node)
return def;
return json_node_get_boolean (node);
}
static JsonArray *
click_get_list (PkPlugin *plugin, PkTransaction *transaction)
{
gchar *username = NULL;
ClickUser *registry = NULL;
JsonArray *array = NULL;
GError *error = NULL;
username = click_get_username_for_uid
(pk_transaction_get_uid (transaction));
registry = click_user_new_for_user (NULL, username, &error);
if (error) {
click_pk_error (plugin, PK_ERROR_ENUM_INTERNAL_ERROR,
"Unable to read Click database.",
error->message);
goto out;
}
array = click_user_get_manifests (registry, &error);
if (error) {
click_pk_error (plugin, PK_ERROR_ENUM_INTERNAL_ERROR,
"Unable to get Click package manifests.",
error->message);
goto out;
}
out:
if (error)
g_error_free (error);
g_clear_object (®istry);
g_free (username);
return array;
}
static gchar *
click_build_pkid_data (const gchar *data_prefix, JsonObject *manifest)
{
gint n_elements = 0;
gchar **elements = NULL;
gint i;
JsonObject *hooks;
GList *hooks_members = NULL, *hooks_iter;
gchar *data = NULL;
hooks = click_get_field_object (manifest, "hooks");
n_elements = 3; /* data_prefix, removable, terminator */
if (hooks)
n_elements += json_object_get_size (hooks);
elements = g_new0 (gchar *, n_elements);
if (!elements)
goto out;
i = 0;
elements[i++] = g_strdup (data_prefix);
/* A missing "_removable" entry in the manifest means that we just
* installed the package, so it must be removable.
*/
if (click_get_field_boolean (manifest, "_removable", TRUE))
elements[i++] = g_strdup ("removable=1");
else
elements[i++] = g_strdup ("removable=0");
if (hooks) {
hooks_members = json_object_get_members (hooks);
for (hooks_iter = hooks_members; hooks_iter;
hooks_iter = hooks_iter->next) {
g_assert (i < n_elements - 1);
elements[i++] = g_strdup_printf
("app_name=%s", (gchar *) hooks_iter->data);
}
}
elements[i] = NULL;
data = g_strjoinv (",", elements);
out:
g_strfreev (elements);
if (hooks_members)
g_list_free (hooks_members);
return data;
}
static gchar *
click_build_pkid (PkPlugin *plugin, JsonObject *manifest,
const gchar *data_prefix)
{
gchar *name = NULL;
gchar *version = NULL;
gchar *architecture = NULL;
gchar *data = NULL;
gchar *pkid = NULL;
if (!manifest)
goto out;
name = click_get_field_string (manifest, "name");
if (!name)
goto out;
version = click_get_field_string (manifest, "version");
if (!version)
goto out;
architecture = click_get_field_string (manifest, "architecture");
if (!architecture)
architecture = g_strdup ("");
data = click_build_pkid_data (data_prefix, manifest);
pkid = pk_package_id_build (name, version, architecture, data);
out:
g_free (name);
g_free (version);
g_free (architecture);
g_free (data);
return pkid;
}
static gboolean
click_split_pkid (const gchar *package_id, gchar **name, gchar **version,
gchar **architecture)
{
gchar **parts = NULL;
gboolean ret = FALSE;
parts = pk_package_id_split (package_id);
if (!parts)
goto out;
if (!click_pkid_data_is_click (parts[PK_PACKAGE_ID_DATA]))
goto out;
if (name)
*name = g_strdup (parts[PK_PACKAGE_ID_NAME]);
if (version)
*version = g_strdup (parts[PK_PACKAGE_ID_VERSION]);
if (architecture)
*architecture = g_strdup (parts[PK_PACKAGE_ID_ARCH]);
ret = TRUE;
out:
g_strfreev (parts);
return ret;
}
static gboolean
click_install_file (PkPlugin *plugin, PkTransaction *transaction,
const gchar *filename)
{
gboolean ret = FALSE;
gchar **argv = NULL;
gint i;
gchar *username = NULL;
gchar **envp = NULL;
gchar *click_stderr = NULL;
gint click_status;
JsonParser *parser = NULL;
JsonObject *manifest;
gchar *pkid = NULL;
argv = g_malloc0_n (6, sizeof (*argv));
i = 0;
argv[i++] = g_strdup ("click");
argv[i++] = g_strdup ("install");
username = click_get_username_for_uid
(pk_transaction_get_uid (transaction));
if (username)
argv[i++] = g_strdup_printf ("--user=%s", username);
/* TODO: make --force-missing-framework configurable */
argv[i++] = g_strdup (filename);
envp = click_get_envp ();
ret = g_spawn_sync (NULL, argv, envp,
G_SPAWN_SEARCH_PATH | G_SPAWN_STDOUT_TO_DEV_NULL,
NULL, NULL, NULL, &click_stderr, &click_status,
NULL);
if (!ret)
goto out;
if (!g_spawn_check_exit_status (click_status, NULL)) {
gchar *summary = g_strdup_printf ("%s failed to install.",
filename);
click_pk_error (plugin,
PK_ERROR_ENUM_PACKAGE_FAILED_TO_INSTALL,
summary, click_stderr);
g_free (summary);
ret = FALSE;
goto out;
}
parser = click_get_manifest (plugin, filename);
if (parser) {
manifest = json_node_get_object
(json_parser_get_root (parser));
pkid = click_build_pkid (plugin, manifest, "installed:click");
}
if (!pk_backend_job_get_is_error_set (plugin->job)) {
pk_backend_job_package (plugin->job, PK_INFO_ENUM_INSTALLED,
pkid, "summary goes here");
ret = TRUE;
}
out:
g_strfreev (argv);
g_free (username);
g_strfreev (envp);
g_free (click_stderr);
g_clear_object (&parser);
g_free (pkid);
return ret;
}
static void
click_install_files (PkPlugin *plugin, PkTransaction *transaction,
gchar **filenames)
{
gboolean ret = FALSE;
gint i;
for (i = 0; filenames[i]; ++i) {
g_debug ("Click: installing %s", filenames[i]);
ret = click_install_file (plugin, transaction, filenames[i]);
if (!ret)
break;
}
}
static void
click_get_packages_one (JsonArray *array, guint index, JsonNode *element_node,
gpointer data)
{
PkPlugin *plugin;
JsonObject *manifest;
const gchar *title = NULL;
gchar *pkid = NULL;
plugin = (PkPlugin *) data;
manifest = json_node_get_object (element_node);
if (!manifest)
return;
if (json_object_has_member (manifest, "title"))
title = json_object_get_string_member (manifest, "title");
if (!title)
title = "";
pkid = click_build_pkid (plugin, manifest, "installed:click");
if (pkid)
pk_backend_job_package (plugin->job, PK_INFO_ENUM_INSTALLED,
pkid, title);
g_free (pkid);
}
static void
click_get_packages (PkPlugin *plugin, PkTransaction *transaction)
{
JsonArray *array = NULL;
array = click_get_list (plugin, transaction);
if (!array)
return;
json_array_foreach_element (array, click_get_packages_one, plugin);
json_array_unref (array);
}
static gboolean
click_remove_package (PkPlugin *plugin, PkTransaction *transaction,
const gchar *package_id)
{
gboolean ret = FALSE;
gchar *username = NULL;
gchar *name = NULL;
gchar *version = NULL;
ClickDB *db = NULL;
ClickUser *registry = NULL;
gchar *old_version = NULL;
GError *error = NULL;
gchar *summary = NULL;
username = click_get_username_for_uid
(pk_transaction_get_uid (transaction));
if (!username) {
g_error ("Click: cannot remove packages without a username");
goto out;
}
if (!click_split_pkid (package_id, &name, &version, NULL)) {
g_error ("Click: cannot parse package ID '%s'", package_id);
goto out;
}
db = click_db_new ();
click_db_read (db, NULL, &error);
if (error) {
summary = g_strdup_printf
("Unable to read Click database while removing %s.",
package_id);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, error->message);
goto out;
}
registry = click_user_new_for_user (db, username, &error);
if (error) {
summary = g_strdup_printf
("Unable to read Click database while removing %s.",
package_id);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, error->message);
goto out;
}
old_version = click_user_get_version (registry, name, &error);
if (error) {
summary = g_strdup_printf
("Unable to get current version of Click package %s.",
name);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, error->message);
goto out;
}
if (strcmp (old_version, version) != 0) {
summary = g_strdup_printf
("Not removing Click package %s %s; does not match "
"current version %s.", name, version, old_version);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, NULL);
goto out;
}
click_user_remove (registry, name, &error);
if (error) {
summary = g_strdup_printf ("Failed to remove %s.", package_id);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, error->message);
goto out;
}
click_db_maybe_remove (db, name, version, &error);
if (error) {
summary = g_strdup_printf ("Failed to remove %s.", package_id);
click_pk_error (plugin, PK_ERROR_ENUM_PACKAGE_FAILED_TO_REMOVE,
summary, error->message);
goto out;
}
/* TODO: remove data? */
ret = TRUE;
out:
g_free (summary);
if (error)
g_error_free (error);
g_free (old_version);
g_clear_object (®istry);
g_clear_object (&db);
g_free (version);
g_free (name);
g_free (username);
return ret;
}
static void
click_remove_packages (PkPlugin *plugin, PkTransaction *transaction,
gchar **package_ids)
{
gboolean ret = FALSE;
gint i;
for (i = 0; package_ids[i]; ++i) {
g_debug ("Click: removing %s", package_ids[i]);
ret = click_remove_package (plugin, transaction,
package_ids[i]);
if (!ret)
break;
}
}
struct click_search_data {
PkPlugin *plugin;
gchar **values;
gboolean search_details;
};
static void
click_search_emit (PkPlugin *plugin, JsonObject *manifest, const gchar *title)
{
gchar *package_id;
package_id = click_build_pkid (plugin, manifest, "installed:click");
if (!package_id)
return;
g_debug ("Found package: %s", package_id);
pk_backend_job_package (plugin->job, PK_INFO_ENUM_INSTALLED,
package_id, title);
g_free (package_id);
}
static void
click_search_one (JsonArray *array, guint index, JsonNode *element_node,
gpointer vdata)
{
struct click_search_data *data;
JsonObject *manifest;
const gchar *name = NULL;
const gchar *title = NULL;
const gchar *description = NULL;
gchar **value;
data = (struct click_search_data *) vdata;
manifest = json_node_get_object (element_node);
if (!manifest)
return;
name = json_object_get_string_member (manifest, "name");
if (!name)
return;
if (data->search_details && json_object_has_member (manifest, "title"))
title = json_object_get_string_member (manifest, "title");
if (!title)
title = "";
if (data->search_details &&
json_object_has_member (manifest, "description"))
description = json_object_get_string_member (manifest,
"description");
if (!description)
description = "";
for (value = data->values; *value; ++value) {
if (strcasestr (name, *value)) {
click_search_emit (data->plugin, manifest, title);
break;
}
if (data->search_details &&
(strcasestr (title, *value) ||
strcasestr (description, *value))) {
click_search_emit (data->plugin, manifest, title);
break;
}
}
}
static void
click_search (PkPlugin *plugin, PkTransaction *transaction, gchar **values,
gboolean search_details)
{
JsonArray *array = NULL;
struct click_search_data data;
array = click_get_list (plugin, transaction);
if (!array)
return;
data.plugin = plugin;
data.values = values;
data.search_details = search_details;
json_array_foreach_element (array, click_search_one, &data);
json_array_unref (array);
}
static void
click_skip_native_backend (PkPlugin *plugin)
{
if (!pk_backend_job_get_is_error_set (plugin->job))
pk_backend_job_set_exit_code (plugin->job,
PK_EXIT_ENUM_SKIP_TRANSACTION);
}
/**
* pk_plugin_get_description:
*/
const gchar *
pk_plugin_get_description (void)
{
return "Support for Click packages";
}
/**
* pk_plugin_initialize:
*/
void
pk_plugin_initialize (PkPlugin *plugin)
{
/* create private area */
plugin->priv = PK_TRANSACTION_PLUGIN_GET_PRIVATE (PkPluginPrivate);
/* tell PK we might be able to handle these */
pk_backend_implement (plugin->backend, PK_ROLE_ENUM_INSTALL_FILES);
pk_backend_implement (plugin->backend, PK_ROLE_ENUM_GET_PACKAGES);
pk_backend_implement (plugin->backend, PK_ROLE_ENUM_REMOVE_PACKAGES);
}
/**
* pk_plugin_transaction_content_types:
*/
void
pk_plugin_transaction_content_types (PkPlugin *plugin,
PkTransaction *transaction)
{
pk_transaction_add_supported_content_type (transaction,
"application/x-click");
}
/**
* pk_plugin_transaction_started:
*/
void
pk_plugin_transaction_started (PkPlugin *plugin, PkTransaction *transaction)
{
PkRoleEnum role;
gchar **full_paths = NULL;
gchar **package_ids = NULL;
gchar **click_data = NULL;
gchar **values;
PkBitfield flags;
gboolean simulating;
g_debug ("Processing transaction");
pk_backend_job_reset (plugin->job);
pk_transaction_signals_reset (transaction, plugin->job);
pk_backend_job_set_status (plugin->job, PK_STATUS_ENUM_SETUP);
role = pk_transaction_get_role (transaction);
flags = pk_transaction_get_transaction_flags (transaction);
simulating = pk_bitfield_contain (flags,
PK_TRANSACTION_FLAG_ENUM_SIMULATE);
switch (role) {
case PK_ROLE_ENUM_INSTALL_FILES:
/* TODO: Simulation needs to be smarter - backend
* needs to Simulate() with remaining packages.
*/
full_paths = pk_transaction_get_full_paths
(transaction);
click_data = click_filter_click_files (transaction,
full_paths);
if (!simulating && click_data)
click_install_files (plugin, transaction,
click_data);
full_paths = pk_transaction_get_full_paths
(transaction);
if (g_strv_length (full_paths) == 0)
click_skip_native_backend (plugin);
break;
case PK_ROLE_ENUM_GET_PACKAGES:
/* TODO: Handle simulation? */
if (!simulating)
click_get_packages (plugin, transaction);
break;
case PK_ROLE_ENUM_REMOVE_PACKAGES:
package_ids = pk_transaction_get_package_ids
(transaction);
click_data = click_filter_click_packages (transaction,
package_ids);
if (!simulating && click_data)
click_remove_packages (plugin, transaction,
click_data);
package_ids = pk_transaction_get_package_ids
(transaction);
if (g_strv_length (package_ids) == 0)
click_skip_native_backend (plugin);
break;
case PK_ROLE_ENUM_SEARCH_NAME:
case PK_ROLE_ENUM_SEARCH_DETAILS:
values = pk_transaction_get_values (transaction);
click_search (plugin, transaction, values,
role == PK_ROLE_ENUM_SEARCH_DETAILS);
break;
default:
break;
}
g_strfreev (click_data);
}
/**
* pk_plugin_transaction_get_action:
**/
const gchar *
pk_plugin_transaction_get_action (PkPlugin *plugin, PkTransaction *transaction,
const gchar *action_id)
{
const gchar *install_actions[] = {
"org.freedesktop.packagekit.package-install",
"org.freedesktop.packagekit.package-install-untrusted",
NULL
};
const gchar *remove_action =
"org.freedesktop.packagekit.package-remove";
const gchar **install_action;
gchar **full_paths;
gchar **package_ids;
gint i;
if (!action_id)
return NULL;
for (install_action = install_actions; *install_action;
++install_action) {
if (strcmp (action_id, *install_action) == 0) {
/* Use an action with weaker auth requirements if
* and only if all the packages in the list are
* Click files.
*/
full_paths = pk_transaction_get_full_paths
(transaction);
for (i = 0; full_paths[i]; ++i) {
if (!click_is_click_file (full_paths[i]))
break;
}
if (!full_paths[i])
return "com.ubuntu.click.package-install";
}
}
if (strcmp (action_id, remove_action) == 0) {
/* Use an action with weaker auth requirements if and only
* if all the packages in the list are Click packages.
*/
package_ids = pk_transaction_get_package_ids
(transaction);
for (i = 0; package_ids[i]; ++i) {
if (!click_is_click_package (package_ids[i]))
break;
}
if (!package_ids[i])
return "com.ubuntu.click.package-remove";
}
return action_id;
}
click-0.4.21.1ubuntu0.2/pk-plugin/com.ubuntu.click.pkla 0000664 0000000 0000000 00000000230 12320742124 017327 0 ustar [Allow installation of Click packages]
Identity=unix-user:phablet
Action=com.ubuntu.click.package-install;com.ubuntu.click.package-remove
ResultAny=yes
click-0.4.21.1ubuntu0.2/bin/ 0000775 0000000 0000000 00000000000 12320742335 012146 5 ustar click-0.4.21.1ubuntu0.2/bin/click 0000775 0000000 0000000 00000004622 12320742124 013161 0 ustar #! /usr/bin/python3
# Copyright (C) 2013 Canonical Ltd.
# Author: Colin Watson
# This program 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; version 3 of the License.
#
# This program 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 this program. If not, see .
"""Operations on Click packages."""
from __future__ import print_function
from optparse import OptionParser
import os
import signal
import sys
from textwrap import dedent
# Support running from the build tree.
sys.path.insert(0, os.path.join(sys.path[0], os.pardir))
from click import commands
def fix_stdout():
if sys.version >= "3":
# Force encoding to UTF-8 even in non-UTF-8 locales.
import io
sys.stdout = io.TextIOWrapper(
sys.stdout.detach(), encoding="UTF-8", line_buffering=True)
else:
# Avoid having to do .encode("UTF-8") everywhere.
import codecs
sys.stdout = codecs.EncodedFile(sys.stdout, "UTF-8")
def null_decode(input, errors="strict"):
return input, len(input)
sys.stdout.decode = null_decode
def main():
fix_stdout()
# Python's default handling of SIGPIPE is not helpful to us.
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
parser = OptionParser(dedent("""\
%%prog COMMAND [options]
Commands are as follows ('%%prog COMMAND --help' for more):
%s""") % commands.help_text())
parser.disable_interspersed_args()
_, args = parser.parse_args()
if not args:
parser.print_help()
return 0
command = args[0]
args = args[1:]
if command == "help":
if args and args[0] in commands.all_commands:
mod = commands.load_command(args[0])
mod.run(["--help"])
else:
parser.print_help()
return 0
if command not in commands.all_commands:
parser.error("unknown command: %s" % command)
mod = commands.load_command(command)
return mod.run(args)
if __name__ == "__main__":
sys.exit(main())
click-0.4.21.1ubuntu0.2/m4/ 0000775 0000000 0000000 00000000000 12320742335 011716 5 ustar click-0.4.21.1ubuntu0.2/schroot/ 0000775 0000000 0000000 00000000000 12320742335 013057 5 ustar click-0.4.21.1ubuntu0.2/schroot/Makefile.am 0000664 0000000 0000000 00000000112 12320742124 015101 0 ustar schroot_clickdir = @sysconfdir@/schroot/click
schroot_click_DATA = fstab
click-0.4.21.1ubuntu0.2/schroot/fstab 0000664 0000000 0000000 00000001132 12320742124 014072 0 ustar # fstab: static file system information for chroots.
# Note that the mount point will be prefixed by the chroot path
# (CHROOT_PATH)
#
#
/proc /proc none rw,bind 0 0
/sys /sys none rw,bind 0 0
/dev /dev none rw,bind 0 0
/dev/pts /dev/pts none rw,bind 0 0
/home /home none rw,rbind 0 0
/tmp /tmp none rw,bind 0 0
click-0.4.21.1ubuntu0.2/debian/ 0000775 0000000 0000000 00000000000 12607741701 012624 5 ustar click-0.4.21.1ubuntu0.2/debian/click.dirs 0000664 0000000 0000000 00000000033 12320742124 014560 0 ustar usr/share/click/frameworks
click-0.4.21.1ubuntu0.2/debian/click-doc.docs 0000664 0000000 0000000 00000000020 12320742124 015306 0 ustar doc/_build/html
click-0.4.21.1ubuntu0.2/debian/libclick-0.4-0.symbols 0000664 0000000 0000000 00000010064 12320742142 016437 0 ustar libclick-0.4.so.0 libclick-0.4-0 #MINVER#
* Build-Depends-Package: libclick-0.4-dev
click_database_error_quark@Base 0.4.17
click_db_add@Base 0.4.17
click_db_ensure_ownership@Base 0.4.17
click_db_gc@Base 0.4.17
click_db_get@Base 0.4.17
click_db_get_manifest@Base 0.4.18
click_db_get_manifest_as_string@Base 0.4.21
click_db_get_manifests@Base 0.4.18
click_db_get_manifests_as_string@Base 0.4.21
click_db_get_overlay@Base 0.4.17
click_db_get_packages@Base 0.4.17
click_db_get_path@Base 0.4.17
click_db_get_size@Base 0.4.17
click_db_get_type@Base 0.4.17
click_db_has_package_version@Base 0.4.18
click_db_maybe_remove@Base 0.4.17
click_db_new@Base 0.4.17
click_db_read@Base 0.4.17
click_dir_get_type@Base 0.4.17
click_dir_open@Base 0.4.17
click_dir_read_name@Base 0.4.17
click_ensuredir@Base 0.4.17
click_find_on_path@Base 0.4.17
click_find_package_directory@Base 0.4.17
click_framework_error_quark@Base 0.4.18
click_framework_get_base_name@Base 0.4.18
click_framework_get_base_version@Base 0.4.18
click_framework_get_fields@Base 0.4.18
click_framework_get_field@Base 0.4.18
click_framework_get_frameworks@Base 0.4.18
click_framework_get_name@Base 0.4.18
click_framework_get_type@Base 0.4.18
click_framework_has_framework@Base 0.4.18
click_framework_open@Base 0.4.18
click_get_db_dir@Base 0.4.17
click_get_frameworks_dir@Base 0.4.18
click_get_hooks_dir@Base 0.4.17
click_get_umask@Base 0.4.17
click_hook_get_app_id@Base 0.4.17
click_hook_get_field@Base 0.4.17
click_hook_get_fields@Base 0.4.17
click_hook_get_hook_name@Base 0.4.17
click_hook_get_is_single_version@Base 0.4.17
click_hook_get_is_user_level@Base 0.4.17
click_hook_get_pattern@Base 0.4.17
click_hook_get_run_commands_user@Base 0.4.17
click_hook_get_short_app_id@Base 0.4.17
click_hook_get_type@Base 0.4.17
click_hook_install@Base 0.4.17
click_hook_install_package@Base 0.4.17
click_hook_open@Base 0.4.17
click_hook_open_all@Base 0.4.17
click_hook_remove@Base 0.4.17
click_hook_remove_package@Base 0.4.17
click_hook_run_commands@Base 0.4.17
click_hook_sync@Base 0.4.17
click_hooks_error_quark@Base 0.4.17
click_installed_package_get_package@Base 0.4.17
click_installed_package_get_path@Base 0.4.17
click_installed_package_get_type@Base 0.4.17
click_installed_package_get_version@Base 0.4.17
click_installed_package_get_writeable@Base 0.4.17
click_installed_package_new@Base 0.4.17
click_package_install_hooks@Base 0.4.17
click_package_remove_hooks@Base 0.4.17
click_pattern_format@Base 0.4.17
click_pattern_possible_expansion@Base 0.4.17
click_query_error_quark@Base 0.4.17
click_run_system_hooks@Base 0.4.17
click_run_user_hooks@Base 0.4.17
click_single_db_any_app_running@Base 0.4.17
click_single_db_app_running@Base 0.4.17
click_single_db_ensure_ownership@Base 0.4.17
click_single_db_gc@Base 0.4.17
click_single_db_get_manifest@Base 0.4.18
click_single_db_get_manifest_as_string@Base 0.4.21
click_single_db_get_packages@Base 0.4.17
click_single_db_get_path@Base 0.4.17
click_single_db_get_root@Base 0.4.17
click_single_db_get_type@Base 0.4.17
click_single_db_has_package_version@Base 0.4.18
click_single_db_maybe_remove@Base 0.4.17
click_single_db_new@Base 0.4.17
click_symlink_force@Base 0.4.17
click_unlink_force@Base 0.4.17
click_user_error_quark@Base 0.4.17
click_user_get_is_gc_in_use@Base 0.4.17
click_user_get_is_pseudo_user@Base 0.4.17
click_user_get_manifest@Base 0.4.18
click_user_get_manifest_as_string@Base 0.4.21
click_user_get_manifests@Base 0.4.18
click_user_get_manifests_as_string@Base 0.4.21
click_user_get_overlay_db@Base 0.4.17
click_user_get_package_names@Base 0.4.17
click_user_get_path@Base 0.4.17
click_user_get_type@Base 0.4.17
click_user_get_version@Base 0.4.17
click_user_has_package_name@Base 0.4.17
click_user_is_removable@Base 0.4.17
click_user_new_for_all_users@Base 0.4.17
click_user_new_for_gc_in_use@Base 0.4.17
click_user_new_for_user@Base 0.4.17
click_user_remove@Base 0.4.17
click_user_set_version@Base 0.4.17
click_users_get_type@Base 0.4.17
click_users_get_user@Base 0.4.17
click_users_get_user_names@Base 0.4.17
click_users_new@Base 0.4.17
click-0.4.21.1ubuntu0.2/debian/copyright 0000664 0000000 0000000 00000006746 12320742124 014564 0 ustar Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: click
Upstream-Contact:
Source: https://launchpad.net/click
Files: *
Copyright: 2013, Canonical Ltd.
License: GPL-3
Files: click/test/helpers.py
Copyright: 2013, Canonical Ltd.
2007-2012 Michael Foord.
License: Python
Files: pk-plugin/*
Copyright: 2010-2013, Matthias Klumpp
2011, Richard Hughes
2013, Canonical Ltd.
License: GPL-3
License: GPL-3
This program 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; version 3 of the License.
.
This program 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 this program. If not, see .
.
A copy of the GNU General Public License version 3 is available in
/usr/share/common-licenses/GPL-3.
License: Python
1. This LICENSE AGREEMENT is between the Python Software Foundation
("PSF"), and the Individual or Organization ("Licensee") accessing and
otherwise using this software ("Python") in source or binary form and
its associated documentation.
.
2. Subject to the terms and conditions of this License Agreement, PSF
hereby grants Licensee a nonexclusive, royalty-free, world-wide
license to reproduce, analyze, test, perform and/or display publicly,
prepare derivative works, distribute, and otherwise use Python
alone or in any derivative version, provided, however, that PSF's
License Agreement and PSF's notice of copyright, i.e., "Copyright (c)
2001, 2002, 2003, 2004, 2005, 2006, 2007 Python Software Foundation;
All Rights Reserved" are retained in Python alone or in any derivative
version prepared by Licensee.
.
3. In the event Licensee prepares a derivative work that is based on
or incorporates Python or any part thereof, and wants to make
the derivative work available to others as provided herein, then
Licensee hereby agrees to include in any such work a brief summary of
the changes made to Python.
.
4. PSF is making Python available to Licensee on an "AS IS"
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
INFRINGE ANY THIRD PARTY RIGHTS.
.
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
.
6. This License Agreement will automatically terminate upon a material
breach of its terms and conditions.
.
7. Nothing in this License Agreement shall be deemed to create any
relationship of agency, partnership, or joint venture between PSF and
Licensee. This License Agreement does not grant permission to use PSF
trademarks or trade name in a trademark sense to endorse or promote
products or services of Licensee, or any third party.
.
8. By copying, installing or otherwise using Python, Licensee
agrees to be bound by the terms and conditions of this License
Agreement.
click-0.4.21.1ubuntu0.2/debian/packagekit-check 0000775 0000000 0000000 00000000311 12320742124 015713 0 ustar #! /bin/sh
set -e
packagekit_version="$(dpkg-query -f '${Version}\n' -W libpackagekit-glib2-dev || echo 0)"
if dpkg --compare-versions "$packagekit_version" ge 0.8.10; then
echo yes
else
echo no
fi
click-0.4.21.1ubuntu0.2/debian/control 0000664 0000000 0000000 00000010702 12320742124 014217 0 ustar Source: click
Section: admin
Priority: optional
Maintainer: Colin Watson
Standards-Version: 3.9.5
Build-Depends: debhelper (>= 9~), dh-autoreconf, intltool, python3:any (>= 3.2), python3-all:any, python3-setuptools, python3-apt, python3-debian, python3-gi, python3:any (>= 3.3) | python3-mock, pep8, python3-pep8, pyflakes, python3-sphinx, pkg-config, valac, gobject-introspection (>= 0.6.7), libgirepository1.0-dev (>= 0.6.7), libglib2.0-dev (>= 2.34), gir1.2-glib-2.0, libjson-glib-dev (>= 0.10), libgee-0.8-dev, libpackagekit-glib2-dev (>= 0.7.2)
Vcs-Bzr: https://code.launchpad.net/~ubuntu-managed-branches/click/click
Vcs-Browser: http://bazaar.launchpad.net/~ubuntu-managed-branches/click/click/files
X-Auto-Uploader: no-rewrite-version
X-Python-Version: >= 2.7
X-Python3-Version: >= 3.2
Package: click
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, ${python3:Depends}, python3-click (= ${binary:Version}), adduser
Recommends: click-apparmor, upstart-app-launch-tools
Conflicts: click-package
Replaces: click-package
Provides: click-package
Description: Click packages
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides common files, including the main click program.
Package: click-dev
Architecture: any
Multi-Arch: foreign
Depends: ${misc:Depends}, ${perl:Depends}, python3-click (= ${binary:Version})
Recommends: debootstrap, schroot
Description: build Click packages
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
click-dev provides support for building these packages.
Package: python3-click
Section: python
Architecture: any
Depends: ${misc:Depends}, ${python3:Depends}, gir1.2-click-0.4 (= ${binary:Version}), gir1.2-glib-2.0, python3-apt, python3-debian, python3-gi
Conflicts: python3-click-package
Replaces: python3-click-package
Provides: python3-click-package
Description: Click packages (Python 3 interface)
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides Python 3 modules used by click, which may also be
used directly.
Package: libclick-0.4-0
Section: libs
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: run-time Click package management library
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides a shared library for managing Click packages.
Package: libclick-0.4-dev
Section: libdevel
Architecture: any
Multi-Arch: same
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, libclick-0.4-0 (= ${binary:Version}), libglib2.0-dev, libjson-glib-dev
Description: development files for Click package management library
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides development files needed to build programs for
managing Click packages.
Package: gir1.2-click-0.4
Section: introspection
Architecture: any
Depends: ${misc:Depends}, ${gir:Depends}, libclick-0.4-0 (= ${binary:Version})
Description: GIR bindings for Click package management library
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package can be used by other packages using the GIRepository format to
generate dynamic bindings.
Package: click-doc
Section: doc
Architecture: all
Depends: ${misc:Depends}, ${sphinxdoc:Depends}
Conflicts: click-package-doc
Replaces: click-package-doc
Provides: click-package-doc
Description: Click packages (documentation)
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides documentation for click.
Package: packagekit-plugin-click
Architecture: any
Pre-Depends: ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, click (= ${binary:Version})
Description: Click packages (PackageKit plugin)
Click is a simplified packaging format that installs in a separate part of
the file system, suitable for third-party applications.
.
This package provides a PackageKit plugin adding support for Click
packages.
click-0.4.21.1ubuntu0.2/debian/libclick-0.4-dev.install 0000664 0000000 0000000 00000000124 12320742124 017030 0 ustar usr/include
usr/lib/*/libclick*.so
usr/lib/*/pkgconfig/click-*.pc
usr/share/gir-1.0
click-0.4.21.1ubuntu0.2/debian/click.lintian-overrides 0000664 0000000 0000000 00000000054 12320742124 017260 0 ustar click: description-starts-with-package-name
click-0.4.21.1ubuntu0.2/debian/packagekit-plugin-click.docs 0000664 0000000 0000000 00000000021 12320742124 020141 0 ustar pk-plugin/README
click-0.4.21.1ubuntu0.2/debian/changelog 0000664 0000000 0000000 00000071647 12607740342 014515 0 ustar click (0.4.21.1ubuntu0.2) trusty-security; urgency=medium
* SECURITY UPDATE: fix privilege escalation via crafted data.tar.gz that
can be used to install alternate security policy than what is defined
- click/install.py: Forbid installing packages with data tarball members
whose names do not start with "./". Based on patch from Colin Watson.
- CVE-2015-XXXX
- LP: #1506467
-- Jamie Strandboge Thu, 15 Oct 2015 10:05:35 -0500
click (0.4.21.1) trusty; urgency=medium
[ Colin Watson ]
* When a hook command fails, include the command in the error message.
* Don't allow failure of a single hook to prevent other hooks being run.
* Log hook failures to stderr and exit non-zero, rather than propagating
an exception which is then logged as a click crash.
-- Ubuntu daily release Tue, 08 Apr 2014 09:41:55 +0000
click (0.4.21) trusty; urgency=medium
* Add *_as_string variants of manifest methods, for clients that already
have their own JSON parsing libraries and don't want to use JSON-GLib.
* Write to stderr and exit non-zero when chrooted commands fail, rather
than propagating an exception which is then logged as a click crash
(LP: #1298457).
* Make the get_manifests family of functions log errors about individual
manifests to stderr rather than crashing (LP: #1297519).
* Don't run user hooks until dbus has started; the content-hub hook needs
to modify gsettings.
* Don't rely on PyGObject supporting default None arguments; this was only
added in 3.11.1.
-- Colin Watson Tue, 08 Apr 2014 10:13:37 +0100
click (0.4.20) trusty; urgency=medium
[ Colin Watson ]
* Create system hook symlinks for all installed packages, not just current
versions. This avoids missing AppArmor profiles when there are
unregistered user-installed versions of packages lying around.
-- Ubuntu daily release Mon, 24 Mar 2014 16:16:37 +0000
click (0.4.19) trusty; urgency=medium
[ Colin Watson ]
* Set Click.User.ensure_db visibility back to private, since it's no
longer used by Click.Hook. (The C ABI is unaffected.)
* Add brief documentation on Click's multiple-database scheme, based on my
recent mail to ubuntu-phone.
* Fix a few potential GLib critical messages from the PackageKit plugin.
* Make libclick-0.4-dev depend on libjson-glib-dev for
.
* Add Requires.private to click-0.4.pc, so that programs built against
libclick pick up the proper CFLAGS including glib and json-glib.
* chroot: Allow creating 14.04 chroots.
* Include _directory and _removable dynamic manifest keys in "click info"
output (LP: #1293788).
* Document -f and -s options to "click chroot" in click(1).
* chroot: Fix code to make /finish.sh executable.
* chroot: Make /usr/sbin/policy-rc.d executable in the chroot, as
otherwise it has no effect.
* chroot: Run apt-get dist-upgrade on the chroot before trying to install
the basic build tool set. Fixes chroot creation for saucy.
[ Benjamin Zeller ]
* Take pkexec env vars into account when creating a chroot.
[ Dimitri John Ledkov ]
* Add session management to click chroot.
-- Ubuntu daily release Tue, 18 Mar 2014 14:27:53 +0000
click (0.4.18.3) trusty; urgency=medium
[ Colin Watson ]
* Take a slightly different approach to fixing "click hook run-user": only
try to update user registration symlinks if they already exist in the
overlay database.
-- Ubuntu daily release Wed, 12 Mar 2014 12:02:47 +0000
click (0.4.18.2) trusty; urgency=medium
* Make "click hook run-user" ensure that the user registration directory
exists before dropping privileges and trying to create symlinks in it
(LP: #1291192).
-- Colin Watson Wed, 12 Mar 2014 11:59:31 +0000
click (0.4.18.1) trusty; urgency=medium
[ Colin Watson ]
* If a user attempts to install a version of a package that is already
installed in an underlay database, then just register the appropriate
version for them rather than unpacking another copy.
* Make "click hook run-system" and "click hook run-user" consistently use
the bottom-most unpacked copy of a given version of a package, and
update hook symlinks and user registration symlinks if necessary.
-- Ubuntu daily release Tue, 11 Mar 2014 17:22:10 +0000
click (0.4.18) trusty; urgency=medium
* Give gir1.2-click-0.4 an exact-versioned dependency on libclick-0.4-0.
* Use is_symlink helper method in a few more places.
* Add a similar is_dir helper method.
* Ignore extraneous non-directories when walking a database root in
Click.DB.get_packages and Click.DB.gc.
* Make the PackageKit plugin tolerate the "_removable" dynamic manifest
key being changed to a boolean in the future.
* Document that users of "_removable" should tolerate it being a boolean.
* Use libclick when removing packages, listing packages, or searching
packages via the PackageKit plugin.
* Add libclick interfaces to get package manifests, both individually
(LP: #1287692) and for all installed packages (LP: #1287693).
* Override description-starts-with-package-name Lintian error for click;
this is describing the system as a whole rather than naming the package.
* Add libclick interfaces to get the list of frameworks supported by the
current system (LP: #1271633) and various properties of those frameworks
(LP: #1287694).
-- Colin Watson Tue, 11 Mar 2014 17:18:07 +0000
click (0.4.17.2) trusty; urgency=medium
[ Colin Watson ]
* Fix Click.User construction in "click pkgdir".
-- Ubuntu daily release Thu, 06 Mar 2014 16:38:35 +0000
click (0.4.17.1) trusty; urgency=medium
* gobject-introspection-1.0.pc is in libgirepository1.0-dev, not
gobject-introspection. Fix Build-Depends.
* Build-depend and depend on gir1.2-glib-2.0 and python3-gi.
* Map gboolean to ctypes.c_int, not ctypes.c_bool. gboolean and gint are
the same as far as glib is concerned, and ctypes does strange things
with its bool type in callbacks.
-- Colin Watson Thu, 06 Mar 2014 16:09:33 +0000
click (0.4.17) trusty; urgency=medium
* Use full path to click in Upstart jobs to save a $PATH lookup.
* Add systemd units to run Click system and user hooks at the appropriate
times. We probably won't be using these for a while, but it does no
harm to add them.
* Move an initial core of functionality (database, hooks, osextras, query,
user) from Python into a new "libclick" library, allowing
performance-critical clients to avoid the cost of starting a new Python
interpreter (LP: #1282311).
-- Colin Watson Thu, 06 Mar 2014 14:35:26 +0000
click (0.4.16) trusty; urgency=medium
[ Colin Watson ]
* hooks: Fix expansion of "$$" in hook patterns to conform to the
documented behaviour of expanding to the single character "$".
* Move version detection out of configure.ac into a separate get-version
script, since intltool-update has trouble with the previous approach.
* Stop using unittest2 if available; the relevant improvements were
integrated into the standard library's unittest in Python 2.7, and we no
longer support 2.6.
* user: When setting the registered version of a package to the version in
an underlay database (e.g. a preinstalled version vs. one in the
user-installed area), remove the overlay link rather than setting a new
one equal to the underlay; this was always the intended behaviour but
didn't work that way due to a typo.
* Add Python 3.4 to list of tested versions.
* Call setup.py from the top-level Makefile.am rather than from
debian/rules, to make the build system a bit more unified.
* Drop AM_GNU_GETTEXT and call intltoolize before autoreconf in
autogen.sh; this fixes a bug whereby "make" after "./configure" always
immediately needed to run aclocal.
* Build-depend on python3-pep8 so that test_pep8_clean doesn't need to be
skipped when running under Python 3. This can safely be removed for
backports to precise.
* Simplify click -> python3-click dependency given that both are
Architecture: any.
* Tighten packagekit-plugin-click -> click dependency to require a
matching version.
* Use dh_install --fail-missing to avoid future mistakes.
* Sync up substvar use with what debhelper actually generates for us: add
${misc:Pre-Depends} to click and packagekit-plugin-click, and remove
${python3:Depends} from click-dev.
* Reset SIGPIPE handling from Python's default of raising an exception to
the Unix default of terminating the process (LP: #1285790).
-- Ubuntu daily release Tue, 04 Mar 2014 15:23:45 +0000
click (0.4.15) trusty; urgency=medium
[ Stéphane Graber ]
* Set X-Auto-Uploader to no-rewrite-version
* Set Vcs-Bzr to the new target branch
-- Ubuntu daily release Thu, 30 Jan 2014 16:12:17 +0000
click (0.4.14) trusty; urgency=low
[ Colin Watson ]
* chroot: Print help if no subcommand given (LP: #1260669).
* chroot: Recommend debootstrap from click-dev, and explicitly check for
it in "click chroot create" (LP: #1260487).
* chroot: Check for root in "create" and "destroy" (LP: #1260671).
* hooks: Add a ${short-id} expansion to hook patterns; this is valid only
in user-level or single-version hooks, and expands to a new "short
application ID" without the version (LP: #1251635).
* hooks: Strip any trailing slashes from the end of patterns, as they
cause confusion with symlink-to-directory semantics and can never be
useful (LP: #1253855).
* install: Extend the interpretation of "framework" a little bit to allow
a Click package to declare that it requires multiple frameworks. This
will allow splitting up the SDK framework declarations into more
fine-grained elements.
* Policy version 3.9.5: no changes required.
* build: Enforce only a single framework declaration for now, by request.
[ Zoltan Balogh ]
* Add qtmultimedia5-dev to the SDK framework list.
[ Dimitri John Ledkov ]
* chroot: Add "cmake" to build_pkgs, as it is expected for cmake to be
available on any (Ubuntu) framework.
-- Colin Watson Thu, 23 Jan 2014 17:30:54 +0000
click (0.4.13) trusty; urgency=low
[ Robert Bruce Park ]
* Ignore click packages when building click packages.
[ Colin Watson ]
* If "click build" or "click buildsource" is given a directory as the
value of its -m/--manifest option, interpret that as indicating the
"manifest.json" file in that directory (LP: #1251604).
* Ensure correct permissions on /opt/click.ubuntu.com at boot, since a
system image update may have changed clickpkg's UID/GID (LP: #1259253).
-- Colin Watson Tue, 10 Dec 2013 14:33:42 +0000
click (0.4.12) trusty; urgency=low
[ Colin Watson ]
* Adjust top-level "click help" entry for "install" to point to pkcon.
* Fix hook installation tests to test Unicode manifests properly.
* Read version and date from debian/changelog when building documentation.
* Declare click-dev Multi-Arch: foreign (LP: #1238796).
* Build-depend on python3:any/python3-all:any rather than
python3/python3-all.
[ Brian Murray, Colin Watson ]
* Add chroot management support.
-- Colin Watson Thu, 21 Nov 2013 14:46:16 +0000
click (0.4.11) saucy; urgency=low
* Drop --force-missing-framework from PackageKit plugin now that
/usr/share/click/frameworks/ubuntu-sdk-13.10.framework is in
ubuntu-sdk-libs.
* Show a neater error message when a package's framework is not installed
(LP: #1236671).
* Show a neater error message when building a package whose manifest file
cannot be parsed (LP: #1236669).
* Show a neater error message when running "click install" with
insufficient privileges (LP: #1236673).
-- Colin Watson Fri, 11 Oct 2013 12:07:06 +0100
click (0.4.10) saucy; urgency=low
* When removing packages, only drop privileges after ensuring the
existence of the database directory (LP: #1233280).
-- Colin Watson Mon, 30 Sep 2013 18:12:14 +0100
click (0.4.9) saucy; urgency=low
* Explicitly build-depend on pkg-config, since it's needed even if the
PackageKit/GLib-related build-dependencies are removed for backporting.
* Remove some stray documentation references to Ubuntu 13.04.
* Ensure that the user's overlay database directory exists when
unregistering a preinstalled package (LP: #1232066).
* Support packages containing code for multiple architectures, and
document the "architecture" manifest field (LP: #1214380, #1214864).
* Correctly pass through return values of commands as the exit status of
the "click" wrapper.
* Extend "click info" to take a registered package name as an alternative
to a path to a Click package file (LP: #1232118).
* Force unpacked files to be owner-writeable (LP: #1232128).
-- Colin Watson Mon, 30 Sep 2013 15:24:49 +0100
click (0.4.8) saucy; urgency=low
* Show a proper error message if "click build" or "click buildsource" is
called on a directory that does not exist or does not contain a manifest
file, rather than crashing (LP: #1228619).
* Restore missing newlines after JSON dumps in "click info" and "click
list --manifest".
* Tidy up use of PackageKit IDs; local:click should refer to uninstalled
packages, while installed:click refers to installed packages.
* Expose application names and whether a package is removable via the
PackageKit API: the IDs of installed applications are now formed as
comma-separated key/value pairs, e.g.
"installed:click,removable=1,app_name=foo,app_name=bar" (LP: #1209329).
* Rename ClickUser.__setitem__ to ClickUser.set_version and
ClickUser.__delitem__ to ClickUser.remove; with multiple databases it
was impossible for these methods to fulfil the normal contract for
mutable mappings, since deleting an item might simply expose an item in
an underlying database.
* Allow unregistering preinstalled packages. A preinstalled package
cannot in general actually be removed from disk, but unregistering it
for a user records it as being hidden from that user's list of
registered packages. Reinstalling the same version unhides it.
* Consolidate ClickInstaller.audit_control into ClickInstaller.audit.
* Validate the shipped md5sums file in "click verify" (LP: #1217333).
-- Colin Watson Tue, 24 Sep 2013 15:21:48 +0100
click (0.4.7) saucy; urgency=low
* Run system hooks when removing a package from the file system
(LP: #1227681).
* If a hook symlink is already correct, don't unnecessarily remove and
recreate it.
* Improve "click hook install-system" and "click hook install-user" to
remove any stale symlinks they find, and to run Exec commands only once
per hook. This significantly speeds up system and session startup when
lots of applications are installed (LP: #1227604).
* Rename "click hook install-system" and "click hook install-user" to
"click hook run-system" and "click hook run-user" respectively, to
better fit their semantics. (I expect these commands only to have been
used internally by click's own Upstart jobs.)
* Filter version control metadata and editor backup files out of binary
packages in "click build" (LP: #1223640).
-- Colin Watson Fri, 20 Sep 2013 18:07:13 +0100
click (0.4.6) saucy; urgency=low
* Make sure all unpacked files and directories are group- and
world-readable, and (if owner-executable) also group- and
world-executable (LP: #1226553).
-- Colin Watson Tue, 17 Sep 2013 13:37:06 +0100
click (0.4.5) saucy; urgency=low
* Document --force-missing-framework option in the error message produced
when a package's required framework is not present.
* Make "click pkgdir" exit 1 if a directory for the given package name or
path is not found, rather than letting the exception propagate
(LP: #1225923).
* Run system hooks at boot time, in particular so that AppArmor profiles
for packages in /custom are generated and loaded (LP: #1223085).
-- Colin Watson Mon, 16 Sep 2013 20:55:28 +0100
click (0.4.4) saucy; urgency=low
* Amend "click help install" to recommend using "pkcon install-local".
* Run hooks when removing a per-user package registration.
* Adjust usage lines for "click help verify" and "click help pkgdir" to
indicate that options are allowed.
* Add a click(1) manual page.
* Use json.dump and json.load in most places rather than json.dumps and
json.loads (which unnecessarily construct strings).
* Add "click unregister", which unregisters a package for a user and
removes it from disk if it is not being used.
* Add RemovePackage support to the PackageKit plugin, mapped to "click
unregister".
* Attempt to remove the old version of a package after installing or
registering a new one.
* Remove code supporting PackageKit 0.7 API, and instead arrange to
disable the PackageKit plugin if the new API is not available, since we
don't need to build it on Ubuntu 12.04 LTS.
* Report errors from click subprocesses in PackageKit plugin
(LP: #1218483).
* Implement PackageKit search by name and by details.
* Reserve manifest keys starting with an underscore for use as dynamic
properties of installed packages.
* Add the dynamic key "_directory" to "click list --manifest" output,
showing the directory where each package is unpacked (LP: #1221760).
* Add the dynamic key "_removable" to "click list --manifest" output,
which is 1 if a package is unpacked in a location from which it can be
removed, otherwise 0.
-- Colin Watson Mon, 09 Sep 2013 13:37:39 +0100
click (0.4.3) saucy; urgency=low
* Add support for multiple installation root directories, configured in
/etc/click/databases/. Define /usr/share/click/preinstalled,
/custom/click, and /opt/click.ubuntu.com by default.
* Add --all-users option to "click install" and "click register": this
registers the installed package for a special pseudo-user "@all", making
it visible to all users.
* Add "click hook install-user", which runs all user-level hooks for all
packages for a given user. This is useful at session startup to catch
up with packages that may have been preinstalled and registered for all
users.
* Run "click hook install-user" on session startup from an Upstart user
job.
* Avoid calling "click desktophook" if
/usr/share/click/hooks/upstart-app-launch-desktop.hook exists.
* Force umask to a sane value when dropping privileges (022 for clickpkg,
current-umask | 002 for other users; LP: #1215480).
* Use aa-exec-click rather than aa-exec in .desktop files generated by
"click desktophook" (LP: #1197047).
-- Colin Watson Wed, 04 Sep 2013 17:01:58 +0100
click (0.4.2) saucy; urgency=low
* Suppress dpkg calls to lchown when not running as root (LP: #1220125).
-- Colin Watson Tue, 03 Sep 2013 10:12:29 +0100
click (0.4.1) saucy; urgency=low
[ Sergio Schvezov ]
* Compare mtimes for desktop files, not stat objects.
-- Colin Watson Mon, 02 Sep 2013 14:54:49 +0100
click (0.4.0) saucy; urgency=low
[ Colin Watson ]
* Add "installed-size" as a mandatory field in the control area's
"manifest" file; it should not be present in source manifest files, and
is generated automatically by "click build".
* Add an optional "icon" manifest key.
* Consistently call clickpreload_init from preloaded functions in case
they happen to be called before libclickpreload's constructor.
* Run dpkg with --force-bad-path so that /sbin and /usr/sbin are not
required to be on $PATH; we don't use the tools dpkg gets from there.
[ Loïc Minier ]
* Add fopen64 wrapper (LP: #1218674).
-- Colin Watson Fri, 30 Aug 2013 17:59:34 +0100
click (0.3.4) saucy; urgency=low
* Make "click desktophook" tolerate dangling symlinks in
~/.local/share/applications/.
-- Colin Watson Wed, 28 Aug 2013 18:00:55 +0200
click (0.3.3) saucy; urgency=low
* Recommend click-apparmor from click (suggested by Jamie Strandboge).
-- Colin Watson Wed, 28 Aug 2013 12:17:23 +0200
click (0.3.2) saucy; urgency=low
[ Jamie Strandboge ]
* Document maintainer as an optional field.
[ Matthias Klumpp ]
* Support PackageKit 0.8 API.
-- Colin Watson Tue, 27 Aug 2013 21:07:02 +0200
click (0.3.1) saucy; urgency=low
[ Colin Watson ]
* Fix some more failures with mock 0.7.2.
* Work around the lack of a python-apt backport of
apt_pkg.TagFile(sequence, bytes=True) to precise.
[ Jamie Strandboge ]
* Codify allowed characters for "application ID".
* Fix typos in apparmor hook example.
-- Colin Watson Tue, 13 Aug 2013 10:10:11 +0200
click (0.3.0) saucy; urgency=low
* Insert a new "_click-binary" ar member immediately after
"debian-binary"; this allows detecting the MIME type of a Click package
even when it doesn't have the extension ".click" (LP: #1205346).
* Declare the application/x-click MIME type, since the shared-mime-info
upstream would rather not take the patch there at this point
(https://bugs.freedesktop.org/show_bug.cgi?id=66689).
* Make removal of old links for single-version hooks work even when the
application ID is not a prefix of the pattern's basename.
* Add an optional Hook-Name field to hook files, thereby allowing multiple
hooks to attach to the same virtual name.
* Rename click's own "desktop" hook to "click-desktop", making use of the
new Hook-Name facility.
-- Colin Watson Tue, 06 Aug 2013 11:08:46 +0100
click (0.2.10) saucy; urgency=low
* Force click's stdout encoding to UTF-8 regardless of the locale.
* Don't encode non-ASCII characters in JSON dumps.
* Treat manifests as UTF-8.
-- Colin Watson Tue, 30 Jul 2013 15:14:16 +0100
click (0.2.9) saucy; urgency=low
* Tolerate dangling source symlinks in "click desktophook".
* Handle the case where the clickpkg user cannot read the .click file,
using some LD_PRELOAD trickery to allow passing it as a file descriptor
opened by the privileged process (LP: #1204523).
* Remove old links for single-version hooks when installing new versions
(LP: #1206115).
-- Colin Watson Mon, 29 Jul 2013 16:56:42 +0100
click (0.2.8) saucy; urgency=low
* Check in advance whether the root is writable by the clickpkg user, not
just by root, and do so in a way less vulnerable to useful exception
text being eaten by a subprocess preexec_fn (LP: #1204570).
* Actually install
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.click.pkla in
the packagekit-plugin-click binary package.
-- Colin Watson Thu, 25 Jul 2013 17:40:49 +0100
click (0.2.7) saucy; urgency=low
* Fix error message when rejecting "_" from a package name or version
(LP: #1204560).
-- Colin Watson Wed, 24 Jul 2013 16:42:59 +0100
click (0.2.6) saucy; urgency=low
* Adjust written .desktop files to avoid tickling some bugs in Unity 8's
parsing.
-- Colin Watson Wed, 24 Jul 2013 08:03:08 +0100
click (0.2.5) saucy; urgency=low
* Ensure that ~/.local/share/applications exists if we need to write any
.desktop files.
-- Colin Watson Wed, 24 Jul 2013 07:44:44 +0100
click (0.2.4) saucy; urgency=low
* Mangle Icon in .desktop files to point to an absolute path within the
package unpack directory if necessary.
* Add a "--" separator between aa-exec's options and the subsidiary
command, per Jamie Strandboge.
-- Colin Watson Tue, 23 Jul 2013 23:38:29 +0100
click (0.2.3) saucy; urgency=low
* Set Path in generated .desktop files to the top-level package directory.
* Revert part of geteuid() change in 0.2.2; ClickUser._drop_privileges and
ClickUser._regain_privileges need to check the real UID, or else they
will never regain privileges.
* When running a hook, set HOME to the home directory of the user the hook
is running as.
-- Colin Watson Tue, 23 Jul 2013 22:57:03 +0100
click (0.2.2) saucy; urgency=low
* dh_click: Support --name option.
* Avoid ClickUser.__iter__ infecting its caller with dropped privileges.
* Use geteuid() rather than getuid() in several places to check whether we
need to drop or regain privileges.
* Add a user-level hook to create .desktop files in
~/.local/share/applications/. (This should probably move to some other
package at some point.)
-- Colin Watson Tue, 23 Jul 2013 19:36:44 +0100
click (0.2.1) saucy; urgency=low
* Fix "click help list".
* Remove HOME from environment when running dpkg, so that it doesn't try
to read .dpkg.cfg from it (which may fail when dropping privileges from
root and produce a warning message).
* Refuse to install .click directories at any level, not just the top.
* Add "click pkgdir" command to print the top-level package directory from
either a package name or a path within a package; based on work by Ted
Gould, for which thanks.
-- Colin Watson Mon, 22 Jul 2013 09:36:19 +0100
click (0.2.0) saucy; urgency=low
* Revise and implement hooks specification. While many things have
changed, the previous version was never fully implemented. However, I
have incremented the default Click-Version value to 0.2 to reflect the
design work.
- The "hooks" manifest key now contains a dictionary keyed by
application name. This means manifest authors have to repeat
themselves much less in common cases.
- There is now an explicit distinction between system-level and
user-level hooks. System-level hooks may reflect multiple concurrent
versions, and require a user name.
- Hook symlinks are now named by a combination of the Click package
name, the application name, and the Click package version.
- The syntax of Pattern has changed to make it easier to extend with new
substitutions.
* Reject '_' and '/' characters in all of package name, application name,
and package version.
-- Colin Watson Fri, 19 Jul 2013 13:11:31 +0100
click (0.1.7) saucy; urgency=low
* Correct name of .pkla file (now
/var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.click.pkla).
-- Colin Watson Thu, 18 Jul 2013 17:00:46 +0100
click (0.1.6) saucy; urgency=low
* Move defaults for frameworks and hooks directories to click.paths.
* Install /var/lib/polkit-1/localauthority/10-vendor.d/10-click.pkla to
allow the phablet user to install Click packages without being known to
logind, as a temporary workaround.
-- Colin Watson Thu, 18 Jul 2013 16:55:08 +0100
click (0.1.5) saucy; urgency=low
* Fix infinite recursion in ClickUser.click_pw.
* When all the files requested for installation are Click packages,
override org.freedesktop.packagekit.package-install* PolicyKit actions
to com.ubuntu.click.package-install, defined with a more open default
policy. (This requires some backports to PackageKit, not in the archive
yet.)
-- Colin Watson Wed, 17 Jul 2013 15:46:48 +0100
click (0.1.4) saucy; urgency=low
* Add support for per-user package registration.
* Move install log file from $root/.click.log to $root/.click/log.
* Add an autotools-based build system for our C components.
* Initial version of a PackageKit plugin, in a new packagekit-plugin-click
package; still experimental.
* Restore compatibility with Python 3.2 (LP: #1200670).
* Adjust tests to pass with mock 0.7.2 (as in Ubuntu 12.04 LTS).
* Make the default root directory a configure option.
* Add a simple "click list" command.
-- Colin Watson Mon, 15 Jul 2013 15:55:48 +0100
click (0.1.3) saucy; urgency=low
* Rename to click, per Mark Shuttleworth.
-- Colin Watson Thu, 27 Jun 2013 15:57:25 +0100
click-package (0.1.2) saucy; urgency=low
* Disable dh_sphinxdoc for builds that are not building
architecture-independent packages.
-- Colin Watson Tue, 25 Jun 2013 18:57:47 +0100
click-package (0.1.1) saucy; urgency=low
* clickpackage.tests.test_install: Set NO_PKG_MANGLE when building fake
packages, to avoid having Maintainer fields mangled on the buildds.
-- Colin Watson Tue, 25 Jun 2013 17:32:00 +0100
click-package (0.1) saucy; urgency=low
* Initial release.
-- Colin Watson Mon, 24 Jun 2013 14:43:21 +0100
click-0.4.21.1ubuntu0.2/debian/click.postinst 0000664 0000000 0000000 00000000524 12320742124 015507 0 ustar #! /bin/sh
set -e
if [ "$1" = configure ]; then
if ! getent passwd clickpkg >/dev/null; then
adduser --quiet --system --home /nonexistent --no-create-home \
--disabled-password --shell /bin/false --group \
clickpkg
fi
mkdir -p -m 755 /opt/click.ubuntu.com
chown clickpkg:clickpkg /opt/click.ubuntu.com
fi
#DEBHELPER#
exit 0
click-0.4.21.1ubuntu0.2/debian/click.manpages 0000664 0000000 0000000 00000000027 12320742124 015415 0 ustar doc/_build/man/click.1
click-0.4.21.1ubuntu0.2/debian/packagekit-plugin-click.install 0000664 0000000 0000000 00000000151 12320742124 020663 0 ustar usr/lib/*/packagekit-plugins/*.so
usr/share/polkit-1/actions
var/lib/polkit-1/localauthority/10-vendor.d
click-0.4.21.1ubuntu0.2/debian/click.sharedmimeinfo 0000664 0000000 0000000 00000001131 12320742124 016611 0 ustar
Click package
click-0.4.21.1ubuntu0.2/debian/click.install 0000664 0000000 0000000 00000000137 12320742124 015272 0 ustar etc/click
etc/init
lib/systemd
usr/bin/click
usr/lib/*/click
usr/lib/systemd
usr/share/upstart
click-0.4.21.1ubuntu0.2/debian/source/ 0000775 0000000 0000000 00000000000 12320742335 014120 5 ustar click-0.4.21.1ubuntu0.2/debian/source/format 0000664 0000000 0000000 00000000015 12320742124 015323 0 ustar 3.0 (native)
click-0.4.21.1ubuntu0.2/debian/rules 0000775 0000000 0000000 00000003233 12320742124 013675 0 ustar #! /usr/bin/make -f
PACKAGEKIT := $(shell debian/packagekit-check)
ifeq ($(PACKAGEKIT),yes)
EXTRA_DH_OPTIONS :=
else
EXTRA_DH_OPTIONS := -Npackagekit-plugin-click
endif
# The advantages of -Wl,-Bsymbolic-functions are of limited value here, and
# they mean that the test suite's LD_PRELOAD tricks don't work properly.
export DEB_LDFLAGS_MAINT_STRIP := -Wl,-Bsymbolic-functions
%:
dh $@ --with autoreconf,gir,python3,sphinxdoc \
--buildsystem autoconf $(EXTRA_DH_OPTIONS)
PY3REQUESTED := $(shell py3versions -r)
PY3DEFAULT := $(shell py3versions -d)
# Run setup.py with the default python3 last so that the scripts use
# #!/usr/bin/python3 and not #!/usr/bin/python3.X.
PY3 := $(filter-out $(PY3DEFAULT),$(PY3REQUESTED)) python3
confflags := \
--with-python-interpreters='$(PY3)' \
--with-systemdsystemunitdir=/lib/systemd/system \
--with-systemduserunitdir=/usr/lib/systemd/user
ifeq ($(PACKAGEKIT),no)
confflags += --disable-packagekit
endif
override_dh_autoreconf:
dh_autoreconf -- ./autogen.sh
override_dh_auto_configure:
dh_auto_configure -- $(confflags)
override_dh_auto_build:
dh_auto_build
$(MAKE) -C doc html man
override_dh_auto_clean:
dh_auto_clean
$(MAKE) -C doc clean
PYTHON_INSTALL_FLAGS := \
--force --root=$(CURDIR)/debian/tmp \
--no-compile -O0 --install-layout=deb
override_dh_auto_install:
dh_auto_install -- PYTHON_INSTALL_FLAGS='$(PYTHON_INSTALL_FLAGS)'
rm -f debian/tmp/usr/lib/*/click/*.la
override_dh_install:
dh_install -X .la --fail-missing
DH_AUTOSCRIPTDIR=debhelper debhelper/dh_click --name=click-desktop
# Sphinx documentation is architecture-independent.
override_dh_sphinxdoc-arch:
override_dh_makeshlibs:
dh_makeshlibs -- -c4
click-0.4.21.1ubuntu0.2/debian/click.click-desktop.click-hook 0000664 0000000 0000000 00000000274 12320742124 020404 0 ustar User-Level: yes
Pattern: ${home}/.local/share/click/hooks/desktop/${id}.desktop
Exec: [ -e /usr/share/click/hooks/upstart-app-launch-desktop.hook ] || click desktophook
Hook-Name: desktop
click-0.4.21.1ubuntu0.2/debian/gir1.2-click-0.4.install 0000664 0000000 0000000 00000000043 12320742124 016565 0 ustar usr/lib/*/girepository-1.0 usr/lib
click-0.4.21.1ubuntu0.2/debian/click.postrm 0000664 0000000 0000000 00000000173 12320742124 015150 0 ustar #! /bin/sh
set -e
if [ "$1" = purge ]; then
deluser --quiet --system clickpkg >/dev/null || true
fi
#DEBHELPER#
exit 0
click-0.4.21.1ubuntu0.2/debian/compat 0000664 0000000 0000000 00000000002 12320742124 014012 0 ustar 9
click-0.4.21.1ubuntu0.2/debian/libclick-0.4-0.install 0000664 0000000 0000000 00000000031 12320742124 016406 0 ustar usr/lib/*/libclick*.so.*
click-0.4.21.1ubuntu0.2/debian/python3-click.install 0000664 0000000 0000000 00000000020 12320742124 016663 0 ustar usr/lib/python3
click-0.4.21.1ubuntu0.2/debian/click-dev.install 0000664 0000000 0000000 00000000145 12320742124 016045 0 ustar etc/schroot/click
usr/bin/dh_click
usr/share/debhelper
usr/share/man/man1/dh_click.1
usr/share/perl5
click-0.4.21.1ubuntu0.2/get-version 0000775 0000000 0000000 00000000127 12320742124 013562 0 ustar #! /bin/sh
perl -e '$_ = <>; chomp; s/.*\((.*)\).*/\1/; print; exit'