./Listaller-0.5.8/0000775000175000017500000000000012176743564014043 5ustar matthiasmatthias./Listaller-0.5.8/tools/0000775000175000017500000000000012176743563015202 5ustar matthiasmatthias./Listaller-0.5.8/tools/reporting.vala0000664000175000017500000001020412176743563020055 0ustar matthiasmatthias/* reporting.vala * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU Lesser General Public License Version 3 * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ using GLib; namespace Listaller { /** * Type of a message written to a Listaller Report */ public enum ReportMessageType { INFO, SUGGESTION, WARNING, CRITICAL, ERROR; internal string to_string() { switch (this) { case INFO: return ("I"); case SUGGESTION: return ("S"); case WARNING: return ("W"); case CRITICAL: return ("C"); case ERROR: return ("E"); default: return ("X"); } } } /** * Report generator */ public class Report : Object { private static Report instance; private Array lines; // probably use a HashSet later... private bool error_received; private bool print_fatal; public Report () { lines = new Array (); error_received = false; print_fatal = false; // NOTE: Changed to FALSE by default now debug ("New Listaller Report handler created."); } public bool contains_error () { return error_received; } public bool is_empty () { return lines.length == 0; } public void add_message (ReportMessageType mtype, string message) { lock (lines) { string prefix = " %s: ".printf (mtype.to_string ()); lines.append_val ("%s%s".printf (prefix, message)); } // Because errors and warnings might be very important, we also show a message directly if (mtype == ReportMessageType.ERROR) { lock (error_received) error_received = true; // LEVEL_ERROR would abort the program, usually. Because errors which were // written to the report aren't that crtical for program execution, we // just use the CRITICAL level here if (print_fatal) log ("Report", LogLevelFlags.LEVEL_CRITICAL, message); } if (!print_fatal) return; if (mtype == ReportMessageType.CRITICAL) log ("Report", LogLevelFlags.LEVEL_CRITICAL, message); if (mtype == ReportMessageType.WARNING) log ("Report", LogLevelFlags.LEVEL_WARNING, message); } public void add_info (string message) { add_message (ReportMessageType.INFO, message); } public void add_warning (string message) { add_message (ReportMessageType.WARNING, message); } public void add_error (string message) { add_message (ReportMessageType.ERROR, message); } public string to_string () { string str = ""; lock (lines) { for (uint i=0; i < lines.length; i++) { str += "%s\n".printf (lines.index (i)); } } return str; } public void clear () { lines.set_size (0); } public void set_print_fatal (bool print_fatal_msg) { print_fatal = print_fatal_msg; debug ("Changed printing fatal report messages: %i", (int) print_fatal); } public static Report get_instance () { if (Report.instance == null) Report.instance = new Report (); return Report.instance; } public static void delete () { Report.instance = null; } public static void log_message (ReportMessageType mtype, string message) { get_instance ().add_message (mtype, message); } public static void log_info (string message) { get_instance ().add_info (message); } public static void log_warning (string message) { get_instance ().add_warning (message); } public static void log_error (string message) { get_instance ().add_error (message); } public static void clear_current () { get_instance ().clear (); } public static void set_print_fatal_msg (bool print_fatal_msg) { get_instance ().set_print_fatal (print_fatal_msg); } } } // End of namespace: Listaller ./Listaller-0.5.8/tools/lipkgen/0000775000175000017500000000000012176743563016633 5ustar matthiasmatthias./Listaller-0.5.8/tools/lipkgen/ipkbuilder.vala0000664000175000017500000004345112176743563021641 0ustar matthiasmatthias/* ipkbuilder.vala -- Class which can assemble IPK packages * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; using Archive; using Listaller; using Listaller.Utils; namespace Listaller.IPK { private errordomain BuildError { INTERNAL_ERROR, FILE_NOT_FOUND; } private class Builder : Object { private string tmpdir; private string srcdir; private string outname; private string outdir; private string ipkVersion; private bool failed = false; private IPK.ControlDir ipkCDir; private ArrayList ctrlfiles; private ArrayList datapkgs; private AppItem appInfo; public signal void error_message (string details); public signal void message (MessageItem message); public string output_dir { get { return outdir; } set { outdir = value; } } public bool sign_package { get; set; } public Builder (string input_dir) { srcdir = input_dir; Listaller.Config conf = new Listaller.Config (); tmpdir = conf.get_unique_tmp_dir ("ipkbuild"); ipkCDir = new IPK.ControlDir (); outdir = ""; outname = ""; ctrlfiles = new ArrayList (); datapkgs = new ArrayList (); ipkVersion = "1.2"; } ~Builder () { // Remove workspace delete_dir_recursive (tmpdir); } private void emit_warning (string msg) { // Construct warning message MessageItem item = new MessageItem(MessageEnum.WARNING); item.details = msg; message (item); warning (msg); } private void emit_message (string msg) { // Construct info message MessageItem item = new MessageItem(MessageEnum.INFO); item.details = msg; message (item); } private void emit_error (string details) { error_message (details); failed = true; } private bool write_ipk_file_data (ref ArrayList src, string rdir, string arch = "") { const int buffsize = 8192; char buff[8192]; bool ret = true; int ret_v = 0; if ((arch == null) || (arch == "")) { arch = "all"; } Write a = new Write (); // Define archive format a.set_compression_xz (); a.set_format_pax_restricted (); // Open output create_dir_structure (Path.build_filename (tmpdir, "data", null)); string apath = Path.build_filename (tmpdir, "data", "data-" + arch + ".tar.xz", null); a.open_filename (apath); VarSolver vs = new VarSolver (appInfo.idname); Entry entry = new Entry (); foreach (IPK.FileEntry fe in src) { // Prepare entry.clear (); // Grab filepath string fname_orig; string fname_dest; // Check if we need to change the name of this file if (fe.fname.index_of (" ") > 0) { int i = 0; int j = 0; var s = fe.fname; if (s.has_prefix ("'")) { i = 1; j = s.last_index_of ("'") - 1; } else { j = s.last_index_of (" "); } fname_orig = s.substring (i, j); if ((j + 2) != s.length) fname_dest = s.substring (j + i + 1); else fname_dest = Path.get_basename (fname_orig); } else { fname_orig = fe.fname; fname_dest = Path.get_basename (fname_orig); } if (fname_dest.index_of ("/") > 0) { emit_error (_("Malformed line in file listing: %s").printf (fe.fname)); return false; } if (!Path.is_absolute (fname_orig)) { fname_orig = Path.build_filename (rdir, fname_orig, null); } if (fname_dest == "") error ("Destination filename was empty for file '%s'! This should never happen and might be a bug in Listaller!", fname_orig); fe.fname = Path.get_basename (fname_dest); fe.hash = compute_checksum_for_file (fname_orig); // Fetch file details Posix.Stat st; ret_v = Posix.stat (fname_orig, out st); if (ret_v != 0) { debug ("File %s not found.", fname_orig); ret = false; break; } entry.set_pathname (vs.substitute_vars_id (fe.get_full_filename ())); entry.copy_stat (st); a.write_header (entry); int fd = Posix.open (fname_orig, Posix.O_RDONLY); ssize_t len = Posix.read (fd, buff, buffsize); while (len > 0) { a.write_data (buff, len); len = Posix.read (fd, buff, buffsize); } Posix.close (fd); } a.close (); // Add this payload package to data pkg list datapkgs.add (apath); return ret; } private bool build_ipk_files_structure (IPK.FileList flist, string arch = "") { bool ret = false; if ((arch == null) || (arch == "")) { arch = "all"; } // Set the correct install dir string rootdir = ipkCDir.get_files_rootdir (); if (rootdir == "%INSTDIR%") { flist.rootdir = Path.build_filename (srcdir, "inst_target", null); } else if (!Path.is_absolute (rootdir)) flist.rootdir = real_path (Path.build_filename (srcdir, rootdir, null)); /* Just a shortcut to the root dir. It is important that our FileList * knows the right file-root path to resolve filenames. */ rootdir = flist.rootdir; ArrayList fileslst = flist.get_files_list_expanded (); ret = write_ipk_file_data (ref fileslst, rootdir, arch); if (!ret) { error_message ("Unable to write IPK payload - do all files exist?"); return false; } flist.set_files_list (fileslst); string tmp = Path.build_filename (tmpdir, "control", "files-" + arch + ".list", null); ret = flist.save (tmp); if (!ret) { error_message ("Could not compile IPK file list!"); return false; } if (flist.get_files_list ().size <= 0) Report.log_error (_("There are no files in file-list for architecture '%s'!").printf (arch)); // Add to control file list, if file was created successfully ctrlfiles.add (tmp); return ret; } private bool write_ipk_control_data () { const int buffsize = 8192; char buff[8192]; bool ret = true; Write a = new Write (); // Define archive format a.set_compression_xz (); a.set_format_pax_restricted (); // Open output string apath = Path.build_filename (tmpdir, "control", "control.tar.xz", null); a.open_filename (apath); Entry entry = new Entry (); foreach (string fname in ctrlfiles) { // Prepare entry.clear (); // Fetch file details Posix.Stat st; Posix.stat (fname, out st); if (st.st_size <= 0) { debug ("File %s not found.", fname); ret = false; break; } string pathname = Path.get_basename (fname); // simple hack, to always have all dependencies stored in a dependencies/ subdirectory if ((fname.has_suffix (".module")) && (fname.index_of ("dependencies") >= 0)) pathname = Path.build_filename ("dependencies", pathname, null); entry.set_pathname (pathname); entry.copy_stat (st); a.write_header (entry); int fd = Posix.open (fname, Posix.O_RDONLY); ssize_t len = Posix.read (fd, buff, buffsize); while (len > 0) { a.write_data (buff, len); len = Posix.read (fd, buff, buffsize); } Posix.close (fd); } a.close (); return ret; } private string delete_chars (string str, string[] invalid_chars) { var res = str; foreach (string s in invalid_chars) res = res.replace (s, ""); return res; } private bool finalize_ipk (IPK.Control ictrl) { const int buffsize = 8192; char buff[8192]; bool ret = true; if (Report.get_instance ().contains_error ()) { debug ("Report contains error(s), exiting!"); Report.log_info (_("Your package has errors and was therefore not generated.")); return false; } // Set output file name if (outname == "") { string ipkname; // Delete invalid chars from filename string simple_appname = delete_chars (appInfo.full_name, {"(", ")", "[", "]", "#", " "}); // we do the arch split to prevent invalid archs from being added (this is much more failsafe) string[] archs = ictrl.get_architectures ().split (","); string archs_str = ""; foreach (string s in archs) { if (s == null) continue; s = s.strip (); if (s != "") if (archs_str != "") archs_str = "%s+%s".printf (archs_str, s); else archs_str = s; } ipkname = "%s-%s_%s.ipk".printf (simple_appname, appInfo.version.down (), archs_str); if (outdir == "") outdir = real_path (Path.build_filename (srcdir, "..", "..", null)); outname = Path.build_filename (outdir, ipkname, null); } if (FileUtils.test (outname, FileTest.EXISTS)) { error_message ("Cannot override %s! Delete this package or run lipkgen with '-o' parameter!".printf (outname)); return false; } Write a = new Write (); // Define archive format a.set_compression_none (); a.set_format_pax_restricted (); // Open output a.open_filename (outname); Entry entry = new Entry (); // Add all data tarballs foreach (string fname in datapkgs) { // Prepare entry.clear (); // Fetch file details Posix.Stat st; Posix.stat (fname, out st); if (st.st_size <= 0) { warning ("File %s not found.", fname); error_message ("Internal error: Unable to find IPK payload archive!"); ret = false; break; } entry.set_pathname (Path.get_basename (fname)); entry.copy_stat (st); a.write_header (entry); int fd = Posix.open (fname, Posix.O_RDONLY); ssize_t len = Posix.read (fd, buff, buffsize); while (len > 0) { a.write_data (buff, len); len = Posix.read (fd, buff, buffsize); } Posix.close (fd); } // Add control info string ctrlfile = Path.build_filename (tmpdir, "control", "control.tar.xz", null); entry.clear (); // Fetch file details Posix.Stat st; Posix.stat (ctrlfile, out st); if (st.st_size <= 0) { warning ("File %s not found.", ctrlfile); ret = false; error_message ("Internal error: IPK control info tarball was not found!"); return false; } entry.set_pathname (Path.get_basename (ctrlfile)); entry.copy_stat (st); a.write_header (entry); int fd = Posix.open (ctrlfile, Posix.O_RDONLY); ssize_t len = Posix.read (fd, buff, buffsize); while (len > 0) { a.write_data (buff, len); len = Posix.read (fd, buff, buffsize); } Posix.close (fd); // Sign the IPK package if (sign_package) { GPGSign gsig = new GPGSign (); string signature; // TODO: Make this work for more data packages gsig.sign_package (ctrlfile, out signature); string sigfile = Path.build_filename (tmpdir, "_signature", null); try { var file = File.new_for_path (sigfile); { var file_stream = file.create (FileCreateFlags.NONE); var data_stream = new DataOutputStream (file_stream); data_stream.put_string (signature); } } catch (Error e) { Report.log_error (_("Unable to write signature file! Message: %s").printf (e.message)); return false; } // Now add signature to IPK tarball entry.clear (); // Fetch file details Posix.stat (sigfile, out st); if (st.st_size <= 0) { ret = false; error_message ("Internal error: IPK signature was not found!"); return false; } entry.set_pathname (Path.get_basename (sigfile)); entry.copy_stat (st); a.write_header (entry); fd = Posix.open (sigfile, Posix.O_RDONLY); len = Posix.read (fd, buff, buffsize); while (len > 0) { a.write_data (buff, len); len = Posix.read (fd, buff, buffsize); } Posix.close (fd); } a.close (); return ret; } public void set_output_ipk (string fname) { outname = fname; } public bool initialize () { pkbuild_action ("Initializing..."); // Check for valid installer source dirs srcdir = find_ipk_source_dir (srcdir); if (srcdir == null) { // IPK builder was unable to find IPK source scripts emit_error (_("Could not find IPK source files!")); return false; } return true; } private string load_text_from_element (string in) { if (in.has_prefix ("file:")) { var file = File.new_for_path (Path.build_filename (srcdir, in.substring (5), null)); if (!file.query_exists ()) { error_message ("File '%s' doesn't exist.".printf (file.get_path ())); return ""; } string text = ""; try { var dis = new DataInputStream (file.read ()); string line; // Read file and build description while ((line = dis.read_line (null)) != null) { text += "%s\n".printf (line); } } catch (Error e) { error_message ("%s".printf (e.message)); return ""; } return text; } else { return in; } } public bool build_ipk () { bool ret = false; pkbuild_action ("Building IPK control file."); IPK.PackControl ictrl = new IPK.PackControl (); // Load definitions try { ret = ipkCDir.open_dir (srcdir); } catch (Error e) { Report.log_error (_("Unable to build package: %s").printf (e.message)); return false; } if (!ret) return false; // Set IPK package version ipkVersion = ipkCDir.get_ipk_version (); HashSet? flistFiles = Utils.find_files_matching (srcdir, "files-*.list", false); if (flistFiles.size == 0) { error_message ("Could not find file listings in IPK source dir!"); return false; } Report.set_print_fatal_msg (false); create_dir_structure (Path.build_filename (tmpdir, "control", null)); create_dir_structure (Path.build_filename (tmpdir, "data", null)); // Get application-id from IPK source control XML file appInfo = ipkCDir.get_application (); debug ("Building package for %s, version: %s (id: %s)", appInfo.full_name, appInfo.version, appInfo.idname); // Build IPK control directory ictrl.create_new (ipkCDir.get_doap_data (), ipkVersion); // check if we have a failure already if (failed) return false; // Set/refresh/check install-mode information ictrl.set_install_modes (ipkCDir.get_install_modes ()); // Set package setting information // Set information about replaced native packages ictrl.set_replaces (ipkCDir.get_replaces ()); // Set other values ictrl.user_accept_license = ipkCDir.user_accept_license; // Set license... ictrl.set_license_text (ipkCDir.get_application ().license.text); pkbuild_action ("Generating package payload..."); IPK.FileList flist = new IPK.FileList (false); string archs = ""; foreach (string flistFile in flistFiles) { debug ("Processing file-list: %s", flistFile); if (!flistFile.has_suffix (".list")) { debug ("Skipped file-list: %s", flistFile); continue; } flist.open (flistFile); string arch = Path.get_basename (flistFile); arch = arch.substring (6, arch.last_index_of (".") - 6); if (arch == "current") arch = arch_generic (system_machine ()); if (arch != "all") if (str_is_empty (archs)) archs = arch; else archs = "%s, %s".printf (archs, arch); pkbuild_action ("Creating payload for architecture: %s".printf (arch)); // Add comment to IPK file-list flist.comment = "IPK file-listing for architecture %s".printf (arch); ret = build_ipk_files_structure (flist, arch); if (!ret) return false; } // No arch set, so all files have to be arch-independent / are one-arch only if (archs == "") archs = "all"; // We only set architectures we have install-files for ictrl.set_architectures (archs); pkbuild_action ("Processing dependencies..."); // add explicit arch-specific dependencies string deps_arch = ""; string[] archs_list = archs.split (","); foreach (string arch in archs_list) { arch = arch.strip (); if (!str_is_empty (deps_arch)) deps_arch += ","; string s = ipkCDir.get_dependencies (arch, true); deps_arch += s; ictrl.set_dependencies (s, arch); } string extra_mod_dir = Path.build_filename (srcdir, "dependencies", null); // process generic dependencies string deps_all = ipkCDir.get_dependencies ("all", true); if (ipkCDir.auto_dependency_search ()) { DepFind df = new DepFind (real_path (Path.build_filename (srcdir, "..", null)), extra_mod_dir); string deps = "%s, %s".printf (deps_all, deps_arch); var d_list = df.get_auto_dependencies (deps); if (d_list != "") if (deps_all == "") deps_all = d_list; else deps_all = "%s, %s".printf (deps_all, d_list); } ictrl.set_dependencies (deps_all, ""); if (failed) return false; pkbuild_action ("Finalizing package..."); // Finalize control data string tmp = Path.build_filename (tmpdir, "control", null); ictrl.save_to_dir (tmp); // Get the files this control data consists of string[] files = ictrl.get_files (); for (int i = 0; files[i] != null; i++) { ctrlfiles.add (Path.build_filename (tmp, files[i], null)); } // store dependency data, if we need it string pkg_depfiles_dir = Path.build_filename (tmp, "dependencies", null); create_dir_structure (pkg_depfiles_dir); var cfactory = new Dep.ComponentFactory (); // intialize factory, loading optional component-items for better dependency-resolving cfactory.initialize (true); HashSet? mod_info_files = find_files_matching (extra_mod_dir, "*.module"); if (mod_info_files != null) { foreach (string fname in mod_info_files) { var cmod = new Dep.Module.blank (); bool l_ret = cmod.load_from_file (fname); // installed system modules take precendence before any additional modules if (cmod.idname in cfactory.registered_modules) continue; if (l_ret) { string pkg_depfile = Path.build_filename (pkg_depfiles_dir, Path.get_basename (fname)); copy_file (fname, pkg_depfile); ctrlfiles.add (pkg_depfile); } else { warning ("Unable to load data for module: %s", fname); } } } ret = write_ipk_control_data (); if (!ret) return false; ret = finalize_ipk (ictrl); pkbuild_action ("Done."); return ret; } } } // End of namespace ./Listaller-0.5.8/tools/lipkgen/lpkgutils.vala0000664000175000017500000000336312176743563021523 0ustar matthiasmatthias/* lpkgutils.vala -- Helper routines for LiPkgen * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ namespace Listaller.IPK { private string? validate_srcdir (string dir) { // Check if IPK sources are present string tmp = dir; if (FileUtils.test (tmp, FileTest.IS_DIR)) { if (FileUtils.test (Path.build_filename (tmp, "pkoptions", null), FileTest.EXISTS)) { // Set current source dir and exit return tmp; } } return null; } private string? find_ipk_source_dir (string origdir) { string tmp = validate_srcdir (Path.build_filename (origdir, "ipkinstall", null)); if (tmp == null) { tmp = validate_srcdir (Path.build_filename (origdir, "install", null)); if (tmp == null) { tmp = validate_srcdir (Path.build_filename (origdir, "data", "install", null)); } } return tmp; } } // End of namespace private static void pkbuild_action (string msg, bool header = false) { string prefix = "~"; if (header) prefix = "=>"; else prefix = " ->"; stdout.printf (" " + prefix + " " + msg + "\n"); } ./Listaller-0.5.8/tools/lipkgen/lipkgen.vala0000664000175000017500000001117312176743563021134 0ustar matthiasmatthias/* lipkgen.vala -- Main file for lipkgen * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; using Listaller.Extra; public class LipkgenTool : Object { // Cmd options private static string o_src_dir = ""; private static string o_output_dir = ""; private static bool o_show_version = false; private static bool o_build_mode = false; private static bool o_do_autocompile = false; private static bool o_sign_pkg = false; private static bool o_verbose_mode = false; public int exit_code { get; set; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "build", 'b', 0, OptionArg.NONE, ref o_build_mode, N_("Build IPK package"), null }, { "sourcedir", 's', 0, OptionArg.FILENAME, ref o_src_dir, N_("Path to Listaller package source directory"), N_("DIRECTORY") }, { "outdir", 'o', 0, OptionArg.FILENAME, ref o_output_dir, N_("IPK package output directory"), N_("DIRECTORY") }, { "sign", 0, 0, OptionArg.NONE, ref o_sign_pkg, N_("GPG-Sign the resulting package"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { null } }; public LipkgenTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- build IPK setup packages."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } } private void on_error (string details) { stderr.printf (_("error: %s"), details + "\n"); exit_code = 6; } private void on_message (MessageItem mitem) { string prefix = "?"; switch (mitem.mtype) { case MessageEnum.INFO: prefix = "I"; break; case MessageEnum.WARNING: prefix = "W"; break; case MessageEnum.CRITICAL: prefix = "C"; break; default: prefix = "!?"; break; } stdout.printf (" " + prefix + ": %s", mitem.details + "\n"); } public void run () { if (exit_code > 0) return; bool done = false; if (o_show_version) { stdout.printf ("lipkgen tool, part of Listaller version: %s\n", Listaller.get_full_version_info_str ()); return; } // Take directory from options, otherwise use current dir string srcdir = o_src_dir; if (srcdir == "") srcdir = Environment.get_current_dir (); if (o_build_mode) { // Prepare the application AppPrepare prep = new AppPrepare (srcdir); prep.error_message.connect (on_error); if (!prep.initialize ()) { exit_code = 3; return; } pkbuild_action ("Compiling/preparing sources", true); exit_code = prep.run_compile (); if (exit_code != 0) return; // Build the IPK package pkbuild_action ("Building package", true); IPK.Builder builder = new IPK.Builder (srcdir); builder.error_message.connect (on_error); builder.message.connect (on_message); builder.output_dir = o_output_dir; builder.sign_package = o_sign_pkg; if (!builder.initialize ()) { exit_code = 3; return; } if (!builder.build_ipk ()) { exit_code = 4; return; } } } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new LipkgenTool (args); set_clitool_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("lipkgen"); // Run the application main.run (); // Display final report Report report = Report.get_instance (); if (!report.is_empty ()) stdout.printf ("\nLipkgen Final Report:\n%s\n", report.to_string ()); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/lipkgen/CMakeLists.txt0000664000175000017500000000156412176743563021401 0ustar matthiasmatthias# CMakeLists for Listaller package builder tool project(listaller-lipkgen) find_package(Vala REQUIRED) include("${VALA_USE_FILE}") set(LIPKGEN_SOURCES lipkgen.vala lpkgutils.vala ${CMAKE_SOURCE_DIR}/tools/reporting.vala prepare.vala gpgsign.vala depfind.vala ipkbuilder.vala ) # Add log domain add_definitions("-DG_LOG_DOMAIN=\"Builder\"") # Listaller build tool vala_add_executable (lipkgen ${LIPKGEN_SOURCES} PACKAGES ${LISTALLER_BASE_VALA_DEPS} listaller_internal packagekit-glib2 VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(lipkgen_precompile listaller-glib) target_link_libraries(lipkgen ${M_LIB} ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ${LibArchive_LIBRARIES} ${LIBXML2_LIBRARIES} ${GPGME_VANILLA_LIBRARIES} ${REDLAND_LIBRARIES} listaller-glib ) install(TARGETS lipkgen DESTINATION bin) ./Listaller-0.5.8/tools/lipkgen/depfind.vala0000664000175000017500000000512512176743563021114 0ustar matthiasmatthias/* depfind.vala - Search & group dependencies using the "depscan" tool * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; using Listaller; namespace Listaller { private class DepFind : Object { private string input_dir; private string module_dir; public DepFind (string indir, string mod_dir) { input_dir = indir; module_dir = mod_dir; } public ArrayList? get_dependency_list () { string output; string[] cmd = { "depscan", "-rc", "--include-modules=%s".printf (module_dir), "." }; try { Process.spawn_sync (input_dir, cmd, null, SpawnFlags.SEARCH_PATH, null, out output, null, null); } catch (Error e) { error ("Unable to scan dependencies: %s", e.message); return null; } output = output.escape ("\n").replace ("\\r", ""); string[] deps = output.split ("\n"); ArrayList deplist = new ArrayList (); for (uint i = 0; i < deps.length; i++) if ((deps[i] != null) && (deps[i] != "")) { deplist.add (deps[i]); } return deplist; } public string get_auto_dependencies (string? defined_deps = null) { pkbuild_action ("Scanning for dependencies..."); string deplist = ""; ArrayList dependency_data = get_dependency_list (); string unknown_deps = ""; bool have_unknown_deps = false; foreach (string s in dependency_data) { if (s.has_prefix ("----")) { have_unknown_deps = true; continue; } if (have_unknown_deps) { unknown_deps = "%s%s\n".printf (unknown_deps, s); continue; } // we don't add dependencies which were already defined by the user if (defined_deps.index_of (s) >= 0) continue; if (deplist == "") deplist = s; else deplist = "%s, %s".printf (deplist, s); } if (unknown_deps != "") { warning ("The packaged application has unknown dependencies: %s", unknown_deps); } return deplist; } } } // End of namespace ./Listaller-0.5.8/tools/lipkgen/prepare.vala0000664000175000017500000000463612176743563021147 0ustar matthiasmatthias/* prepare.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; namespace Listaller.Extra { private class AppPrepare : Object { private string srcdir; private string indir; private string buildfile; private bool failed = false; public signal void error_message (string details); public AppPrepare (string input_dir) { indir = input_dir; srcdir = indir; buildfile = Path.build_filename (srcdir, "build.rules", null); } private void emit_error (string details) { error_message (details); failed = true; } public bool initialize () { // Check for valid installer source dirs srcdir = IPK.find_ipk_source_dir (srcdir); if (srcdir == null) { //: IPk builder was unable to find IPK source scripts emit_error (_("Could not find IPK source files!")); return false; } return true; } protected int run_target (string tname) { int exit_status = 0; try { string cmd = "make -f %s %s".printf (buildfile, tname); Process.spawn_command_line_sync (cmd, null, null, out exit_status); } catch (SpawnError e) { emit_error (e.message); exit_status = 8; } return exit_status; } protected bool has_target (string tname) { if (!FileUtils.test (buildfile, FileTest.EXISTS)) return false; string tmp = Utils.load_file_to_string (buildfile); string[] content = tmp.split("\n"); foreach (string line in content) { if (line.has_prefix (tname + ":")) return true; } return false; } public int run_compile () { string lastdir = Environment.get_current_dir (); int code = 0; if (has_target ("binary")) code = run_target ("binary"); Environment.set_current_dir (lastdir); return code; } } } // End of namespace ./Listaller-0.5.8/tools/lipkgen/gpgsign.vala0000664000175000017500000001100212176743563021130 0ustar matthiasmatthias/* gpgsign.vala - Sign IPK package with a GPK key * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using GPG; using Listaller; using Listaller.GPGEx; namespace Listaller { private class GPGSign : Object { public GPGSign () { init_gpgme (Protocol.OpenPGP); } private bool check_result (SignResult *result, SigMode type) { if (result->invalid_signers != null) { stderr.printf ("Invalid signer found: %s\n", result->invalid_signers.fpr); return false; } if ((result->signatures == null) || (result.signatures->next != null)) { stderr.printf ("Unexpected number of signatures created\n"); return false; } if (result->signatures->type != type) { stderr.printf ("Wrong type of signature created\n"); return false; } /* if (result->signatures->pubkey_algo != PublicKeyAlgorithm.DSA) { stderr.printf ("Wrong pubkey algorithm reported: %i\n", result.signatures->pubkey_algo); return false; } */ if (result->signatures->hash_algo != HashAlgorithm.SHA1) { stderr.printf ("Wrong hash algorithm reported: %i\n", result.signatures->hash_algo); return false; } if (result->signatures->sig_class != 1) { stderr.printf ("Wrong signature class reported: %u\n", result.signatures->sig_class); return false; } message ("Package is signed. Signature fingerprint: %s\n".printf (result->signatures->fpr)); return true; } private static GPGError.ErrorCode simple_passphrase_cb (void* hook, string uid_hint, string passphrase_info, bool prev_was_bad, int fd) { // IMPORTANT: This method of requesting a passwird is very ugly, replace it with something better soon! if (!prev_was_bad) stdout.printf ("Please enter your password:\n"); else stdout.printf ("Okay, and now enter the correct password:"); string? pass = "%s\n".printf (stdin.read_line ()); Posix.write (fd, pass, pass.size ()); return GPGError.ErrorCode.NO_ERROR; } public bool sign_package (string control_fname, out string signature_out) { GPGError.ErrorCode err; bool ret; Context ctx; err = Context.Context (out ctx); ctx.set_protocol (Protocol.OpenPGP); return_if_fail (check_gpg_err (err)); string? agent_info = Environment.get_variable ("GPG_AGENT_INFO"); if (!((agent_info != null) && (agent_info.index_of_char (':') > 0))) ctx.set_passphrase_cb (simple_passphrase_cb); ctx.set_textmode (true); ctx.set_armor (true); Data din; err = Data.create (out din); return_if_fail (check_gpg_err (err)); ret = read_file_to_data (control_fname, ref din); if (!ret) return false; // detached signature. din.seek (0, Posix.SEEK_SET); Data *dout; err = Data.create (out dout); return_if_fail (check_gpg_err (err)); err = ctx.op_sign (din, dout, SigMode.DETACH); // return_if_fail (check_gpg_err (err)); SignResult *result = ctx.op_sign_result (); check_result (result, SigMode.DETACH); signature_out = free_data_to_string (&dout); return true; } public bool _dbg_sign_test () { GPGError.ErrorCode err; Context ctx; err = Context.Context (out ctx); return_if_fail (check_gpg_err (err)); string? agent_info = Environment.get_variable ("GPG_AGENT_INFO"); if (!((agent_info != null) && (agent_info.index_of_char (':') > 0))) ctx.set_passphrase_cb (simple_passphrase_cb); ctx.set_textmode (true); ctx.set_armor (true); Data din; err = Data.create_from_memory (out din, "Hallo Leute\n", 12, false); return_if_fail (check_gpg_err (err)); // detached signature. din.seek (0, Posix.SEEK_SET); Data dout; err = Data.create (out dout); return_if_fail (check_gpg_err (err)); err = ctx.op_sign (din, dout, SigMode.DETACH); return_if_fail (check_gpg_err (err)); SignResult *result = ctx.op_sign_result (); check_result (result, SigMode.DETACH); _dbg_print_data (dout); return false; } } } // End of namespace ./Listaller-0.5.8/tools/lilith/0000775000175000017500000000000012176743563016467 5ustar matthiasmatthias./Listaller-0.5.8/tools/lilith/lilith.vala0000664000175000017500000000503412176743563020623 0ustar matthiasmatthias/* lilith.vala -- Listaller package validator and quality checker * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class LilithTool : Object { // Command-line options private static bool o_show_version = false; private static bool o_verbose_mode; public int exit_code { get; set; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Enable verbose mode"), null }, { null } }; public LilithTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- software package quality checker."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); if (args.length <= 1) { stderr.printf ("No arguments given!\n"); exit_code = 1; return; } try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } } public void run () { bool done = false; if (o_show_version) { stdout.printf ("Lilith, version: %s\n", PkgConfig.VERSION); return; } return; } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); // Set everything up... var main = new LilithTool (args); set_console_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("Lilith"); // Now run the application! main.run (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/lilith/desc/0000775000175000017500000000000012176743563017405 5ustar matthiasmatthias./Listaller-0.5.8/tools/lilith/desc/cruft.desc0000664000175000017500000000516512176743563021377 0ustar matthiasmatthiasCheck-Name: cruft Type: source Info: This looks for cruft in IPK packages !! TODO: This is a copy from Debian, needs to be adjusted for Listaller. !! Also, give credit to the original authors somewhere. Tag: package-contains-cvs-control-dir Severity: pedantic Certainty: certain Info: The upstream source contains a CVS directory. It was most likely included by accident since CVS directories usually don't belong in releases. When packaging a CVS snapshot, export from CVS rather than use a checkout. If an upstream release tarball contains CVS directories, you usually should report this as a bug to upstream. Tag: package-contains-svn-control-dir Severity: pedantic Certainty: certain Info: The upstream source contains an .svn directory. It was most likely included by accident since Subversion version control directories usually don't belong in releases. When packaging a Subversion snapshot, export from subversion rather than checkout. If an upstream release tarball contains .svn directories, this should be reported as a bug to upstream since it can double the size of the tarball to no purpose. Tag: package-contains-bzr-control-dir Severity: pedantic Certainty: certain Info: The upstream source contains a .bzr directory. It was most likely included by accident since bazaar-ng version control directories usually don't belong in releases and may contain the entire repository. When packaging a bzr snapshot, use bzr export to create a clean tree. If an upstream release tarball contains .bzr directories, you should usually report this as a bug upstream. Tag: package-contains-git-control-dir Severity: pedantic Certainty: certain Info: The upstream source contains a .git directory. It was most likely included by accident since git version control directories usually don't belong in releases and may contain a complete copy of the repository. If an upstream release tarball contains .git directories, you should usually report this as a bug upstream. Tag: package-contains-hg-control-dir Severity: pedantic Certainty: certain Info: The package contains a .hg directory. It was most likely included by accident since hg version control directories usually don't belong in releases and may contain a complete copy of the repository. If an upstream release tarball contains .hg directories, you should usually report this as a bug upstream. Tag: package-contains-patch-failure-file Severity: normal Certainty: possible Info: The package contains a file that looks like the files left behind by the patch utility when it cannot completely apply a diff. Normally such files should not be included in the package. ./Listaller-0.5.8/tools/lilith/CMakeLists.txt0000664000175000017500000000227712176743563021237 0ustar matthiasmatthias# CMakeLists for Lilith find_package(GLIB2 REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) set(LILITH_SOURCES lilith.vala lilith-factory.vala lilith-checkrunner.vala ../reporting.vala ) link_libraries(${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIR} ${GIO2_INCLUDE_DIR} ${CMAKE_BINARY_DIR}/src ) # find Lilith checks file (GLOB LILITH_CHECK_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/checks/*.vala") set(LILITH_SOURCES ${LILITH_SOURCES} ${LILITH_CHECK_SOURCES}) # Add log domain add_definitions("-DG_LOG_DOMAIN=\"Lilith\"") vala_add_executable(lilith ${LILITH_SOURCES} PACKAGES ${LISTALLER_BASE_VALA_DEPS} listaller_internal packagekit-glib2 VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(lilith_precompile listaller-glib) add_dependencies(lilith_precompile ${CMAKE_BINARY_DIR}/src/listaller-${LILIBS_VERSION}.vapi) target_link_libraries(lilith ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} listaller-glib ) install(TARGETS lilith DESTINATION bin) ./Listaller-0.5.8/tools/lilith/lilith-factory.vala0000664000175000017500000000224312176743563022267 0ustar matthiasmatthias/* lilith-factory.vala -- Stuff to provide checks easy access to the current package internals * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public interface ICheckInterface : Object { public abstract CheckFactory factory { get; set; } public abstract void run_check (); } public class CheckFactory : Object { private string ipkFName; public CheckFactory (string ipk_fname) { ipkFName = ipk_fname; } } ./Listaller-0.5.8/tools/lilith/checks/0000775000175000017500000000000012176743563017727 5ustar matthiasmatthias./Listaller-0.5.8/tools/lilith/checks/cruft.vala0000664000175000017500000000171312176743563021721 0ustar matthiasmatthias/* Copyright (C) 2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class CruftCheck : Object, ICheckInterface { public CheckFactory factory { get; set; } public void run_check () { warning ("To be implemented!"); } } ./Listaller-0.5.8/tools/lilith/lilith-checkrunner.vala0000664000175000017500000000176612176743563023140 0ustar matthiasmatthias/* lilith-checkrunner.vala -- Run a series of IPK package checks * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class CheckRunner : Object { private string ipkFName; public CheckRunner (string ipk_fname) { ipkFName = ipk_fname; } } ./Listaller-0.5.8/tools/console-progress-bar.vala0000664000175000017500000001060612176743563022120 0ustar matthiasmatthias/* console-progress-bar.vala -- Show a progress bar in text-terminal * * Copyright (C) 2012-2013 Matthias Klumpp * 2009-2012 Richard Hughes * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Posix; public static const int CMD_PROGRESS_BAR_PERCENTAGE_INVALID = 101; public static const int CMD_PROGRESS_BAR_PULSE_TIMEOUT = 40; // milliseconds public class CmdProgressBar : Object { private struct PulseState { uint position; bool move_forward; } private uint size; private uint padding; private uint timer_id; private int percentage; private PulseState pulse_state; public CmdProgressBar () { size = 10; percentage = -1; padding = 0; timer_id = 0; pulse_state = PulseState (); } public bool set_size (uint size) { return_val_if_fail (size < 100, false); this.size = size; return true; } public bool set_padding (uint padding) { return_val_if_fail (padding < 100, false); this.padding = padding; return true; } private bool draw (int pvalue) { // no value yet if (pvalue == -1) return false; uint section; // restore cursor print ("%c8", 0x1B); section = (uint) ((float) size / (float) 100.0 * (float) pvalue); print (" ["); int i; for (i=0; i < section; i++) print ("="); for (i=0; i < size - section; i++) print (" "); print ("] "); if (pvalue >= 0 && pvalue < 100) print ("(%i%%) ", percentage); else print (" "); return true; } private bool pulse_bar () { // restore cursor print ("%c8", 0x1B); if (pulse_state.move_forward) { if (pulse_state.position == size - 1) pulse_state.move_forward = false; else pulse_state.position++; } else if (!pulse_state.move_forward) { if (pulse_state.position == 1) pulse_state.move_forward = true; else pulse_state.position--; } print (" ["); int i; for (i=0; i<(int) pulse_state.position-1; i++) print (" "); print ("=="); for (i=0; i<(int) (size - pulse_state.position - 1); i++) print (" "); print ("] "); if (percentage >= 0 && percentage != CMD_PROGRESS_BAR_PERCENTAGE_INVALID) print ("(%i%%) ", percentage); else print (" "); return true; } private void draw_pulse_bar () { // have we already got zero percent? if (timer_id != 0) return; if (true) { pulse_state.position = 1; pulse_state.move_forward = true; timer_id = Timeout.add (CMD_PROGRESS_BAR_PULSE_TIMEOUT, pulse_bar); // FIXME: Fix Vala bug to make this work again (g_source_set_name_by_id) // MainContext.set_name_by_id (timer_id, "[CmdProgressBar] pulse"); } } public bool set_percentage (int percentage) { return_val_if_fail (percentage <= CMD_PROGRESS_BAR_PERCENTAGE_INVALID, false); // never called start() if (this.percentage == -1) start ("FIXME: need to call progress_bar_start() earlier!"); // check for old percentage if (percentage == this.percentage) { return true; } // save this.percentage = percentage; // either pulse or display if (percentage < 0 || percentage > 100) { draw (0); draw_pulse_bar (); } else { if (timer_id != 0) { Source.remove (timer_id); timer_id = 0; } draw (percentage); } return true; } public bool start (string text) { string text_pad; // finish old value if (percentage != -1) { draw (100); print ("\n"); } // make these all the same length text_pad = cmd_strpad (text, padding); print ("%s", text_pad); // save cursor in new position print ("%c7", 0x1B); // reset if (percentage == -1) percentage = 0; draw (0); return true; } public bool end () { // never drawn if (percentage == -1) return false; percentage = -1; draw (100); print ("\n"); return true; } }./Listaller-0.5.8/tools/CMakeLists.txt0000664000175000017500000000262212176743563017744 0ustar matthiasmatthias# CMakeLists for Listaller Tools Directory find_package(GLIB2 REQUIRED) find_package(Gettext REQUIRED) find_package(SQLite3 REQUIRED) find_package(LibArchive REQUIRED) find_package(GPGMe REQUIRED) find_library(M_LIB m) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) pkg_check_modules(REDLAND REQUIRED redland>=0.4) pkg_check_modules(PACKAGEKIT REQUIRED packagekit-glib2>=0.8.4) set(LI_TOOLS_SHARED_SOURCES toolshared.vala console-progress-bar.vala reporting.vala ) vala_precompile(tools-shared LI_TOOLS_SHARED_C ${LI_TOOLS_SHARED_SOURCES} PACKAGES config gee-1.0 gio-2.0 posix listaller-${LILIBS_VERSION} VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) # prepare workspace for tool compilation include_directories(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${SQLITE_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${GPGME_INCLUDES} ${REDLAND_INCLUDE_DIRS} ${PACKAGEKIT_INCLUDE_DIRS} ) add_definitions("-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE") add_subdirectory(runapp) add_subdirectory(lipa) add_subdirectory(likey) if(TOOLS) add_subdirectory(depscan) add_subdirectory(lipkgen) # add_subdirectory(lilith) add_subdirectory(appcompile) add_subdirectory(lirepo) endif(TOOLS) ./Listaller-0.5.8/tools/toolshared.vala0000664000175000017500000001170412176743563020216 0ustar matthiasmatthias/* toolshared.vala -- Functions which are useful for all Listaller cmdline programs * * Copyright (C) 2010-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Posix; public static extern unowned char* ctermid (char *__s); /** * cmd_strpad: * @data: the input string * @length: the desired length of the output string, with padding * * Returns the text padded to a length with spaces. If the string is * longer than length then a longer string is returned. * * Return value: The padded string **/ public string cmd_strpad (string? data, uint length) { int size; uint data_len; string text; string padding; if (data == null) return string.nfill (length, ' '); // ITS4: ignore, only used for formatting data_len = data.length; // calculate size = (int) (length - data_len); if (size <= 0) return data; padding = string.nfill (size, ' '); text = "%s%s".printf (data, padding); return text; } private string? console_get_tty_name () { string? tty_name; tty_name = (string) ctermid (null); if (tty_name == null) { warning ("Cannot get terminal: %s", Posix.strerror (Posix.errno)); return null; } return tty_name; } private FILE? console_open_tty (string tty_name) { FILE tty; tty = FILE.open (tty_name, "r+"); if (tty == null) { warning ("Error opening terminal for the process (`%s'): %s", tty_name, Posix.strerror (Posix.errno)); return null; } return tty; } public FILE? console_get_tty () { string? tty_name; FILE tty; tty_name = console_get_tty_name (); if (tty_name == null) return null; tty = console_open_tty (tty_name); if (tty == null) return null; return tty; } public string? console_readline_unbuffered (string prompt) { FILE tty; string? str = null; termios ts, ots; tty = console_get_tty (); if (tty == null) return null; tty.printf ("%s", prompt); tty.flush (); //! setbuf (tty, null); // taken from polkitagenttextlistener.c Posix.tcgetattr (tty.fileno (), out ts); ots = ts; ts.c_lflag &= ~(ECHONL); Posix.tcsetattr (tty.fileno (), TCSAFLUSH, ts); str = ""; while (true) { int c; c = tty.getc (); if (c == '\n') { // ok, done break; } else if (c == FILE.EOF) { warning ("Got unexpected EOF."); break; } else { str = "%s%c".printf (str, (char) c); } } Posix.tcsetattr (tty.fileno (), TCSAFLUSH, ots); tty.putc ('\n'); if (str == "") return null; return str; } public void console_termios_noecho (termios old) { old.c_lflag &= ~ICANON; old.c_lflag &= ~ECHO; old.c_cc[VMIN] = 1; old.c_cc[VTIME] = 0; if (Posix.tcsetattr (0, TCSANOW, old) < 0) GLib.stderr.printf ("tcsetattr ~ICANON\n"); } public void console_termios_restore (termios old) { old.c_lflag |= ICANON; old.c_lflag |= ECHO; if (Posix.tcsetattr (0, TCSADRAIN, old) < 0) GLib.stderr.printf ("tcsetattr ICANON\n"); } public void console_wait_for_enter (FILE? atty = null) { FILE tty; tty = console_get_tty (); if (tty == null) return; // prepare termios termios old = {0}; if (Posix.tcgetattr (0, out old) < 0) GLib.stderr.printf ("tcgetattr()\n"); console_termios_noecho (old); while (true) { int c; if (atty == null) c = tty.getc (); else c = atty.getc (); if (c == '\n') { // ok, done break; } else if (c == FILE.EOF) { warning ("Got unexpected EOF."); break; } } console_termios_restore (old); } public bool console_get_prompt (string question, bool defaultyes, bool forceanswer = false) { bool ret = false; bool valid = false; string prompt; string? str; if (!forceanswer) prompt = "%s %s ".printf (question, defaultyes ? "[Y/n]" : "[N/y]"); else prompt = "%s %s ".printf (question, "[y/n]"); while (!valid) { str = console_readline_unbuffered (prompt); if ((!forceanswer) && (str == null)) str = ""; else if (str == null) break; if (str.length == 0) { if (defaultyes) { valid = true; ret = true; } else { valid = true; ret = false; } } str = str.down (); if ((str == "y") || (str == "yes")) { valid = true; ret = true; } if ((str == "n") || (str == "no")) { valid = true; ret = false; } } if ((!valid) && (forceanswer)) { ret = console_get_prompt (question, defaultyes, true); } return ret; } public bool is_root () { if (Posix.getuid () == 0) { return true; } else { return false; } } ./Listaller-0.5.8/tools/lirepo/0000775000175000017500000000000012176743563016474 5ustar matthiasmatthias./Listaller-0.5.8/tools/lirepo/lirepo.vala0000664000175000017500000000737512176743563020647 0ustar matthiasmatthias/* lirepo.vala -- Main file for Listaller repository tool * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class LirepoTool : Object { // Cmd options private static string o_repo_dir = ""; private static bool o_show_version = false; private static bool o_verbose_mode = false; private static bool o_init = false; private static string? o_add_pkg = null; public int exit_code { get; set; } private const OptionEntry[] options = { { "init", 0, 0, OptionArg.NONE, ref o_init, N_("Initialize an empty repository"), null }, { "add", 'a', 0, OptionArg.FILENAME, ref o_add_pkg, N_("Add a package to the repository"), null }, { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { null } }; public LirepoTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- maintain local IPK package repositories."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); if (args.length <= 1) { stderr.printf ("No arguments given!\n"); exit_code = 1; return; } try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } } public void run () { if (exit_code > 0) return; if (o_show_version) { stdout.printf ("lirepo tool, part of Listaller version: %s\n", Listaller.get_full_version_info_str ()); return; } // Take directory from options, otherwise use current dir string repodir = o_repo_dir; if (repodir == "") repodir = Environment.get_current_dir (); if (o_init) { if (FileUtils.test (Path.build_filename (repodir, "reposetting", null), FileTest.EXISTS)) { stderr.printf ("%s\n", _("Could not initialize empty repository: Repo already exists!")); exit_code = 1; return; } var repo = new IPK.RepoLocal (repodir); stdout.printf ("%s\n", _("Initialized empty IPK repository.")); } else if (o_add_pkg != null) { bool ret = false; var repo = new IPK.RepoLocal (repodir); ret = repo.add_package (o_add_pkg); if (!ret) exit_code = 4; } // show the report var report = Report.get_instance (); if (!report.is_empty ()) { stdout.printf ("%s\n%s\n", _("Repository issue report:"), report.to_string ()); } } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new LirepoTool (args); set_clitool_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("lirepo"); // Run the application main.run (); // delete report Report.get_instance ().delete (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/lirepo/CMakeLists.txt0000664000175000017500000000211012176743563021226 0ustar matthiasmatthias# CMakeLists for Listaller repository manager find_package(Vala REQUIRED) include("${VALA_USE_FILE}") set(LIREPO_SOURCES lirepo.vala ipk-repo-local.vala ../reporting.vala ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${SQLITE_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${GPGME_INCLUDES} ${REDLAND_INCLUDE_DIRS} ) # Add log domain add_definitions("-DG_LOG_DOMAIN=\"RepoTool\"") # Listaller repo-tool vala_add_executable (lirepo ${LIREPO_SOURCES} PACKAGES ${LISTALLER_BASE_VALA_DEPS} listaller_internal packagekit-glib2 VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(lirepo_precompile listaller-glib) target_link_libraries(lirepo ${M_LIB} ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ${LibArchive_LIBRARIES} ${LIBXML2_LIBRARIES} ${GPGME_VANILLA_LIBRARIES} ${REDLAND_LIBRARIES} listaller-glib ) install(TARGETS lirepo DESTINATION bin) ./Listaller-0.5.8/tools/lirepo/ipk-repo-local.vala0000664000175000017500000001031112176743563022153 0ustar matthiasmatthias/* ipk-repo-local.vala -- Manage a local Listaller repository * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; using Listaller; using Listaller.Utils; namespace Listaller.IPK { private class RepoLocal : Repo { private string repo_root; private string repo_pool_dir; public RepoLocal (string dir) { base ("local"); repo_root = dir; repo_pool_dir = Path.build_filename (dir, "apps", "pool", null); rsettings.open (Path.build_filename (repo_root, "reposetting", null)); } ~RepoLocal () { rsettings.save (Path.build_filename (repo_root, "reposetting", null)); save_current_index (); } /** * Add a completely new package */ private bool add_package_new (string fname, AppItem app, string arch) { bool ret; string app_dir = Path.build_filename (repo_pool_dir, app.idname, null); string canonical_pkgname = build_canonical_pkgname (app, arch); ret = create_dir_structure (app_dir); if (!ret) { Report.log_error ("Unable to create app-id directory."); return false; } // copy current package to the repo tree ret = copy_file (fname, Path.build_filename (app_dir, canonical_pkgname, null)); if (!ret) return false; // register package cindex.update_application (app); return ret; } /** * Update an existing pacjage to a new version */ private bool add_package_existing (string fname, AppItem app, string arch) { bool ret; string app_dir = Path.build_filename (repo_pool_dir, app.idname, null); AppItem appExisting = cindex.get_application (app.idname); if (appExisting == null) error ("FATAL: Application was assumed to be present in index, but it was not found!"); string canonical_old_pkgname = build_canonical_pkgname (appExisting, arch); string canonical_pkgname = build_canonical_pkgname (app, arch); // delete existing package FileUtils.remove (canonical_old_pkgname); // copy current package to the repo tree ret = copy_file (fname, Path.build_filename (app_dir, canonical_pkgname, null)); if (!ret) return false; // register package cindex.update_application (app); return ret; } public bool add_package (string fname) { bool ret = false; create_dir_structure (repo_pool_dir); var ipkp = new IPK.Package (fname); ret = ipkp.initialize (); if (!ret) return false; AppItem app = ipkp.control.get_application (); // we do the arch split to prevent invalid archs from being added (this is much more failsafe) string[] archs = ipkp.control.get_architectures ().split (","); if (archs.length > 1) { Report.log_error (_("You cannot add multiarch IPK packages to a repository!")); return false; } string arch = archs[0]; // save current index, in case there is an unsaved one open // then open arch-specific index save_current_index (); open_index_for_arch (repo_root, arch); if (cindex.application_exists (app)) { int j = cindex.compare_version (app); if (j == 0) { Report.log_error (_("The package you want to add already exists in the repository (ID: %s, Version: %s).").printf (app.idname, app.version)); return false; } else if (j < 0) { Report.log_error (_("A newer version of the package you want to add is already present in the repository.")); return false; } add_package_existing (fname, app, arch); } else { ret = add_package_new (fname, app, arch); } return ret; } public ArrayList get_applist () { var appList = new ArrayList (); //! TODO return appList; } } } // End of namespace: Listaller.IPK ./Listaller-0.5.8/tools/runapp/0000775000175000017500000000000012176743563016507 5ustar matthiasmatthias./Listaller-0.5.8/tools/runapp/runapp.vala0000664000175000017500000000762612176743563020674 0ustar matthiasmatthias/* runapp.vala - Small wrapper to run Listaller-installed apps * * Copyright (C) 2010-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class RunApp : Object { private Manager limgr; public RunApp () { limgr = new Manager (true); } public void prepare_environment (string ld_env_add) { string ld_env = ""; string? ld_env_existing = Environment.get_variable ("LD_LIBRARY_PATH"); if (ld_env_existing != null) ld_env = "%s;%s".printf (ld_env_existing, ld_env_add); else ld_env = ld_env_add; debug ("LD_PATH env is: %s", ld_env); if (ld_env != "") Environment.set_variable ("LD_LIBRARY_PATH", ld_env, true); } public int run_application (string commandLine, string ld_env) { int exit_status; try { prepare_environment (ld_env); debug ("Command line: %s", commandLine); Process.spawn_command_line_sync (commandLine, null, null, out exit_status); } catch (Error e) { stderr.printf ("Could not run: %s\n", e.message); } return exit_status; } public int execute (string appName) { if (appName == "") return 4; Listaller.AppItem? app = limgr.get_application_by_idname (appName); if (app != null) { string ld_env = limgr.get_app_ld_environment (app); return run_application (app.get_raw_cmd (true), ld_env); } return run_application (appName, ""); } } public class CmdApp : Object { private static bool o_show_version = false; private static bool o_verbose_mode = false; private string o_appname; public int exit_code { set; get; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { null } }; public CmdApp (string[] args) { exit_code = 0; o_appname = null; var opt_context = new OptionContext ("- run applications."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } for (uint i = 1; i < args.length; i++) { string arg = args[i]; if (o_appname == null) { o_appname = arg; } } } public void run () { if (exit_code != 0) return; if (o_show_version) { stdout.printf ("runapp tool, part of Listaller version: %s\n", Listaller.get_full_version_info_str ()); return; } if (o_appname == null) { stderr.printf (_("No application specified!") + "\n"); exit_code = 4; return; } var runApp = new RunApp (); exit_code = runApp.execute (o_appname); } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new CmdApp (args); set_console_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("RunApp"); // Run the application main.run (); int code = main.exit_code; return code; } }./Listaller-0.5.8/tools/runapp/CMakeLists.txt0000664000175000017500000000162512176743563021253 0ustar matthiasmatthias# CMakeLists for RunApp tool project(listaller-runapp) find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) set(RUNAPP_SOURCES runapp.vala ) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ) vala_add_executable(runapp ${RUNAPP_SOURCES} PACKAGES config gee-1.0 gio-2.0 posix listaller-${LILIBS_VERSION} VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(runapp_precompile listaller-glib) add_dependencies(runapp_precompile ${CMAKE_BINARY_DIR}/src/listaller-${LILIBS_VERSION}.vapi) target_link_libraries(runapp ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} listaller-glib ) install(TARGETS runapp DESTINATION bin) ./Listaller-0.5.8/tools/scripts/0000775000175000017500000000000012176743563016671 5ustar matthiasmatthias./Listaller-0.5.8/tools/scripts/postinst0000775000175000017500000000070412176743563020503 0ustar matthiasmatthias#! /bin/sh echo "Installing mime extensions..." xdg-mime install '/usr/share/listaller/mime/x-ipk.xml' xdg-mime install '/usr/share/listaller/mime/x-ips.xml' xdg-icon-resource install --context mimetypes --size 64 '/usr/share/listaller/graphics/mime-ipk.png' 'application-x-installation' xdg-icon-resource install --context mimetypes --size 64 '/usr/share/listaller/graphics/mime-ips.png' 'application-ips-script' update-desktop-database echo "Done." ./Listaller-0.5.8/tools/scripts/writedoc.sh0000664000175000017500000000337312176743563021053 0ustar matthiasmatthias#!/bin/bash #Looking for pasdoc PDP=$(which pasdoc) if ([ -e $PDP ]&&[ "$PDP" != '' ]); then mkdir -p ../docs/html cd ../docs/html/ SRCDIR=$SRCDIR FRONTDIR=$SRCDIR/frontends TOOLSDIR=$SRCDIR/cmdtools DAEMONDIR=$SRCDIR/daemon BINDDIR=$SRCDIR/bind CREATORDIR=$SRCDIR/licreator LIBDIR=$LIBDIR pasdoc --write-uses-list --staronly --format html \ $SRCDIR/listallgo.lpr \ $SRCDIR/lipa.lpr \ $SRCDIR/listallmgr.lpr \ $SRCDIR/liupdate.lpr \ $SRCDIR/libuild.lpr \ $SRCDIR/unibuild.pas \ $SRCDIR/litray.lpr \ $SRCDIR/igobase.pas \ $SRCDIR/distri.pas \ $SRCDIR/dgfrm.pas \ $SRCDIR/litranslator.pas \ $SRCDIR/ipkbuild.pas \ $SRCDIR/ipkdef.pas \ $SRCDIR/manager.pas \ $SRCDIR/updatefrm.pas \ $SRCDIR/liutils.pas \ $SRCDIR/appitem.pas \ $SRCDIR/applist.pas \ $SRCDIR/listallerd.lpr \ $SRCDIR/djobs.pas \ $SRCDIR/litypes.pas \ $SRCDIR/RegExpr.pas \ $SRCDIR/xtypefm.pas \ $SRCDIR/strlocale.pas \ $SRCDIR/uninstall.pas \ $SRCDIR/simdbus.pas \ $SRCDIR/updexecfrm.pas \ $SRCDIR/xtypefm.pas \ $SRCDIR/linotify.pas \ $SRCDIR/callbackprocess.pas \ $BINDDIR/polkit.pas \ $BINDDIR/pktypes.pas \ $BINDDIR/appupdate.pas \ $BINDDIR/gext.pas \ $BINDDIR/packagekit.pas \ $BINDDIR/appman.pas \ $BINDDIR/installer.pas \ $SRCDIR/ipkpackage.pas \ $SRCDIR/gpgsign.pas \ $SRCDIR/tararchive.pas \ $LIBDIR/ipkinstall.pas \ $LIBDIR/limanageapp.pas \ $LIBDIR/mtprocs.pas \ $LIBDIR/softwaredb.pas \ $LIBDIR/libinstaller.lpr \ $LIBDIR/lidbusproc.pas \ $LIBDIR/dderesolve.pas \ $LIBDIR/slibmanage.pas \ $CREATORDIR/editor.pas \ $CREATORDIR/prjwizard.pas \ $CREATORDIR/licreator.lpr \ $CREATORDIR/editor.pas \ $CREATORDIR/prjwizard.pas \ ../../opbitmap/gifanimator.pas \ ../../synapse/httpsend.pas \ ../../synapse/ftpsend.pas \ ../../synapse/blcksock.pas else echo " PasDoc was not found. Please install PasDoc." exit 8 fi ./Listaller-0.5.8/tools/scripts/convert-utf16.sh0000775000175000017500000000163412176743563021657 0ustar matthiasmatthias#!/bin/bash # set -x [[ "$#" != 1 ]] && echo "Usage: $(basename $0) " && exit pfad=${1} to="utf-16" files=$(find "$pfad" -iname "*.po" -type f -print) count=0 for f in ${files[*]}; do count=$(( $count + 1)) type="$(file "$f" | sed 's/^.*:\s\(UTF-8\|ASCII\)\s.*/\1/' | tr '[[:upper:]]' '[[:lower:]]')" if [ "$type" = "$to" ]; then echo -n "$count: $f is already $to! => done." else case $type in ASCII|ISO-8859-*|UTF-8|ascii|iso-8859-*|utf-8) echo -n "$count: Recode now $f to $to!" iconv -f "$type" -t "$to" "$f" > "${f}.${to}" mv "${f}.${to}" "$f" [[ $? = 0 ]] && echo -n " => done." || echo " => failed." ;; *) echo -n "$count: $f has wrong type => failed." ;; esac && echo fi done ./Listaller-0.5.8/tools/scripts/prerm0000775000175000017500000000073412176743563017750 0ustar matthiasmatthias#! /bin/sh echo "Uninstalling mime extension..." xdg-mime uninstall '/usr/share/listaller/mime/x-ipk.xml' xdg-mime uninstall '/usr/share/listaller/mime/x-ips.xml' xdg-icon-resource uninstall --context mimetypes --size 64 '/usr/share/listaller/graphics/mime-ipk.png' 'application-x-installation' xdg-icon-resource uninstall --context mimetypes --size 64 '/usr/share/listaller/graphics/mime-ips.png' 'application-ips-script' update-mime-database '/usr/share/mime' echo "Done." ./Listaller-0.5.8/tools/scripts/treeclean.sh0000664000175000017500000000132212176743563021165 0ustar matthiasmatthias#!/bin/bash # Clean up all files which were used during the compile process or which are just backup files for arg; do case $arg in ALL=*) ALL=${arg#ALL=};; esac; done rm -f Makefile if [ -d ./build ] ;then rm -rf ./build fi find -iname *.ppu -exec rm {} \; find -iname *.o -exec rm {} \; find -iname *.or -exec rm {} \; find -iname *.a -exec rm {} \; find -iname *.pas~ -exec rm {} \; find -iname *.bak -exec rm {} \; find -iname *.compiled -exec rm {} \; find -iname *.manifest -exec rm {} \; find -iname *.lrs -exec rm {} \; find -iname *.rst -exec rm {} \; find -iname *.pc -exec rm {} \; find -iname *~ -exec rm {} \; #find . -name *~ -exec rm {} \; cd src echo "Source code directories cleaned up." ./Listaller-0.5.8/tools/depscan/0000775000175000017500000000000012176743563016617 5ustar matthiasmatthias./Listaller-0.5.8/tools/depscan/scan_ldd.vala0000664000175000017500000000416412176743563021240 0ustar matthiasmatthias/* scan_ldd.vala - Detect ELF binary dependencies using LDD * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; private class DepscanLDD : Object, IDepScanEngine { private ArrayList filedeps; private ArrayList project_files; public DepscanLDD (ArrayList available_files) { filedeps = new ArrayList (); project_files = new ArrayList (); foreach (string s in available_files) { project_files.add (Path.get_basename (s)); } } public bool fetch_required_files (string binaryname) { filedeps.clear (); string cmd = "/usr/bin/ldd " + binaryname; string output, stderror = null; int exit_status = 0; try { Process.spawn_command_line_sync (cmd, out output, out stderror, out exit_status); } catch (SpawnError e) { debug (e.message); return false; } if ((exit_status != 0) || (output == null)) return false; string[] tmp = output.split ("\n"); for (int i = 0; i < tmp.length; i++) { string h = tmp[i]; string[] dep = h.split ("=>"); if (dep.length <= 0) continue; h = dep[0].strip (); if (!h.contains ("(")) { if (project_files.index_of (h) <= 0) filedeps.add ("%s%s".printf ("lib:", h)); } } return true; } public bool can_be_used (string fname) { return FileUtils.test (fname, FileTest.IS_EXECUTABLE); } public ArrayList required_files () { return filedeps; } } ./Listaller-0.5.8/tools/depscan/depscan.vala0000664000175000017500000001434112176743563021104 0ustar matthiasmatthias/* depscan.vala - Automatically detect dependencies * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; using Listaller; public interface IDepScanEngine { public abstract ArrayList required_files (); public abstract bool can_be_used (string fname); public abstract bool fetch_required_files (string fname); } enum ScannerOutput { STANDARD, SIMPLE_TEXT, COMPONENTS, LAST; } private class DependencyScanner : Object { private string targetdir; private ScannerOutput output_format; public bool recursive { get; set; } public string extra_modules_dir { get; set; } public DependencyScanner (string target_dir, ScannerOutput oformat = ScannerOutput.STANDARD) { targetdir = target_dir; output_format = oformat; } private ArrayList? get_file_list (string dir) { ArrayList list = new ArrayList (); try { var directory = File.new_for_path (dir); var enumerator = directory.enumerate_children (FileAttribute.STANDARD_NAME, 0); FileInfo file_info; while ((file_info = enumerator.next_file ()) != null) { string path = Path.build_filename (dir, file_info.get_name (), null); if (file_info.get_is_hidden ()) continue; if ((!FileUtils.test (path, FileTest.IS_REGULAR)) && (recursive)) { ArrayList subdir_list = get_file_list (path); // There was an error, exit if (subdir_list == null) return null; list.add_all (subdir_list); } else { // Presort files here bool uncertain = false; string ctype = ContentType.guess (path, null, out uncertain); if ((ContentType.can_be_executable (ctype)) || FileUtils.test (path, FileTest.IS_EXECUTABLE)) list.add (path); } } } catch (Error e) { stderr.printf (_("Error: %s\n"), e.message); return null; } return list; } private void scan_engine_process (ArrayList files, IDepScanEngine eng, ref HashSet required_items) { foreach (string s in files) { // skip all symlinks here, we don't want to check them (but we need them in the list, e.g. for lib symlinks) if (FileUtils.test (s, FileTest.IS_SYMLINK)) continue; if (eng.can_be_used (s)) if (eng.fetch_required_files (s)) { required_items.add_all (eng.required_files ()); } } } private ArrayList get_scanner_output_default (HashSet required_items) { var res = new ArrayList (); foreach (string s in required_items) { res.add (s); } return res; } private ArrayList get_scanner_output_components (HashSet required_items) { var cfactory = new Dep.ComponentFactory (); var comp_list = new HashMap (); var res = new ArrayList (); // intialize factory, loading optional component-items for better dependency-resolving cfactory.initialize (true); if (!Utils.str_is_empty (extra_modules_dir)) cfactory.load_extra_modules (extra_modules_dir); foreach (Dep.Framework frmw in cfactory.registered_frameworks.values) { var iter = required_items.iterator (); if (!iter.first ()) continue; do { string s = iter.get (); Dep.ItemType itype = Dep.Component.item_get_type (s); string iname = Dep.Component.item_get_name (s); if (frmw.has_matching_item (itype, iname)) { comp_list.set (frmw.idname, frmw); iter.remove (); } } while (iter.next ()); } foreach (Dep.Module cmod in cfactory.registered_modules.values) { var iter = required_items.iterator (); if (!iter.first ()) continue; do { string s = iter.get (); Dep.ItemType itype = Dep.Component.item_get_type (s); string iname = Dep.Component.item_get_name (s); if (cmod.has_matching_item (itype, iname)) { comp_list.set (cmod.idname, cmod); iter.remove (); } } while (iter.next ()); } foreach (Dep.Component comp in comp_list.values) { // pretend to be installed // FIXME: don't use this hack and *really* determine if dependency was installed comp.installed = true; string version = ""; try { version = comp.get_version (); } catch (Error e) { debug ("Unable to retrieve version for %s: %s", comp.idname, e.message); } if (version == "") res.add (comp.idname); else res.add ("%s (>= %s)".printf (comp.idname, version)); } if (required_items.size != 0) { // Add stuff which we were unable to detect res.add ("----"); res.add ("Dependencies which are not matching a (installed) framework or module:"); res.add_all (required_items); } return res; } public bool compile_required_files_list () { var required_items = new HashSet (); if (output_format == ScannerOutput.STANDARD) stdout.printf ("%s\r", "Please wait..."); ArrayList files; if (FileUtils.test (targetdir, FileTest.IS_REGULAR)) { files = new ArrayList (); files.add (targetdir); } else { files = get_file_list (targetdir); } if (files == null) return false; // Process binaries scan_engine_process (files, new DepscanLDD (files), ref required_items); // do we have results? if (required_items.size == 0) { stdout.printf ("%s\n", "No dependencies found!"); return false; } // do transformations of the scanner output and receive it ArrayList scan_result; if (output_format == ScannerOutput.COMPONENTS) scan_result = get_scanner_output_components (required_items); else scan_result = get_scanner_output_default (required_items); // print result foreach (string s in scan_result) { stdout.printf (s + "\n"); } return true; } } ./Listaller-0.5.8/tools/depscan/CMakeLists.txt0000664000175000017500000000167312176743563021366 0ustar matthiasmatthias# CMakeLists for Dependency Scanner Tool project(listaller-depscan) find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) set(DEPSCAN_SOURCES depscan-tool.vala depscan.vala scan_ldd.vala ) link_libraries(${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ${LIBXML2_LIBRARIES} ${GPGME_VANILLA_LIBRARIES} ${REDLAND_LIBRARIES} listaller-glib ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIR} ${GIO2_INCLUDE_DIR} ) add_definitions(${GEE_CFLAGS} ${GEE_CFLAGS_OTHER}) vala_add_executable(depscan ${DEPSCAN_SOURCES} PACKAGES ${LISTALLER_BASE_VALA_DEPS} listaller_internal packagekit-glib2 VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) install(TARGETS depscan DESTINATION bin) ./Listaller-0.5.8/tools/depscan/depscan-tool.vala0000664000175000017500000000744312176743563022064 0ustar matthiasmatthias/* depscan-tool.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; public class DepScanTool : Object { // Cmd options private static bool o_show_version = false; private static bool o_run_recursive = false; private static bool o_simpletext = false; private static bool o_components = false; private static bool o_verbose_mode = false; private static string o_input_path = null; private static string o_extra_modules_dir = null; public int exit_code { get; set; } private const OptionEntry[] options = { { "version", 0, 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "recursive", 'r', 0, OptionArg.NONE, ref o_run_recursive, N_("Use recursive mode"), null }, { "out-simpletext", 0, 0, OptionArg.NONE, ref o_simpletext, N_("Print machine-readable simple text"), null }, { "out-components", 'c', 0, OptionArg.NONE, ref o_components, N_("Print list of used framework/modules"), null }, { "include-modules", 0, 0, OptionArg.STRING, ref o_extra_modules_dir, N_("Define an additional directory with module definitions"), null }, { "verbose", 'v', 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { null } }; public DepScanTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- scan software dependencies."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } for (uint i = 1; i < args.length; i++) { string arg = args[i]; if (o_input_path == null) { o_input_path = arg; } } } private void on_error (string details) { stderr.printf (_("ERROR: %s"), details + "\n"); exit_code = 6; } public void run () { bool done = false; if (o_show_version) { stdout.printf ("depscan helper, version: %s\n", PkgConfig.PACKAGE_VERSION); return; } if (Listaller.Utils.str_is_empty (o_input_path)) { stdout.printf (_("No path given!") + "\n"); exit_code = 2; return; } ScannerOutput omode = ScannerOutput.STANDARD; if (o_simpletext) omode = ScannerOutput.SIMPLE_TEXT; else if (o_components) omode = ScannerOutput.COMPONENTS; DependencyScanner scan = new DependencyScanner (o_input_path, omode); scan.recursive = o_run_recursive; scan.extra_modules_dir = o_extra_modules_dir; scan.compile_required_files_list (); } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new DepScanTool (args); Listaller.set_clitool_mode (true); Listaller.set_verbose_mode (o_verbose_mode); Listaller.add_log_domain ("DepScan"); // Run the application main.run (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/appcompile/0000775000175000017500000000000012176743563017333 5ustar matthiasmatthias./Listaller-0.5.8/tools/appcompile/autocompiler.vala0000664000175000017500000001043612176743563022707 0ustar matthiasmatthias/* autocompiler.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; namespace Listaller.Extra { private class AutoCompiler : Object { private string srcdir; private string targetdir; public AutoCompiler (string source_dir, string target_dir = "") { srcdir = source_dir; targetdir = target_dir; if ((targetdir != "") && (!Path.is_absolute (targetdir))) targetdir = Path.build_filename (Environment.get_current_dir (), targetdir, null); } ~AutoCompiler () { } private int compile_makefile (string dir = "") { // Check for Makefile if ((!FileUtils.test (Path.build_filename (Environment.get_current_dir (), "Makefile", null), FileTest.EXISTS)) && (!FileUtils.test (Path.build_filename (dir, "Makefile", null), FileTest.EXISTS))) return -1; int exit_status = 0; string cmd = "make"; if (dir != "") cmd = "make -C %s".printf (dir); // Make it! Process.spawn_command_line_sync (cmd + " all", null, null, out exit_status); if (exit_status != 0) return 1; // Install it, if possible Process.spawn_command_line_sync (cmd + " install DESTDIR=\"" + targetdir + "\"", null, null, out exit_status); if (exit_status != 0) return 1; return exit_status; } private int compile_automake (string args) { string conff = Path.build_filename (srcdir, "configure", null); bool runconfigure = false; if (FileUtils.test (conff, FileTest.EXISTS)) { runconfigure = true; } if (!runconfigure) { string cmd = "autogen.sh"; if (args != "") cmd = "%s %s".printf (cmd, args); string agenf = Path.build_filename (srcdir, cmd, null); if (FileUtils.test (agenf, FileTest.EXISTS)) { // Create AM configure script int exit_status; Process.spawn_command_line_sync (agenf, null, null, out exit_status); if (exit_status != 0) return exit_status; runconfigure = true; } } if (!runconfigure) return -1; // Now run the configure script int exit_status; Process.spawn_command_line_sync (conff, null, null, out exit_status); if (exit_status != 0) return exit_status; exit_status = compile_makefile (); // Done. return exit_status; } private int compile_cmake (string args) { // Check if we can use cmake... if (!FileUtils.test (Path.build_filename (srcdir, "CMakeLists.txt", null), FileTest.EXISTS)) { return -1; } string builddir = Path.build_filename (srcdir, "build_%s".printf (Utils.system_osname_arch_generic ()), null); Utils.create_dir_structure (builddir); string lastdir = Environment.get_current_dir (); Environment.set_current_dir (builddir); int exit_status = 0; string cmd; string a = args; if (a != "") a += " "; a += "-DCMAKE_VERBOSE_MAKEFILE=ON"; cmd = "cmake %s ..".printf (a); Process.spawn_command_line_sync (cmd, null, null, out exit_status); if (exit_status != 0) return 1; Environment.set_current_dir (lastdir); exit_status = compile_makefile (builddir); if (exit_status < 0) exit_status = 1; // Done. return exit_status; } public int compile_software (string args = "") { int ret = -1; string lastdir = Environment.get_current_dir (); Environment.set_current_dir (srcdir); targetdir = verify_install_target (targetdir, srcdir); if (targetdir == "") { error ("Unable to proceed: IPK source dir not found!"); return 1; } ret = compile_makefile (); if (ret < 0) ret = compile_automake (args); if (ret < 0) ret = compile_cmake (args); if (ret < 0) ret = 6; Environment.set_current_dir (lastdir); return ret; } } } // End of namespace ./Listaller-0.5.8/tools/appcompile/appcompile.vala0000664000175000017500000000716312176743563022340 0ustar matthiasmatthias/* appcompile.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class AppCompileTool : Object { // Cmd options private static string o_src_dir = ""; private static string o_target_dir = ""; private static bool o_show_version = false; private static bool o_strip_files = false; private static bool o_verbose_mode; private string cmp_arguments = ""; public int exit_code { get; set; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "sourcedir", 's', 0, OptionArg.FILENAME, ref o_src_dir, N_("Path to the application's source code"), N_("DIRECTORY") }, { "target_dir", 'o', 0, OptionArg.FILENAME, ref o_target_dir, N_("Software install prefix"), N_("DIRECTORY") }, { "strip", 0, 0, OptionArg.NONE, ref o_strip_files, N_("Strip debug infos from files in install-target"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Enable verbose mode"), null }, { null } }; public AppCompileTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- compile software automatically."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); bool b = false; for (uint i = 0; i < args.length; i++) { string arg = args[i]; if (b) cmp_arguments += " " + arg; if (arg == "--") b = true; } cmp_arguments.chug (); try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } } public void run () { bool done = false; if (o_show_version) { stdout.printf ("appcompile helper, version: %s\n", PkgConfig.PACKAGE_VERSION); return; } // Take directory from options, otherwise use current dir string srcdir = o_src_dir; string targetdir = o_target_dir; if (srcdir == "") srcdir = Environment.get_current_dir (); if (o_strip_files) { Extra.AutoStrip strip = new Extra.AutoStrip (srcdir, targetdir); exit_code = strip.strip_binaries (); message ("Stripped debug information from binaries."); return; } Extra.AutoCompiler acomp = new Extra.AutoCompiler (srcdir, targetdir); exit_code = acomp.compile_software (cmp_arguments); return; } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); // Set everything up... var main = new AppCompileTool (args); set_clitool_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("AppCompile"); // Now run the application! main.run (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/appcompile/CMakeLists.txt0000664000175000017500000000157712176743563022105 0ustar matthiasmatthias# CMakeLists for Listaller package builder tool project(listaller-appcompile) find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) find_package(Gettext REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) set(LIBUILD_SOURCES ${lisrc}/utils.vala ${lisrc}/logging.vala ../lipkgen/lpkgutils.vala acutils.vala appcompile.vala autocompiler.vala autostrip.vala ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ) # Database tests vala_add_executable (appcompile ${LIBUILD_SOURCES} PACKAGES config gee-1.0 gio-2.0 posix VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ) target_link_libraries(appcompile ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ) install(TARGETS appcompile DESTINATION bin) ./Listaller-0.5.8/tools/appcompile/acutils.vala0000664000175000017500000000260712176743563021651 0ustar matthiasmatthias/* acutils.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ namespace Listaller.Extra { private string verify_install_target (string insttarget, string srcdir) { string ret = ""; if (insttarget == "") { string isdir = IPK.find_ipk_source_dir (srcdir); if (isdir == null) { warning ("IPK source dir not found!"); return ""; } else { ret = Path.build_filename (isdir, "inst_target", null); if (!Path.is_absolute (ret)) ret = Path.build_filename (Environment.get_current_dir (), ret, null); } } else { message (_("Using user-defined install target: %s"), insttarget); ret = insttarget; } return ret; } } // End of namespace ./Listaller-0.5.8/tools/appcompile/autostrip.vala0000664000175000017500000000345112176743563022235 0ustar matthiasmatthias/* autostrip.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Gee; using Listaller.Utils; namespace Listaller.Extra { private class AutoStrip : Object { private string srcdir; private string targetdir; public AutoStrip (string source_dir, string target_dir = "") { srcdir = source_dir; targetdir = target_dir; } public void strip_file (string fname) { Process.spawn_command_line_sync ("strip --strip-all %s".printf (fname)); } public int strip_binaries () { int ret = -1; string lastdir = Environment.get_current_dir (); Environment.set_current_dir (srcdir); targetdir = verify_install_target (targetdir, srcdir); if (targetdir == "") { error ("Unable to proceed: IPK source dir not found!"); return 1; } var files = find_files (targetdir, true); foreach (string fname in files) { if (FileUtils.test (fname, FileTest.IS_EXECUTABLE)) { // TODO: Check if file is binary or text strip_file (fname); } } Environment.set_current_dir (lastdir); return ret; } } } // End of namespace ./Listaller-0.5.8/tools/lipa/0000775000175000017500000000000012176743563016127 5ustar matthiasmatthias./Listaller-0.5.8/tools/lipa/lipa-installer.vala0000664000175000017500000001274312176743563021723 0ustar matthiasmatthias/* lipa-installer.vala -- Application setup handling in Listaller command-line tool * * Copyright (C) 2010-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class LipaInstaller : LipaModule { private Setup inst; private bool setup_running = false; public LipaInstaller () { base (); } public void setup_error_code (ErrorItem error) { // End progress, if any progress_bar.end (); stderr.printf (error.details); error_code = (int) error.error; } public void setup_progress (ProgressItem item) { int value = item.value; if (value < 0) return; if (item.prog_type != ProgressEnum.MAIN_PROGRESS) return; if (setup_running) progress_bar.set_percentage (item.value); // TODO: Show item-progress too } public void setup_status_changed (StatusItem status) { if (status.status == StatusEnum.INSTALLATION_FINISHED) { progress_bar.end (); print ("%s\n", _("Installation completed!")); setup_running = false; } else if (status.status == StatusEnum.ACTION_STARTED) { setup_running = true; } } public void setup_message (MessageItem message) { stdout.printf ("%s\n", message.details); } public void run_setup (Setup inst) { bool ret; print ("Preparing... Please wait!\r"); inst.message.connect (setup_message); inst.status_changed.connect (setup_status_changed); inst.progress.connect (setup_progress); inst.error_code.connect (setup_error_code); ret = inst.initialize (); if (!ret) { error_code = 8; return; } IPK.Control ipkmeta = inst.control; if (ipkmeta == null) { error_code = 6; return; } if (use_shared_mode) { IPK.InstallMode modes = inst.supported_install_modes (); if (modes.is_all_set (IPK.InstallMode.SHARED)) inst.settings.current_mode = IPK.InstallMode.SHARED; else { // TODO: Nicer error-handling error ("You cannot install this package in shared-mode! (Package does not allow it.)"); } } AppItem appID = ipkmeta.get_application (); //print ("%c8", 0x1B); print ("==== %s ====\n\n", _("Installation of %s").printf (appID.full_name)); print ("%s\n\n%s\n", _("Description:"), appID.description); if (ipkmeta.user_accept_license) { string[] licenseLines = appID.license.text.split ("\n"); // save cursor in new position //print ("%c7", 0x1B); bool clear_hint = false; if (licenseLines.length > 1) { // translations might have a different length string clear_line = string.nfill (_("<<< Press ENTER to continue! >>>").length, ' '); clear_line = "\r %s \r".printf (clear_line); print ("%s\n\n", _("License:")); for (int i = 0; i < licenseLines.length; i++) { if (clear_hint) { // clear the "press-enter"-link stdout.printf (clear_line); clear_hint = false; } stdout.printf ("%s\n", licenseLines[i]); if ((i % 2) == 1) { Posix.FILE? tty = console_get_tty (); stdout.printf (" %s \r", _("<<< Press ENTER to continue! >>>")); clear_hint = true; console_wait_for_enter (tty); } } ret = console_get_prompt (_("Do you accept these terms and conditions?"), false, true); // if user doesn't agree to the license, we have to exit if (!ret) { stdout.printf ("%s\n", _("You need to agree with the license to install & use the application. Exiting setup now.")); return; } } } // Display security info IPK.SecurityInfo sec = inst.get_security_info (); SecurityLevel secLev = sec.get_level (); if (secLev == SecurityLevel.HIGH) print ("%s %c[%dm%s\n%c[%dm", _("Security is:"), 0x1B, CONSOLE_GREEN, "HIGH", 0x1B, CONSOLE_RESET); else if (secLev == SecurityLevel.MEDIUM) print ("%s %c[%dm%s\n%c[%dm", _("Security is:"), 0x1B, CONSOLE_YELLOW, "MEDIUM", 0x1B, CONSOLE_RESET); else if (secLev <= SecurityLevel.LOW) print ("%s %c[%dm%s\n%c[%dm", _("Security is:"), 0x1B, CONSOLE_RED, "LOW", 0x1B, CONSOLE_RESET); // Make sure color is reset... print ("%c[%dm", 0x1B, CONSOLE_RESET); AppItem? app = inst.get_current_application (); if (app == null) error ("Did not receive valid application information!"); ret = console_get_prompt (_("Do you want to install %s now?").printf (app.full_name), true); // If user doesn't want to install the application, exit if (!ret) return; progress_bar.start (_("Installing")); // Go! ret = inst.run_installation (); progress_bar.end (); if (ret) { print ("Installation of %s completed successfully!\n", app.full_name); } else { print ("Installation of %s failed!\n", app.full_name); error_code = 3; } inst = null; } public void install_package (string ipkfname) { inst = new Setup (ipkfname); run_setup (inst); } public override void terminate_action () { if (inst != null) { if (setup_running) inst.kill_installation_process (); inst = null; } } } ./Listaller-0.5.8/tools/lipa/lipa.vala0000664000175000017500000001403012176743563017717 0ustar matthiasmatthias/* lipa.vala -- Listaller command-line tool (main unit) * * Copyright (C) 2010-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; private static const int CONSOLE_RESET = 0; private static const int CONSOLE_BLACK = 30; private static const int CONSOLE_RED = 31; private static const int CONSOLE_GREEN = 32; private static const int CONSOLE_YELLOW = 33; private static const int CONSOLE_BLUE = 34; private static const int CONSOLE_MAGENTA = 35; private static const int CONSOLE_CYAN = 36; private static const int CONSOLE_WHITE = 37; public class LipaTool : Object { private static bool o_show_version = false; private static bool o_verbose_mode = false; private static bool o_mode_install = false; private static bool o_mode_install_remote = false; private static bool o_mode_remove = false; private static bool o_mode_list = false; private static bool o_mode_list__all = false; private static bool o_mode_refresh = false; private string[] args; private static LipaModule lipa; public int exit_code { set; get; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { "install", 'i', 0, OptionArg.NONE, ref o_mode_install, N_("Install an IPK package"), null }, { "install-remote", 0, 0, OptionArg.NONE, ref o_mode_install_remote, N_("Install a remote IPK package"), null }, { "remove", 'r', 0, OptionArg.NONE, ref o_mode_remove, N_("Remove an application installed using Listaller"), null }, { "list-apps", 'l', 0, OptionArg.NONE, ref o_mode_list, N_("List installed Listaller applications"), null }, { "all", 0, 0, OptionArg.NONE, ref o_mode_list__all, N_("List all installed applications"), null }, { "refresh-cache", 0, 0, OptionArg.NONE, ref o_mode_refresh, N_("Refresh repository application cache"), null }, { null } }; private void print_nocommand_msg () { stdout.printf (_("Listaller command-line tool: No command specified.\nRun '%s --help' to see a list of available commands.").printf (args[0]) + "\n"); } public LipaTool (string[] arguments) { exit_code = 0; var opt_context = new OptionContext ("- Listaller command-line tool."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); try { opt_context.parse (ref arguments); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), arguments[0]); exit_code = 1; return; } args = arguments; lipa = null; } [CCode (has_target = false)] public static void handle_SIGINT (int sig_num ){ //stdout.write(STDOUT_FILENO, buffer, strlen(buffer)); // Clear line stdout.printf (" \r"); stdout.printf ("Terminating...\n"); if (lipa != null) lipa.terminate_action (); Posix.termios old = {0}; Posix.tcgetattr (0, out old); console_termios_restore (old); Posix.exit(13); } public void run () { if (exit_code != 0) return; if (o_show_version) { stdout.printf ("lipa tool, part of Listaller version: %s\n", Listaller.get_full_version_info_str ()); return; } string? value = null; if (args.length > 1) value = args[1]; // Set up signal handler for termination Posix.sigaction_t handler = Posix.sigaction_t (); handler.sa_handler = handle_SIGINT; handler.sa_flags = 0; Posix.sigemptyset (handler.sa_mask); Posix.sigaction (Posix.SIGINT, handler, null); if (o_mode_install) { if (value == null) { stderr.printf (_("Missing parameter for 'install' action: No IPK package specified.\n")); exit_code = 4; return; } var lipaInstall = new LipaInstaller (); lipa = lipaInstall; lipaInstall.install_package (value); } else if (o_mode_install_remote) { if (value == null) { stderr.printf (_("Missing parameter for 'install-remote' action: No IPK package-id specified.\n")); exit_code = 4; return; } var lipaManager = new LipaManager (); lipa = lipaManager; lipaManager._test_install_remote_app (value); } else if (o_mode_remove) { if (value == null) { stderr.printf (_("Missing parameter for 'remove' action: No application-id or name specified.\n")); exit_code = 4; return; } var lipaManager = new LipaManager (); lipa = lipaManager; lipaManager.remove_application (value); } else if (o_mode_list) { var lipaManager = new LipaManager (); lipa = lipaManager; lipaManager.list_applications (o_mode_list__all); } else if (o_mode_refresh) { var lipaManager = new LipaManager (); lipa = lipaManager; lipaManager.refresh_cache (); } else { print_nocommand_msg (); exit_code = 0; return; } exit_code = lipa.error_code; } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new LipaTool (args); set_clitool_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("Lipa"); // Run the application main.run (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/tools/lipa/CMakeLists.txt0000664000175000017500000000177712176743563020703 0ustar matthiasmatthias# CMakeLists for Lipa tool project(listaller-lipa) find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) set(LIPA_SOURCES lipa.vala ../toolshared.vala ../console-progress-bar.vala lipa-module.vala lipa-installer.vala lipa-manager.vala ) include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ) vala_add_executable(lipa ${LIPA_SOURCES} PACKAGES config gee-1.0 gio-2.0 posix listaller-${LILIBS_VERSION} VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(lipa_precompile listaller-glib tools-shared) add_dependencies(lipa_precompile ${CMAKE_BINARY_DIR}/src/listaller-${LILIBS_VERSION}.vapi) target_link_libraries(lipa ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} listaller-glib ) install(TARGETS lipa DESTINATION bin) ./Listaller-0.5.8/tools/lipa/lipa-module.vala0000664000175000017500000000235112176743563021205 0ustar matthiasmatthias/* lipa-module.vala -- Generic class for lipa modules * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public enum LipaRole { NONE, INSTALLATION, REMOVAL; } public abstract class LipaModule : Object { protected bool use_shared_mode; public int error_code { get; protected set; } protected CmdProgressBar progress_bar; public LipaModule () { error_code = 0; use_shared_mode = is_root (); progress_bar = new CmdProgressBar (); } public abstract void terminate_action (); } ./Listaller-0.5.8/tools/lipa/lipa-manager.vala0000664000175000017500000001241412176743563021333 0ustar matthiasmatthias/* lipa-manager.vala -- Handle application management tasks in lipa * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class LipaManager : LipaModule { private Listaller.Manager li_mgr; private bool show_progress; public LipaManager () { base (); show_progress = true; li_mgr = new Listaller.Manager (use_shared_mode); li_mgr.message.connect (manager_message_cb); li_mgr.error_code.connect (manager_error_code_cb); //! li_mgr.status_changed.connect (manager_status_changed); li_mgr.progress.connect (manager_progress_cb); li_mgr.application.connect (manager_new_application); } private void manager_error_code_cb (ErrorItem error) { // End progress-bar, if it is shown show_progress = false; if (!get_verbose_mode ()) progress_bar.end (); stderr.printf ("%s\n", error.details); error_code = (int) error.error; } private void manager_message_cb (MessageItem message) { stdout.printf ("%s\n", message.details); } private void manager_progress_cb (ProgressItem item) { int value = item.value; if (value < 0) return; if (item.prog_type != ProgressEnum.MAIN_PROGRESS) return; if (!get_verbose_mode ()) if (show_progress) progress_bar.set_percentage (value); } private string app_ownership_str (AppItem app) { string str_ownership; if (app.state != AppState.INSTALLED_SHARED) str_ownership = _("personal"); else str_ownership = _("shared"); return str_ownership; } private void print_appitem (AppItem app) { string app_state_str = ""; if (app.state == AppState.AVAILABLE) app_state_str = "[%s]".printf (_("AVAILABLE")); else app_state_str = "[%s|%s]".printf (_("INSTALLED"), app_ownership_str (app)); stdout.printf ("%s <%s> %s %s -- %s\n", app_state_str, app.idname, app.full_name, app.version, app.summary); } private void manager_new_application (AppItem app) { print_appitem (app); } public void remove_application (string app_identifier) { bool ret; AppItem? app = null; // Try to find an application which matches the name the user throws at us app = li_mgr.get_application_by_idname (app_identifier); if (app == null) { var appList = li_mgr.get_applications_by_fullname (app_identifier); if ((appList == null) || (appList.size == 0)) { stderr.printf (_("Could not find application which matches '%s'!\n"), app_identifier); error_code = 8; return; } // TODO: This has to be handled better! stdout.printf ("Selected application:\n"); app = appList[0]; print_appitem (app); } ret = console_get_prompt (_("Do you want to remove %s (%s) now?").printf (app.full_name, app_ownership_str (app)), true); // If user doesn't want to remove the application, exit if (!ret) return; if (!get_verbose_mode ()) progress_bar.start (_("Removing")); // Go! ret = li_mgr.remove_application (app); // On success, set everything to done if (ret) { if (!get_verbose_mode ()) progress_bar.set_percentage (100); } if (!get_verbose_mode ()) progress_bar.end (); if (ret) { stdout.printf ("%s\n", _("Removal of %s completed successfully!").printf (app.full_name)); } else { stdout.printf ("%s\n", _("Removal of %s failed!").printf (app.full_name)); error_code = 3; } } /** * NOTE: This is experimental code at time. * As soon as it is sane, this method will get a better name. */ public void _test_install_remote_app (string app_idname) { stdout.printf ("Downloading...\n"); Setup? inst = li_mgr.prepare_setup_for_app (app_idname); if (inst == null) { stdout.printf (_("Could not find application!")); } else { message (inst.fname); } var lipa_inst = new LipaInstaller (); lipa_inst.run_setup (inst); error_code = lipa_inst.error_code; } /** * FIXME: We need a proper method to filter apps & search for them. */ public void list_applications (bool all = false) { AppState filter = AppState.UNKNOWN; all = true; if (all) { filter = AppState.AVAILABLE | AppState.INSTALLED_SHARED | AppState.INSTALLED_PRIVATE; } show_progress = false; li_mgr.filter_applications (filter); show_progress = true; } public void refresh_cache () { bool ret; if (!get_verbose_mode ()) progress_bar.start (_("Updating package cache")); ret = li_mgr.refresh_repository_cache (); if (!get_verbose_mode ()) { progress_bar.set_percentage (100); progress_bar.end (); } } public override void terminate_action () { if (li_mgr != null) { critical ("Please don't kill the application, it could damage installed applications and produce unexpected behavior!"); } } } ./Listaller-0.5.8/tools/likey/0000775000175000017500000000000012176743563016317 5ustar matthiasmatthias./Listaller-0.5.8/tools/likey/CMakeLists.txt0000664000175000017500000000171112176743563021057 0ustar matthiasmatthias# CMakeLists for Listaller key manager find_package(Vala REQUIRED) include("${VALA_USE_FILE}") set(LIKEY_SOURCES likey.vala ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${SQLITE_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${GPGME_INCLUDES} ${REDLAND_INCLUDE_DIRS} ) # Add log domain add_definitions("-DG_LOG_DOMAIN=\"KeyTool\"") # Listaller key-manager vala_add_executable (likey ${LIKEY_SOURCES} PACKAGES ${LISTALLER_BASE_VALA_DEPS} listaller_internal packagekit-glib2 VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_dependencies(likey_precompile listaller-glib) target_link_libraries(likey ${M_LIB} ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ${GPGME_VANILLA_LIBRARIES} listaller-glib ) install(TARGETS likey DESTINATION bin) ./Listaller-0.5.8/tools/likey/likey.vala0000664000175000017500000000721712176743563020310 0ustar matthiasmatthias/* likey.vala -- Manage Listaller's key database * * Copyright (C) 2012-2013 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; using Listaller; public class LikeyTool : Object { // Cmd options private static bool o_show_version = false; private static bool o_verbose_mode = false; private static string o_lookup_key = null; private static string o_import_key_fpr = null; public int exit_code { get; set; } private const OptionEntry[] options = { { "version", 'v', 0, OptionArg.NONE, ref o_show_version, N_("Show the application's version"), null }, { "verbose", 0, 0, OptionArg.NONE, ref o_verbose_mode, N_("Activate verbose mode"), null }, { "lookup", 'l', 0, OptionArg.STRING, ref o_lookup_key, N_("Lookup key which matches PATTERN"), N_("PATTERN") }, { "import", 'i', 0, OptionArg.STRING, ref o_import_key_fpr, N_("Import key with fingerprint FPR"), N_("FPR") }, { null } }; public LikeyTool (string[] args) { exit_code = 0; var opt_context = new OptionContext ("- manage Listaller's GPG trusted key database."); opt_context.set_help_enabled (true); opt_context.add_main_entries (options, null); if (args.length <= 1) { stderr.printf ("No arguments given!\n"); exit_code = 1; return; } try { opt_context.parse (ref args); } catch (Error e) { stdout.printf (e.message + "\n"); stdout.printf (_("Run '%s --help' to see a full list of available command line options.\n"), args[0]); exit_code = 1; return; } } public void run () { if (exit_code > 0) return; bool done = false; if (o_show_version) { stdout.printf ("likey tool, part of Listaller version: %s\n", Listaller.get_full_version_info_str ()); return; } /** First handle all the read actions which don't require root privileges */ KeyManager keymgr = new KeyManager (); if (o_lookup_key != null) { string key_info; key_info = keymgr.get_key_info (o_lookup_key); stdout.printf ("%s\n", key_info); return; } if (!Utils.is_root ()) { stderr.printf ("%s\n", _("You need to be root to change Listaller's key database!")); exit_code = 6; return; } if (o_import_key_fpr != null) { bool ret; ret = keymgr.import_key (o_import_key_fpr); if (!ret) { exit_code = 7; stderr.printf ("%s\n", _("Failed to import key with fingerprint '%s'.").printf (o_import_key_fpr)); return; } stdout.printf ("%s\n", _("Key '%s' imported successfully!").printf (o_import_key_fpr)); return; } } static int main (string[] args) { // Bind Listaller locale Intl.setlocale(LocaleCategory.ALL,""); Intl.bindtextdomain(PkgConfig.GETTEXT_PACKAGE, PkgConfig.LOCALEDIR); Intl.bind_textdomain_codeset(PkgConfig.GETTEXT_PACKAGE, "UTF-8"); Intl.textdomain(PkgConfig.GETTEXT_PACKAGE); var main = new LikeyTool (args); set_clitool_mode (true); set_verbose_mode (o_verbose_mode); add_log_domain ("lirepo"); // Run the application main.run (); int code = main.exit_code; return code; } } ./Listaller-0.5.8/AUTHORS0000664000175000017500000000067112176743563015116 0ustar matthiasmatthiasMatthias Klumpp PkPlugin: Richard Hughes Matthias Klumpp BinReloc: Hongli Lai Mike Hearn Isak Savo LiBuild: Jan Niklas Hasse Matthias Klumpp Isak Savo Jan Nieuwenhuizen ./Listaller-0.5.8/tests/0000775000175000017500000000000012176743563015204 5ustar matthiasmatthias./Listaller-0.5.8/tests/tests-ipkbuild.vala0000664000175000017500000000702612176743563021021 0ustar matthiasmatthias/* tests-ipkbuild.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; using Listaller.Utils; string lipkgen_exec; string acomp_exec; string foobar_srcdir; string dummy_srcdir; string datadir; void msg (string s) { stdout.printf (s + "\n"); } void run_command (string cmd) { int exit_status = 0; try { debug ("Running command: " + cmd); Process.spawn_command_line_sync (cmd, null, null, out exit_status); assert (exit_status == 0); } catch (SpawnError e) { error (e.message); } } void test_cleanup_srcdir () { // we can ignore all errors here, as the project might have not been built before Environment.set_current_dir (foobar_srcdir); Process.spawn_command_line_sync ("make distclean", null, null, null); } /* * Test the AutoCompile automatic software compiler tool */ void test_autocompile () { msg ("AppCompile tests"); // Cleanup test_cleanup_srcdir (); delete_dir_recursive (Path.build_filename (foobar_srcdir, "ipkinstall", "inst_target", null)); Environment.set_current_dir (foobar_srcdir); // Perform autocompile of FooBar sample app string cmd = acomp_exec; run_command (cmd); } /* * Test the LiBuild IPK package builder tool */ void test_lipkgen_build () { bool ret = false; msg ("Lipkgen tests"); // Cleanup FileUtils.remove (Path.build_filename (datadir, "FooBar-1.0_%s.ipk".printf (Utils.system_machine_generic ()), null)); FileUtils.remove (Path.build_filename (datadir, "DummyPkg-0.1_all.ipk", null)); string cmd; // Now create IPK package for FooBar! Environment.set_current_dir (foobar_srcdir); cmd = "%s %s %s %s %s".printf (lipkgen_exec, "-b", "--verbose", "-o", datadir); run_command (cmd); // Now build the dummy IPK! Environment.set_current_dir (dummy_srcdir); cmd = "%s %s %s %s %s".printf (lipkgen_exec, "-b", "--verbose", "-o", datadir); run_command (cmd); } int main (string[] args) { msg ("=== Running LiBuild Tests ==="); datadir = args[1]; assert (datadir != null); acomp_exec = lipkgen_exec = args[2]; lipkgen_exec = args[3]; assert (lipkgen_exec != null); assert (acomp_exec != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); foobar_srcdir = real_path (Path.build_filename (datadir, "..", "foobar", null)); assert (FileUtils.test (foobar_srcdir, FileTest.EXISTS) != false); dummy_srcdir = real_path (Path.build_filename (datadir, "..", "dummy-pack", null)); assert (FileUtils.test (dummy_srcdir, FileTest.EXISTS) != false); string curdir = Environment.get_current_dir (); Environment.set_current_dir (datadir); var tenv = new TestEnvironment ("ipkbuild"); tenv.init (ref args); tenv.create_environment (false); test_autocompile (); Environment.set_current_dir (datadir); test_lipkgen_build (); tenv.run (); Environment.set_current_dir (curdir); return 0; } ./Listaller-0.5.8/tests/foobar/0000775000175000017500000000000012176743564016455 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/libfoo/0000775000175000017500000000000012176743563017726 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/libfoo/libfoo.h0000664000175000017500000000002012176743563021341 0ustar matthiasmatthiasvoid libfoo (); ./Listaller-0.5.8/tests/foobar/libfoo/libfoo.c0000664000175000017500000000011712176743563021343 0ustar matthiasmatthias#include void libfoo () { printf ("Hello World from libfoo!\n"); } ./Listaller-0.5.8/tests/foobar/libfoo/Makefile.am0000664000175000017500000000015312176743563021761 0ustar matthiasmatthiaslib_LTLIBRARIES = libfoo.la libfoo_la_SOURCES = libfoo.h libfoo.c libfoo_la_LDFLAGS = -version-info 2:2:1 ./Listaller-0.5.8/tests/foobar/foo_testconf.conf0000664000175000017500000000002512176743563022010 0ustar matthiasmatthias[Foobar] Version=1.0 ./Listaller-0.5.8/tests/foobar/install-sh0000775000175000017500000001572212176743563020467 0ustar matthiasmatthias#!/bin/sh # # install - install a program, script, or datafile # # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd=$cpprog shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "$0: no input file specified" >&2 exit 1 else : fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d "$dst" ]; then instcmd=: chmodcmd="" else instcmd=$mkdirprog fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f "$src" ] || [ -d "$src" ] then : else echo "$0: $src does not exist" >&2 exit 1 fi if [ x"$dst" = x ] then echo "$0: no destination specified" >&2 exit 1 else : fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d "$dst" ] then dst=$dst/`basename "$src"` else : fi fi ## this sed command emulates the dirname command dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` IFS=$oIFS pathcomp='' while [ $# -ne 0 ] ; do pathcomp=$pathcomp$1 shift if [ ! -d "$pathcomp" ] ; then $mkdirprog "$pathcomp" else : fi pathcomp=$pathcomp/ done fi if [ x"$dir_arg" != x ] then $doit $instcmd "$dst" && if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename "$dst"` else dstfile=`basename "$dst" $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename "$dst"` else : fi # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up temp files at exit. trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0 trap '(exit $?); exit' 1 2 13 15 # Move or copy the file name to the temp name $doit $instcmd "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi && # Now remove or move aside any old file at destination location. We try this # two ways since rm can't unlink itself on some systems and the destination # file might be busy for other reasons. In this case, the final cleanup # might fail but the new file should still install successfully. { if [ -f "$dstdir/$dstfile" ] then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" fi && # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit } ./Listaller-0.5.8/tests/foobar/AUTHORS0000664000175000017500000000010512176743563017520 0ustar matthiasmatthiasMatthias Klumpp Hongli Lai (h.lai@chello.nl) ./Listaller-0.5.8/tests/foobar/foo/0000775000175000017500000000000012176743563017237 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/foo/main.c0000664000175000017500000000143212176743563020327 0ustar matthiasmatthias#include #include #include #include "libfoo.h" #define ENABLE_BINRELOC #include "prefix.h" int main () { const char *configfile; FILE *f; configfile = BR_SYSCONFDIR( "/foo-config" ); printf ("foobar version " FOOBAR_VERSION "\n"); libfoo (); printf ("\n"); printf ("'Configuration' file %s:\n", configfile); f = fopen (configfile, "r"); if (!f) { fprintf (stderr, "cannot open file!\n"); printf ("\nPress ENTER to exit this program.\n"); getchar (); return 1; } while (!feof (f)) { char data[1024 * 8 + 1]; size_t bytes_read; bytes_read = fread (&data, 1, sizeof (data) - 1, f); data[bytes_read] = 0; printf ("%s", data); } fclose (f); printf ("\nPress ENTER to exit this program.\n"); getchar (); return 0; } ./Listaller-0.5.8/tests/foobar/foo/prefix.c0000664000175000017500000002106212176743563020701 0ustar matthiasmatthias/* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://listaller.tenstral.net/ * * This source code is public domain. You can relicense this code * under whatever license you want. */ /* WARNING, BEFORE YOU MODIFY THIS CODE: * * If you make changes to any of these functions, you MUST namespace them with * the name of the project or software. For example, change br_locate() to * foobar_br_locate(). * This is to allow many different objects that may be linked together to use * this code, without symbol table conflicts. */ #ifndef _PREFIX_C_ #define _PREFIX_C_ #define __USE_GNU #include #include #include #include #include #include #include "prefix.h" #undef NULL #define NULL ((void *) 0) #ifdef __GNUC__ #define br_return_val_if_fail(expr,val) if (!(expr)) {fprintf (stderr, "** BinReloc (%s): assertion %s failed\n", __PRETTY_FUNCTION__, #expr); return val;} #else #define br_return_val_if_fail(expr,val) if (!(expr)) return val #endif /* __GNUC__ */ #define __USE_GNU #include #include #include #include /** * br_locate: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A newly allocated string containing the full path of the * app/library that func belongs to, or NULL on error. This * string should be freed when not when no longer needed. * * Finds out to which application or library symbol belongs, then locate * the full path of that application or library. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * // main.c * #include "prefix.h" * #include "libfoo.h" * * int main (int argc, char *argv[]) { * printf ("Full path of this app: %s\n", br_locate (&argc)); * libfoo_start (); * return 0; * } * * // libfoo.c starts here * #include "prefix.h" * * void libfoo_start () { * // "" is a symbol that belongs to libfoo (because it's called * // from libfoo_start()); that's why this works. * printf ("libfoo is located in: %s\n", br_locate ("")); * } */ char * br_locate (void *symbol) { char line[5000]; FILE *f; char *path; br_return_val_if_fail (symbol != NULL, NULL); f = fopen ("/proc/self/maps", "r"); if (!f) return NULL; while (!feof (f)) { unsigned int start, end; if (!fgets (line, sizeof (line), f)) continue; if (!strstr (line, " r-xp ") || !strchr (line, '/')) continue; sscanf (line, "%x-%x ", &start, &end); if (((unsigned int) symbol) >= start && ((unsigned int) symbol) < end) { char *tmp; size_t len; /* Extract the filename; it is always an absolute path */ path = strchr (line, '/'); /* Get rid of the newline */ tmp = strrchr (path, '\n'); if (tmp) *tmp = 0; /* Get rid of "(deleted)" */ len = strlen (path); if (len > 10 && strcmp (path + len - 10, " (deleted)") == 0) { tmp = path + len - 10; *tmp = 0; } fclose(f); return strdup (path); } } fclose (f); return NULL; } /** * br_locate_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * Returns: A prefix. This string should be freed when no longer needed. * * Locates the full path of the app/library that symbol belongs to, and return * the prefix of that path, or NULL on error. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * // This application is located in /usr/bin/foo * br_locate_prefix (&argc); // returns: "/usr" */ char * br_locate_prefix (void *symbol) { char *path, *prefix; br_return_val_if_fail (symbol != NULL, NULL); path = br_locate (symbol); if (!path) return NULL; prefix = br_extract_prefix (path); free (path); return prefix; } /** * br_prepend_prefix: * symbol: A symbol that belongs to the app/library you want to locate. * path: The path that you want to prepend the prefix to. * Returns: The new path, or NULL on error. This string should be freed when no * longer needed. * * Gets the prefix of the app/library that symbol belongs to. Prepend that prefix to path. * Note that symbol cannot be a pointer to a function. That will not work. * * Example: * // The application is /usr/bin/foo * br_prepend_prefix (&argc, "/share/foo/data.png"); // Returns "/usr/share/foo/data.png" */ char * br_prepend_prefix (void *symbol, char *path) { char *tmp, *newpath; br_return_val_if_fail (symbol != NULL, NULL); br_return_val_if_fail (path != NULL, NULL); tmp = br_locate_prefix (symbol); if (!tmp) return NULL; if (strcmp (tmp, "/") == 0) newpath = strdup (path); else newpath = br_strcat (tmp, path); /* Get rid of compiler warning ("br_prepend_prefix never used") */ if (0) br_prepend_prefix (NULL, NULL); free (tmp); return newpath; } static pthread_key_t br_thread_key; static pthread_once_t br_thread_key_once = PTHREAD_ONCE_INIT; static void br_thread_local_store_fini () { char *specific; specific = pthread_getspecific (br_thread_key); if (specific) { free (specific); pthread_setspecific (br_thread_key, NULL); } pthread_key_delete (br_thread_key); br_thread_key = 0; } static void br_str_free (void *str) { if (str) free (str); } static void br_thread_local_store_init () { if (pthread_key_create (&br_thread_key, br_str_free) == 0) atexit (br_thread_local_store_fini); } /** * br_thread_local_store: * str: A string. * Returns: str. This return value must not be freed. * * Store str in a thread-local variable and return str. The next * you run this function, that variable is freed too. * This function is created so you don't have to worry about freeing * strings. * * Example: * char *foo; * foo = thread_local_store (strdup ("hello")); // foo == "hello" * foo = thread_local_store (strdup ("world")); // foo == "world"; "hello" is now freed. */ const char * br_thread_local_store (char *str) { char *specific; pthread_once (&br_thread_key_once, br_thread_local_store_init); specific = pthread_getspecific (br_thread_key); br_str_free (specific); pthread_setspecific (br_thread_key, str); return str; } /** * br_strcat: * str1: A string. * str2: Another string. * Returns: A newly-allocated string. This string should be freed when no longer needed. * * Concatenate str1 and str2 to a newly allocated string. */ char * br_strcat (const char *str1, const char *str2) { char *result; if (!str1) str1 = ""; if (!str2) str2 = ""; result = calloc (sizeof (char), strlen (str1) + strlen (str2) + 1); result = strcpy (result, str1); result = strcat (result, str2); return result; } /* Emulates glibc's strndup() */ static char * br_strndup (char *str, size_t size) { char *result = NULL; size_t len; br_return_val_if_fail (str != NULL, NULL); len = strlen (str); if (!len) return strdup (""); result = calloc (sizeof (char), len + 1); memcpy (result, str, size); return result; } /** * br_extract_dir: * path: A path. * Returns: A directory name. This string should be freed when no longer needed. * * Extracts the directory component of path. Similar to g_dirname() or the dirname * commandline application. * * Example: * br_extract_dir ("/usr/local/foobar"); // Returns: "/usr/local" */ char * br_extract_dir (const char *path) { char *end, *result; br_return_val_if_fail (path != NULL, NULL); end = strrchr (path, '/'); if (!end) return strdup ("."); while (end > path && *end == '/') end--; result = br_strndup ((char *) path, end - path + 1); if (!*result) { free (result); return strdup ("/"); } else return result; } /** * br_extract_prefix: * path: The full path of an executable or library. * Returns: The prefix, or NULL on error. This string should be freed when no longer needed. * * Extracts the prefix from path. This function assumes that your executable * or library is installed in an LSB-compatible directory structure. * * Example: * br_extract_prefix ("/usr/bin/gnome-panel"); // Returns "/usr" * br_extract_prefix ("/usr/local/libfoo.so"); // Returns "/usr/local" */ char * br_extract_prefix (const char *path) { char *end, *tmp, *result; br_return_val_if_fail (path != NULL, NULL); if (!*path) return strdup ("/"); end = strrchr (path, '/'); if (!end) return strdup (path); tmp = br_strndup ((char *) path, end - path); if (!*tmp) { free (tmp); return strdup ("/"); } end = strrchr (tmp, '/'); if (!end) return tmp; result = br_strndup (tmp, end - tmp); free (tmp); if (!*result) { free (result); result = strdup ("/"); } return result; } #endif /* _PREFIX_C */ ./Listaller-0.5.8/tests/foobar/foo/prefix.h0000664000175000017500000000633412176743563020713 0ustar matthiasmatthias/* * BinReloc - a library for creating relocatable executables * Written by: Mike Hearn * Hongli Lai * http://listaller.tenstral.net/ * * This source code is public domain. You can relicense this code * under whatever license you want. * * See README and USAGE in the original source distribution for * more information and how to use this. */ #ifndef _PREFIX_H_ #define _PREFIX_H_ #ifdef ENABLE_BINRELOC /* Note to developers: you should generally only use macros. All functions should only be used internally by BinReloc. */ /* These are convience macros that replace the ones usually used in Autoconf/Automake projects */ #ifndef BR_NO_MACROS #undef SELFPATH #undef PREFIX #undef PREFIXDIR #undef BINDIR #undef SBINDIR #undef DATADIR #undef LIBDIR #undef LIBEXECDIR #undef ETCDIR #undef SYSCONFDIR #undef CONFDIR #undef LOCALEDIR #define SELFPATH (br_thread_local_store (br_locate (""))) #define PREFIX (br_thread_local_store (br_locate_prefix (""))) #define PREFIXDIR (br_thread_local_store (br_locate_prefix (""))) #define BINDIR (br_thread_local_store (br_prepend_prefix ("", "/bin"))) #define SBINDIR (br_thread_local_store (br_prepend_prefix ("", "/sbin"))) #define DATADIR (br_thread_local_store (br_prepend_prefix ("", "/share"))) #define LIBDIR (br_thread_local_store (br_prepend_prefix ("", "/lib"))) #define LIBEXECDIR (br_thread_local_store (br_prepend_prefix ("", "/libexec"))) #define ETCDIR (br_thread_local_store (br_prepend_prefix ("", "/etc"))) #define SYSCONFDIR (br_thread_local_store (br_prepend_prefix ("", "/etc"))) #define CONFDIR (br_thread_local_store (br_prepend_prefix ("", "/etc"))) #define LOCALEDIR (br_thread_local_store (br_prepend_prefix ("", "/share/locale"))) #endif /* BR_NO_MACROS */ char *br_locate (void *symbol); char *br_locate_prefix (void *symbol); char *br_prepend_prefix (void *symbol, char *path); #endif /* ENABLE_BINRELOC */ /* These macros and functions are not guarded by the ENABLE_BINRELOC * macro because they are portable. */ #ifndef BR_NO_MACROS /* Convenience functions for concatenating paths */ #define BR_SELFPATH(suffix) (br_thread_local_store (br_strcat (SELFPATH, suffix))) #define BR_PREFIX(suffix) (br_thread_local_store (br_strcat (PREFIX, suffix))) #define BR_PREFIXDIR(suffix) (br_thread_local_store (br_strcat (BR_PREFIX, suffix))) #define BR_BINDIR(suffix) (br_thread_local_store (br_strcat (BINDIR, suffix))) #define BR_SBINDIR(suffix) (br_thread_local_store (br_strcat (SBINDIR, suffix))) #define BR_DATADIR(suffix) (br_thread_local_store (br_strcat (DATADIR, suffix))) #define BR_LIBDIR(suffix) (br_thread_local_store (br_strcat (LIBDIR, suffix))) #define BR_ETCDIR(suffix) (br_thread_local_store (br_strcat (ETCDIR, suffix))) #define BR_SYSCONFDIR(suffix) (br_thread_local_store (br_strcat (SYSCONFDIR, suffix))) #define BR_CONFDIR(suffix) (br_thread_local_store (br_strcat (CONFDIR, suffix))) #define BR_LOCALEDIR(suffix) (br_thread_local_store (br_strcat (LOCALEDIR, suffix))) #endif const char *br_thread_local_store (char *str); char *br_strcat (const char *str1, const char *str2); char *br_extract_dir (const char *path); char *br_extract_prefix (const char *path); #endif /* _PREFIX_H_ */ ./Listaller-0.5.8/tests/foobar/foo/foo-config0000664000175000017500000000001512176743563021204 0ustar matthiasmatthiasBla bla bla. ./Listaller-0.5.8/tests/foobar/foo/Makefile.am0000664000175000017500000000031712176743563021274 0ustar matthiasmatthiasbin_PROGRAMS = foo INCLUDES = \ -I../libfoo\ -DFOOBAR_VERSION=\"@VERSION@\" foo_SOURCES = main.c prefix.c foo_LDADD = -L../libfoo -lfoo -lpthread sysconf_DATA = foo-config EXTRA_DIST = $(sysconf_DATA) ./Listaller-0.5.8/tests/foobar/configure.in0000775000175000017500000000055312176743563020773 0ustar matthiasmatthiasAC_PREREQ(2.56) AC_CONFIG_MACRO_DIR([m4]) AC_INIT(foobar, 1.0.0) AC_CONFIG_SRCDIR(foo/main.c) AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) AM_MAINTAINER_MODE AM_DISABLE_STATIC AM_PROG_LIBTOOL AC_ISC_POSIX AC_PROG_CC AC_PROG_INSTALL AC_PROG_MAKE_SET AM_BINRELOC AC_OUTPUT([ Makefile foo/Makefile libfoo/Makefile doc/Makefile ipkinstall/Makefile ]) ./Listaller-0.5.8/tests/foobar/missing0000664000175000017500000002403212176743563020051 0ustar matthiasmatthias#! /bin/sh # Common stub for a few missing GNU programs while installing. # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # 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; either version 2, or (at your option) # any later version. # 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi case "$1" in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case "$1" in -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch]" ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing 0.4 - GNU automake" ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; aclocal*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case "$f" in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" y.tab.h fi ;; esac fi if [ ! -f y.tab.h ]; then echo >y.tab.h fi if [ ! -f y.tab.c ]; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if [ $# -ne 1 ]; then eval LASTARG="\${$#}" case "$LASTARG" in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if [ -f "$SRCFILE" ]; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if [ ! -f lex.yy.c ]; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` fi if [ -f "$file" ]; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then # We have makeinfo, but it failed. exit 1 fi echo 1>&2 "\ WARNING: \`$1' is missing on your system. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` if test -z "$file"; then file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` fi touch $file ;; tar) shift if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 fi # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case "$firstarg" in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case "$firstarg" in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and you do not seem to have it handy on your system. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 ./Listaller-0.5.8/tests/foobar/ipkinstall/0000775000175000017500000000000012176743564020627 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/ipkinstall/build.rules0000664000175000017500000000020512176743563022776 0ustar matthiasmatthias#!/usr/bin/make -f # -*- mode: makefile; coding: utf-8 -*- compile: appcompile strip: -appcompile --strip binary: compile strip ./Listaller-0.5.8/tests/foobar/ipkinstall/foobar.doap0000664000175000017500000000254412176743563022750 0ustar matthiasmatthias Foo Bar foobar Foo-ish bar Foobar is an application which does absolutely nothing. Really, it's completely useless! Things you can expect from FooBar: * Does _nothing_ * Bad coding style * No shiny graphic effects * Bad user experience The only purpose of Foobar is to be the test app for Listaller demo scripts. Please use Markdown for formatting! C Matthias Klumpp 5c75e44665b0c254cd1c6de462b256180d304c8d unstable 2011-12-12 1.0 ./Listaller-0.5.8/tests/foobar/ipkinstall/foobar-description.txt0000664000175000017500000000052212176743563025157 0ustar matthiasmatthiasFoobar is an application which does absolutely nothing. Really, it's completely useless! Things you can expect from FooBar: * Does _nothing_ * Bad coding style * No shiny graphic effects * Bad user experience The only purpose of Foobar is to be the guinea-pig app for Listaller demo scripts. &%?* Please use Markdown for formatting! ./Listaller-0.5.8/tests/foobar/ipkinstall/dependencies/0000775000175000017500000000000012176743563023254 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/ipkinstall/dependencies/extra-dummy-dep.module0000664000175000017500000000022412176743563027503 0ustar matthiasmatthias# A simple dummy dependency Name: Dummy Module Dependency (on Listaller itself) ID: dummy-module-dep-listallertest Libraries: liblistaller-glib.so ./Listaller-0.5.8/tests/foobar/ipkinstall/files-current.list0000664000175000017500000000041212176743563024302 0ustar matthiasmatthias# IPK file list :: %INST% usr/local/bin/foo ../../foo_testconf.conf :: %INST%/config usr/local/etc/foo-config :: %INST%/data usr/local/share/info/foo.info :: %LIB_PRIVATE% usr/local/lib/*.so.* usr/local/lib/*.so :: %APP% usr/local/share/applications/foobar.desktop ./Listaller-0.5.8/tests/foobar/ipkinstall/Makefile.am0000664000175000017500000000006512176743563022663 0ustar matthiasmatthiasEXTRA_DIST= foobar.doap pkoptions files-current.list ./Listaller-0.5.8/tests/foobar/ipkinstall/pkoptions0000664000175000017500000000023412176743563022576 0ustar matthiasmatthiasVersion: 1.2 AutoFindDeps: true FilesRoot: %INSTDIR% InstallModes: Shared, Private, Test License: GPLv3+ Requires: dummy-module-dep-listallertest (>= 1.2) ./Listaller-0.5.8/tests/foobar/README0000664000175000017500000000017312176743563017335 0ustar matthiasmatthiasThis is just a sample package for testing autopackage. Edit the "etc" entry in /var/packages/@foobar/foobar/1.0/prefixes. ./Listaller-0.5.8/tests/foobar/test.sh0000775000175000017500000000007212176743563017771 0ustar matthiasmatthias#!/bin/sh set -e echo one true echo two false echo three ./Listaller-0.5.8/tests/foobar/doc/0000775000175000017500000000000012176743563017221 5ustar matthiasmatthias./Listaller-0.5.8/tests/foobar/doc/foo.10000664000175000017500000000017012176743563020064 0ustar matthiasmatthias.TH FOO 1 .SH NAME \fBfoo\fP \- WTF is this?! .SH DESCRIPTION ???????????? .SH AUTHORS Hongli Lai (h.lai@chello.nl>) ./Listaller-0.5.8/tests/foobar/doc/Makefile.am0000664000175000017500000000022212176743563021251 0ustar matthiasmatthiasmanualsdir = $(mandir)/man1 manuals_DATA = foo.1 txinfodir = $(datadir)/info txinfo_DATA = foo.info EXTRA_DIST = $(manuals_DATA) $(txinfo_DATA) ./Listaller-0.5.8/tests/foobar/doc/foo.info0000664000175000017500000000071712176743563020666 0ustar matthiasmatthiasThis is NAME-OF-INFO-FILE, produced by makeinfo version 4.1 from bar.info. INFO-DIR-SECTION Programming & development tools START-INFO-DIR-ENTRY * Foobar: (%PREFIX%/foo). A simple test program END-INFO-DIR-ENTRY This file documents ... Copyright YEAR COPYRIGHT-OWNER Permission is granted to ...  File: NAME-OF-INFO-FILE, Node: Top, Up: (dir) TITLE ***** Some random info file for foobar.  Tag Table: Node: Top172  End Tag Table ./Listaller-0.5.8/tests/foobar/depcomp0000664000175000017500000003305212176743563020031 0ustar matthiasmatthias#! /bin/sh # depcomp - compile a program generating dependencies as side-effects # Copyright 1999, 2000, 2003 Free Software Foundation, Inc. # 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; either version 2, or (at your option) # any later version. # 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, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA # 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # `libtool' can also be set to `yes' or `no'. if test -z "$depfile"; then base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'` dir=`echo "$object" | sed 's,/.*$,/,'` if test "$dir" = "$object"; then dir= fi # FIXME: should be _deps on DOS. depfile="$dir.deps/$base" fi tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` tmpdepfile="$stripped.u" if test "$libtool" = yes; then "$@" -Wc,-M else "$@" -M fi stat=$? if test -f "$tmpdepfile"; then : else stripped=`echo "$stripped" | sed 's,^.*/,,'` tmpdepfile="$stripped.u" fi if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi if test -f "$tmpdepfile"; then outname="$stripped.o" # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1="$dir.libs/$base.lo.d" tmpdepfile2="$dir.libs/$base.d" "$@" -Wc,-MD else tmpdepfile1="$dir$base.o.d" tmpdepfile2="$dir$base.d" "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi if test -f "$tmpdepfile1"; then tmpdepfile="$tmpdepfile1" else tmpdepfile="$tmpdepfile2" fi if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 ./Listaller-0.5.8/tests/foobar/ChangeLog0000664000175000017500000000002712176743563020225 0ustar matthiasmatthias1.0: Initial version. ./Listaller-0.5.8/tests/foobar/acinclude.m40000664000175000017500000000316412176743563020651 0ustar matthiasmatthias# Check for binary relocation support # Hongli Lai # http://autopackage.org/ AC_DEFUN(AM_BINRELOC, [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) BINRELOC_CFLAGS= AC_MSG_CHECKING(whether binary relocation support should be enabled) if test "$enable_binreloc" = "yes"; then AC_MSG_RESULT(yes) AC_MSG_CHECKING(for linker mappings at /proc/self/maps) if test -e /proc/self/maps; then AC_MSG_RESULT(yes) BINRELOC_CFLAGS=-DENABLE_BINRELOC else AC_MSG_RESULT(no) AC_MSG_ERROR(/proc/self/maps is not available. Binary relocation cannot be enabled.) fi elif test "$enable_binreloc" = "auto"; then AC_MSG_RESULT(yes when available) AC_MSG_CHECKING(for linker mappings at /proc/self/maps) if test -e /proc/self/maps; then AC_MSG_RESULT(yes) enable_binreloc=yes AC_MSG_CHECKING(whether everything is installed to the same prefix) if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ "$datadir" = '${prefix}/share' -a "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then BINRELOC_CFLAGS=-DENABLE_BINRELOC AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_NOTICE(Binary relocation support will be disabled.) enable_binreloc=no fi else AC_MSG_RESULT(no) enable_binreloc=no fi elif test "$enable_binreloc" = "no"; then AC_MSG_RESULT(no) else AC_MSG_RESULT(no (unknown value "$enable_binreloc")) enable_binreloc=no fi AC_SUBST(BINRELOC_CFLAGS) ]) ./Listaller-0.5.8/tests/foobar/INSTALL0000664000175000017500000001722712176743563017516 0ustar matthiasmatthiasBasic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but needs to determine by the type of host the package will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the host type. If you are building compiler tools for cross-compiling, you can also use the `--target=TYPE' option to select the type of system they will produce code for and the `--build=TYPE' option to select the type of system on which you are compiling the package. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. ./Listaller-0.5.8/tests/foobar/autogen.sh0000775000175000017500000000051012176743563020451 0ustar matthiasmatthias#!/bin/sh start () { rm -Rf autom4te.cache echo "Configuring..." exec ./configure "$@" } echo "Running libtoolize..." && libtoolize -c -f && \ echo "Running aclocal..." && aclocal && \ echo "Running autoconf..." && autoconf && \ echo "Running automake --gnu..." && automake --gnu -a -c && \ start "$@" ./Listaller-0.5.8/tests/foobar/foobar.desktop0000664000175000017500000000037312176743563021322 0ustar matthiasmatthias[Desktop Entry] Name=Listaller FooBar Comment=Listaller FooBar Test Program Exec=%INST%/foo Encoding=UTF-8 Terminal=true Type=Application Categories=Application;Core; Icon=help-browser X-Publisher=Listaller Project X-AllowRemove=true X-AppVersion=1.0 ./Listaller-0.5.8/tests/foobar/mkinstalldirs0000775000175000017500000000370412176743563021266 0ustar matthiasmatthias#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here ./Listaller-0.5.8/tests/foobar/Makefile.am0000664000175000017500000000027712176743563020516 0ustar matthiasmatthiasAUTOMAKE_OPTIONS = 1.7 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} SUBDIRS=libfoo foo doc ipkinstall desktopdir=$(datadir)/applications desktop_DATA=foobar.desktop EXTRA_DIST=foobar.desktop ./Listaller-0.5.8/tests/foobar/COPYING0000664000175000017500000000006312176743563017506 0ustar matthiasmatthiasThis stuff is public domain, do whatever you want. ./Listaller-0.5.8/tests/foobar/NEWS0000664000175000017500000000000212176743563017143 0ustar matthiasmatthias ./Listaller-0.5.8/tests/tests-basics.vala0000664000175000017500000001703512176743563020463 0ustar matthiasmatthias/* tests-basics.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; using Listaller.Utils; private string datadir; private string foobar_dir; void msg (string s) { stdout.printf (s + "\n"); } void test_basics_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype != MessageEnum.CRITICAL); } void test_basics_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); error (item.details); } void test_listaller_config () { // Set up Listaller configuration var conf = new Listaller.Config (); // Set up setup-settings var ssettings = new SetupSettings (IPK.InstallMode.TEST); assert (ssettings.test_mode == true); string tmp = ssettings.get_unique_install_tmp_dir (); assert (tmp == ssettings.get_unique_install_tmp_dir ()); ssettings.invalidate_tmp_dir (); assert (tmp != ssettings.get_unique_install_tmp_dir ()); } void test_application_ids () { bool ret = false; msg ("Testing app-ids"); string foobar_dfile = Path.build_filename (foobar_dir, "foobar.desktop", null); AppItem dummy = new AppItem.from_desktopfile (foobar_dfile); msg ("Dummy application id: " + dummy.appid); string expected_id = "foobar;1.0;" + fold_user_dir (foobar_dfile) + ";" + "unknown"; assert (dummy.appid == expected_id); AppItem item1 = new AppItem.from_id (expected_id); assert (item1.idname == "foobar"); assert (item1.full_name == "Listaller FooBar"); assert (item1.version == "1.0"); assert (item1.publisher == "Listaller Project"); assert (item1.get_raw_cmd () == "%INST%/foo"); assert (item1.origin == "unknown"); AppItem item2 = new AppItem ("MyApp", "0.1"); item2.origin = "http://example.com"; assert (item2.full_name == "MyApp"); assert (item2.idname == "myapp"); //item2.desktop_file = Path.build_filename (foobar_dir, "foobar.desktop", null); item2.update_with_desktop_file (); assert (item2.desktop_file == ""); assert (item2.appid == "myapp;0.1;;http://example.com"); AppItem item3 = new AppItem ("Google Earth", "1.2"); assert (item3.idname == "google_earth"); } void test_utils () { string xpath = fold_user_dir (datadir); xpath = expand_user_dir (xpath); assert (datadir == xpath); string s; s = real_path ("/usr/share/../bin/test"); assert (s == "/usr/bin/test"); s = real_path ("/usr/share/./listaller/data/../files"); assert (s == "/usr/share/listaller/files"); s = Utils.build_filename ("/usr/bin/", "..", "share", "listaller", ".", "test"); assert (s == "/usr/share/listaller/test"); } void test_zfeeds () { Dep.Feed feed = new Dep.Feed (); feed.open (Path.build_filename (datadir, "libogg.xml", null)); Dep.Module dep_mod = new Dep.Module ("test"); feed.update_dependency_data (dep_mod); assert (dep_mod.full_name == "libogg"); assert (dep_mod.homepage == "http://xiph.org/ogg/"); /* Info: It is "libogg-0", because the version is set through "search_matching_dependency ()", * which we don't call here because the libogg feed does not provide implementations * for every platform out there. (This is a default-test, which should not fail, usually.) */ assert (dep_mod.idname == "libogg"); bool ret = feed.search_matching_dependency (); assert (ret == true); feed.update_dependency_data (dep_mod); assert (dep_mod.get_version () == "1.1.4-1"); assert (feed.package_url != ""); } int comp_ver (string a, string b) { int i = compare_versions (a, b); debug ("Comparing versions: %s and %s => [%i]", a, b, i); return i; } void test_versions () { assert (comp_ver ("6", "8") == -1); assert (comp_ver ("0.6.12b-d", "0.6.12a") == 1); assert (comp_ver ("7.4", "7.4") == 0); assert (comp_ver ("ab.d", "ab.f") == -1); assert (comp_ver ("0.6.16", "0.6.14") == 1); assert (comp_ver ("3.0.rc2", "3.0.0") == -1); } void test_doap () { DoapData doda = new DoapData (); string dd = load_file_to_string (Path.build_filename (datadir, "doap.doap")); doda.add_data (dd); //doda.add_file (Path.build_filename (datadir, "doap.doap")); doda.get_project (); } void test_metafile () { var mf = new IPK.MetaFile (); bool ret; ret = mf.open_file (Path.build_filename (datadir, "test-requirements.list")); assert (ret == true); mf.open_block_by_value ("name", "vorbis"); string value = mf.get_value ("libraries"); assert (value == "libvorbis.so.*\nlibvorbisfile.so.*\nlibvorbisenc.so.*"); ret = mf.open_block_by_value ("id", "mesagl"); assert (ret == true); mf.add_value ("Test", "Blahfvlshfikdj"); ret = mf.add_value ("Test2", "hgdufjhbudj\nhugdvh ushda743\nsuhfusdha7wdwe"); assert (ret == true); var val = mf.get_value ("Test2"); assert (val == "hgdufjhbudj\nhugdvh ushda743\nsuhfusdha7wdwe"); } void test_field () { IPK.InstallMode flags = IPK.InstallMode.NONE; assert (flags.is_all_set (IPK.InstallMode.SHARED) == false); assert (flags.is_any_set (IPK.InstallMode.SHARED) == false); flags = IPK.InstallMode.SHARED; assert (flags.is_all_set (IPK.InstallMode.PRIVATE) == false); assert (flags.is_all_set (IPK.InstallMode.SHARED) == true); assert (flags.is_any_set (IPK.InstallMode.SHARED | IPK.InstallMode.PRIVATE) == true); flags = flags.set (IPK.InstallMode.PRIVATE); assert (flags.is_all_set (IPK.InstallMode.PRIVATE | IPK.InstallMode.SHARED) == true); assert (flags.is_all_set (IPK.InstallMode.SHARED | IPK.InstallMode.TEST) == false); flags = flags.unset (IPK.InstallMode.PRIVATE); assert (flags.is_all_set (IPK.InstallMode.PRIVATE | IPK.InstallMode.SHARED) == false); } void test_components () { bool ret; var foo_frmw = new Dep.Framework.blank (); ret = foo_frmw.load_from_file (Path.build_filename (datadir, "FooTest2.framework", null)); assert (ret); assert (foo_frmw.idname == "FooTest2"); foo_frmw.installed = true; string version = foo_frmw.get_version (); assert (version == "1.0"); // -------------- // Test capabilities of resolving version names var lilibv_frmw = new Dep.Framework.blank (); ret = lilibv_frmw.load_from_file (Path.build_filename (datadir, "ListallerTest1.framework", null)); assert (ret); assert (lilibv_frmw.idname == "ListallerTest1"); lilibv_frmw.installed = true; version = lilibv_frmw.get_version (); assert (version == PkgConfig.PACKAGE_VERSION); } void test_playground () { var conf = new Listaller.Config (); // Just try something! } int main (string[] args) { msg ("=== Running Basic Tests ==="); datadir = args[1]; assert (datadir != null); foobar_dir = Path.build_filename (datadir, "foobar", null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("basic"); tenv.init (ref args); tenv.create_environment (); tenv.enforce_full_verbosity (); test_utils (); test_listaller_config (); test_application_ids (); test_versions (); test_metafile (); test_doap (); test_components (); test_zfeeds (); test_field (); test_playground (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/tests-database.vala0000664000175000017500000000467212176743563020766 0ustar matthiasmatthias/* tests-database.vala * * Copyright (C) 2010-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Listaller; void msg (string s) { stdout.printf (s + "\n"); } void softwaredb_error_code_cb (ErrorItem item) { GLib.error ("DBError: %s", item.details); } void softwaredb_message_cb (MessageItem message) { msg (message.to_string ()); } void software_db_status_changed_cb (DatabaseStatus status, string message) { if (status == DatabaseStatus.FAILURE) { msg (message); assert (status != DatabaseStatus.FAILURE); } else { msg ("DB status change message: %s".printf (message)); } } void test_software_db () { bool ret = false; var setup_settings = new SetupSettings (IPK.InstallMode.TEST); msg ("Opening new software database connection"); SoftwareDB sdb = new SoftwareDB (setup_settings); sdb.error_code.connect (softwaredb_error_code_cb); sdb.message.connect (softwaredb_message_cb); // Open the DB sdb.open_write (); msg ("Software database is ready now!"); msg ("Constructing fake application and adding it to the DB..."); AppItem item = new AppItem ("Test", "0.1"); ret = sdb.add_application (item); assert (ret == true); // Close & reopen the DB sdb.open_read (); msg ("Retrieving AppItem from database..."); AppItem newItem = sdb.get_application_by_idname ("test"); assert (newItem != null); assert (newItem.idname == "test"); assert (newItem.full_name == "Test"); msg ("Item is: %s".printf (newItem.to_string ())); int count = sdb.get_applications_count (); assert (count == 1); msg ("Software database closed."); } int main (string[] args) { msg ("=== Running Database Tests ==="); var tenv = new TestEnvironment ("database"); tenv.init (ref args); tenv.create_environment (); test_software_db (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/testdata/0000775000175000017500000000000012176743564017016 5ustar matthiasmatthias./Listaller-0.5.8/tests/testdata/test-requirements.list0000664000175000017500000000214112176743563023410 0ustar matthiasmatthias# A test-list of software dependencies Name: LibGCC ID: libgcc Standard: true Libraries: libgcc_s.so.* libstdc++.so.* Name: Xorg ID: xorg Standard: true Libraries: libX11.so.* libXext.so.* libuuid.so.* libxcb.so.* libXau.so.* libXdmcp.so.* libXtst.so.* libXi.so.* libSM.so.* libICE.so.* libXcomposite.so.* libXdamage.so.* libXfixes.so.* libXrender.so.* libXinerama.so.* libXrandr.so.* libXcursor.so.* libXft.so.* libXt.so.* libfreetype.so.* Name: MesaGL ID: mesagl Standard: true Libraries: libGL.so.* libGLU.so.* Name: ZLib ID: zlib Standard: true Libraries: libz.so.* # a buggy comment Name: Ogg ID: libogg Feed: http://services.sugarlabs.org/libogg Libraries: libogg.so.* Name: Vorbis ID: libvorbis Feed: http://services.sugarlabs.org/libvorbis Libraries: libvorbis.so.* libvorbisfile.so.* libvorbisenc.so.* Name: OpenAL ID: openal Libraries: libopenal.so.* ./Listaller-0.5.8/tests/testdata/doap.doap0000664000175000017500000001257512176743563020617 0ustar matthiasmatthias DOAP 2004-05-04 Tools and vocabulary for describing community-based software projects. Des outils et un vocabulaire pour décrire des projets communautaires de développement de logiciels. Rīki un vārdnīca, lai aprakstītu kolektīvus programmatūras projektus. Инструменты и словарь для описания коллективных проектов разработки программного обеспечения. Werkzeuge und Vokabular zur Beschreibung von verteilten Software-Projekten. Vocabulario y herramientas para describir proyectos de software comunitarios. DOAP (Description of a Project) is an RDF vocabulary and associated set of tools for describing community-based software projects. It is intended to be an interchange vocabulary for software directory sites, and to allow the decentralized expression of involvement in a project. DOAP (Description of a Project/Description d'un projet) est un vocabulaire RDF et un jeu d'outils associés décrivant des projets communautaires de développement de logiciels. Il est conçu pour constituer un vocabulaire d'échange entre sites annuaires de logiciels et pour permettre la décentralisation des informations de participation à un projet. DOAP (Projekta apraksts = Description of a Project) ir RDF vārdnīca un to atbalstošo rīku kopums, kas domāti, lai aprakstītu kolektīvus programmatūras projektus. Tās nolūks ir kalpot par datu apmaiņas vārdnīcu programmatūras direktoriju serveriem un ļaut decentralizētā veidā izteikt dalību projektā. DOAP (Описание проекта = Description of a Project) - это схема RDF и набор инструментов для описания коллективных проектов разработки программного обеспечения. Она предназначена для использования в качестве схемы обмена данными между каталогами программного обеспечения и для децентрализированного выражения участвия в проектах. DOAP (Description of a Project) ist ein RDF-Vokabular mit dazugehörigen Werkzeugen zur Beschreibung von verteilten Software-Projekten. Es ist als Austausch-Vokabular für Online-Software-Verzeichnisse gedacht und soll die dezentrale Angabe von Projekt-Beteiligungen ermöglichen. DOAP (Description of a Project / Descripcin de un proyecto) es un vocabulario RDF y un conjunto de herramientas para describir proyectos de software comunitarios. Apunta a ser un vocabulario de intercambio para directorios de proyectos de software, y para permitir descentralizar la forma de expresar el grado de involucramiento en un proyecto. Edd Dumbill Vincent Tabard Jorge Santos Heiko Ronsdorf Josef Petrák unstable 2005-07-12 0.1 ./Listaller-0.5.8/tests/testdata/xfile1.bin0000664000175000017500000017245012176743563020710 0ustar matthiasmatthiasWMxUP\0݂{ AfpB x`C48 lpw߷UO]uOsӿr=[sv?"qqq'.(.*'``0 R'oo=Tqyჽ[Ӻ4! 9#`-}`%s`Jw%<F->%ۃb೾65ӧ4ԕ 3?[{b./TD ֔ԽX}J|}Kչ+d[ugŹF=3wns=l;a w^4QI R_VY1Q9,䮊]Yk}z>jNG[Yo4@9Qune sD`FA}{D 2M11Y1Lw;2EBݽh tP=qߩQ¦A<Ѭf 'e2؛ڈv̟M٤M͖|lO_[蕯ȰU#y"C%O)<\]+ }MYcPoWk( #Uyҝ?U% MއHn{Y ')k1vO`w[/2(UVhR3YkŅ#\}2H%C!bQL5 ?Da@B&j ՟w؋rG_p9 _ٺՄnTD]a@˷,xNXYZcNal|7|L(;y]o&r>awF#`Z&G" S:;,&HXh+=!KX0!bV+Y;ݧAC*s2~TnQ2OLѭ& -k۔Y3LU{l>sɈl@@Sz)  爢J(fm1f}fd6+L=Jޞ7P2V`~x L20rQܪUkD?B}jP%qA(M`coOAF-H}S/8v>b, 5zbTaե-{Q&nͽ : GЅCÀp VDÝO"[(&˺䪓QAq_ JQCX-9,vw+աvwƩ[Χ9w^ ԝH1gqEIttһڎ9ыӑ=S@JRɔ>b&{.*{QlV:.A}i]o'p' ;cI|g,&eG9p Ս M?tUp /ΚpG;'.l2a❸S `#`] Fe Ǹ5?Q5I ~->p).|qLԅ16g  3c&)i;GEu [1d*mO|b{~`C &"_?X|AYZ ='xon{ oݢc`z#jՅ){~ZH廮*2,CAh\fz7,;7˛wD簀:_P%L SVbQJЍeORd'4:C0x >~)Gm ZWeމZ|ف0~-;71 +ϽV2`RaT=$QwM_Ͷ?G$[ñ&3JYrj4Nw ]-tLůXDq0a010!xsV%ݶ#*Xb,}c:Ӌ<ڭ֌T|2oc~}ޗȋyeQf%i5MA&D 3KfvSܐ ya/ O A-{(F7b FQGNJɈu*'ºiU-~,cZ0% S~nWkƅNͻLs\;IZܵ`ZS5Vm9Ji`ӹMzܖ9*B$_ 0ȽvHq%)Um#-~^ x( }Y\w"|JqaɆ*MEt^_8WJD{oNi:K_'~6 |޿2jZ-)F].uqsQ,F\E A Eh-'&Џ-y(}S#4gH)w"_(@nTu\"~r[{'e[O|OH)OTD=l ܌XiY@q+0LR#FYArCg=k:j5TyWc% C3ȍ#?ۏgqujWpYXƎߪ5IǍnf67\ԧqȋ]qgPV"~ɨIEu e0-'8:˱1 :s1zMT>ļ.`bYnRHm sv =8A|NJJTu;.0Pa_8ؕf%PS>EҮB4t!cr! nS^W?0]ز?Z[.c>1XK{- v?#c5jaa$FRhwZݒEa_1>K[|Ind޾WvUtX_6u5$*Ҧ-YLee>f]څↂ "1[ W#tԱ2:ΰ2pCgu*W+jNl3KdWzo?k ޖ(|HkxXOMT-Ebz -?tˌĊQKXuy|Ҫ@-#e+{i5¼fL}:6 Ke?dPԚl@n[Nirٳ=/@{ЋSeeM"$Uq 1bNFnx82`TU8UF}~9SLOWyRrDek:4{}詵ejLˆ/dI6rZ[B80u++ /-jKq+UloNi%z>u,JCS&4^CyKr1L}͉ W41hP"j5vN:s kXz,le"Ġk96^+Fů(]ΨH sUPe~+d=nE8L μ*EWުQ@q'l3eϿXA Ǭa`lGoʬlh,Qwιn=\:!<ۦ342pO?*ٹʱ:śg6-&"mۼA_x^m,,M y;m @Iƿ$8JRveBvN l;&,$ڪ<S mitx؜пV q8?<^=Y3Mu(KØetA8+)߈Iæ]8( =k䗸/!t֮6щWG6͊lr=cĦ`PIf&wȆ8zl~pl, [9WVD] yq\TaeOrMjKπݾgN9)EЛL `UHiTda (;*v׍W]>Nt+Ek\Mw\?7S^l۱X{0~M*p>$p۟ 3+VĪ(ڊn?:ʀ Kt'#bKts<̀hX;=X W֦Awe&"2mv?"nJG2gjDZSbg̺Gc|6 Wp:H:SG(Fh?BCo0\!9ls[elL\'ր;Wg ؕJx} _AɔL; bK%ϨI -AUA.12Z`[SE UA=X=%Upؼ^GSDžܞ7khEL38~b}gIq\wa5?S a.d Cq * I24 1i~ 'wX_2ꨴ}jA/Xؕ#vNYR.W刃, }?ܘZݿbj>vb6H[E[u& $К=)@)㧍O.tE(~[ e;Nߵ掾(-Rhn _ ;1o$7 K/@9]@RP--Q`[_? qP${i#lB5f (Q #!XQNN'so׍M@ޚ/&Tb 0ad5ksLa#7L&D d:ΛnK ߐ,7\__|:C{RAiMSת3aSpY=GY-']8urrJgjצ yQg}]6;+3>i QG[6\?+וtI A5.k"ߓl. |4EnaQ%#iwwrrp@_u4`dChPux:#15:,bDI]MGO s?l]wG=nWg2VS_ӖRES!οLt|0LzVˈ'>ei)d2Oq p.9,,زo.H^>h/ fh%TI7hdd|rOsTBnsKܮ}>_maYv Qo|zYk钠o}@@T< t3f%{[h SEGȘ+csu7kQ2kcha`8a}QC5Fv˒n׃(aF}j=s9J|R'߹owr咀x`9JBhe$H^ O9}d{ϧ@bKC[UϏvGݫo:+u6OS;-3Wz˛6o?yOCZ\5*8vbm_L9 $[6A8H|?]. \7Ǖ"Zز+CϔXSofſܩ/[h"մ<]pJW=XvSpV][qxF|rO0H]y?LiU@ NxKyC&~/F&(EL,F]DJeoV][V &9!MGs*_ܴ)ےx61܂#o)RKm|fݬŗlTR3:je2gr׼&pNTF!.?,Zv~!zl`́8g6^ \ ]U?1Qi(u)PK4ъ 62Q;}1sO6jGGsDMg -f|4ׯmgYxPC{ޏ xƚ ߧ 1UfZx>9f"A.:?;RhcbCQK;ދ{nJAKU/&Z*ĵ3h*or~hۉo z9@ބՍG5+Ɲ-EٕV )vo0\j Kv0E:6i4 Ca43 ߐ qYp ?P i+ AX'Nak޵?a`\#&V1/Cih0 4NjΞ8lϓq/{[+(hWҪ]2Lsw[~2Y"ʡqm~@~n- xyr侕CW^ۙWiq>4rFe0i͍eﮣ봽HXXl o@~je;ȠHϋRnk1~\6ٴ}P{֯ͱnMsD|j }tm#"@_L sά>ՏdP,LUͽy>hT? 9cIgKl6m7tum"sّRP*dyqo++]͜cG6_(;LujCs:9iiˡvLZ4Uv_sQT!2$]! 64zCݵ\%1KQ? '<y;̝ Yx"T13=~ vko4z{oXoۣ3'cfnPeW {IN :sP4MpexQKTa%Ȅ eqY`g.6;<>|E訬{J @ٶq;f[-;{k$g~5/OWƗc~ݸr.IeLX׌DǰJNn|!ĈKe ~eDlsIхrrnĻ}6ͳJ @_6=ٸչ}-W ޤx(x8tv@Dhx@ㄳ~4k.l]n6h^0#'t+2T[r0Gb' T@}RE7vO=zF N~/1}٩s ٙw j?$0FiTh}{o0VA*{ GZ%o)?+)r^‰P?u nNNZ_Aig7#ygTΗűΨJtn+ƀ2exo#襚_HO}Pݝ7ݛ9y,j;eHFnrOIxK|BL%q{\t\0Q}}֟3anMb^yUyJ=~v7G7Se\£|Ϥq #DgL'W7o+r|U6_{ !NmvDMA!Hߵ0yvH?rOYi3OKQWv=9oQTw0ll-vPꤰG |4>Bw PQ702+)=20Mʭh7e Ц>ѲЍ*yl1KE]_з18iA7\yKyM>+zorW%?f>↫=t }hFi`֝p3*[ :\Lqᅮx7W QrB+YT?H5c3'L8QRTlT£Bg>oZsRU.y$vcG(0AwK<9Fem"Ӯ-G}#Q Շ =yboqRh'Uشtig`DI}|E:7uP֛.+R5d>Fɘz ܶEWKϣSqm#3utd` 3o\ mz˰Hn{c'8_)cG|ƭ-8.oE 10ɜU-LQduQk{KWE$&;ClM?j1\ˇ}}? 8暿#i=y}I+TѮ>39au87Z_~ˉW`$upf~yՀZ+?*v Q6TVR⯤es]}N~kRIdvWnr|Px6us'8Vj7 ba9M.}6R&gӸԚVr~۟-bE`lN0f36>KpgHuYێ{E_tPr;, r Ր;ʤo9 N"a]aтBo?/"lPgtTNCƦ'U D;DFSƃ+ <0XkJ#^[~E],/'^_B O2&q5H14]`d~4:`n#D =Iqgs m@Q@m_82m 6 }2[;=&Vuo7Q o̚{j1_2[|$2}BgEeDXQ-_NҘUğex1T($͜)5N:oi0<-C^' l| OB<SKoQ{7Jt'ArgA9¬gau$Cl@T@*0|!d*+-E{amXrPOG4 T_(b9g^\NRt!Ra᰾jMNs 4v+V/" aƑt ;a1R/Z8xq/p `' C0 IGнR72x'}LܥBIvӾr)ށԴvnl| fY#W!@ [REReܘv -Ddba7'+!$ƉMТ\a%TL؋Vɟog EҔ뿖LX.m;ч+Wr`e{5U,L׷4iTtLd Uo5iI*lhf %@Dz lT|o΄%9h<} IIy"pj}㺠-ƂleUQK7J/˕g?D ]JS BJegwY &Җi܇wiٔAakF4BŒXJU'tB&]K=j+ zybWt`G6XV*Xso+l[ZPT/F|D}.AX;+&qhyW_ PU譹&M AǴut޻yp/;9Yhl7`'Ƞhiofێ5chn1E}3G-;OR*cek+d}WT~Uɴ?A7>2ߪ3=@L]a pj ̮T:&.i_g(E!g zWsX${c?퇹9@}[CI珺X?֯RXYfk =|V*32A5 ¶($č|.}Zxd>"S1_.*SǑU_T]MQeb}=g eT4weAd,sf<# /$~6 Aq74-8[ED ;0Hw%cI (yԜ ?`v(%#gS; 4PU@VzwT+`߸@cЏsǖ۝y“Mwp'&ƌb2"Xա0UǺh^%R\':zdr5;N#W(]UjlԢc<6Yq^b=8꙱B6 ZuPp2ƵU 'wtfZTY V8dK*])',o|>{ ;BXX0M=$=X[jB}ƥ)Fq tGδ)PoZ*kD7=I+n|Hs}<2Ŧm?9{/7[PL!yjr<5G0i>.)72zpc_P>?9Iu.(`"0*ob" WJ NvgzIF/ERbpj@JR@RɣtPs]c۝Ck-.-o^ Pr13ϭ𤶐P!w]p'*H*7 4hF. Qzür4}> Tީ?W&Ԅ&\u->kr{E|rrHn"3*5pDg_p]W36-R"v>W.koi1bZM X/0 )١Yj+4!A ;Y_S-;r3ЕyGr-!(q9s`T{kM!(y43_@oȞK{K2 H+! F 1,w9} B=+Y:'sCQ-idqacBEg+[ p6j+i h ֐G+_LӥZ-Ϳm n%!$1\+dSБuE~Jd ?s#V`ڱ{-+&wS9Ő'3cLCssq֓FI@7OqiFb-+&DQfg2%Wš(U;bѓb1:-~' bZ{긥 B8/S(:aW_=E4sJyZ%5w+M= fk:rgwe˕iy3I鍎;a^\zW4{?p-KKh"3/Un7{b1O(bb DJr5%: rV ] BH4IY,7>8_)$B h)J^3LiA-QP|CdLu?Z;ʜ(Ӌ T?+='0CA9Z@wo?r,@XUX4m /sE_>2tErf1IpOYEd GsuY-w?7ӃÞLP>E%(br./_` 5`%`0n!.#$A%y @@R1'՘+e+G~n.NH {[VvqZiSTmDY ح{fBt5֘83j0Qa\Ϣ)hp/wԿI~#=B%gKʅG;H%7q:xb0HuG 'sCAvy1}tA}~DI)-眆9 +0<~uLFi!-sMcxG-NS4W?jR;j\%`+bv€#/I6at&4fU>Os&>,wKf!ͧX?\/F80I.4*;p=6V0Q/7'`3;w6:ޟǏDFHo%AXfNۍXwXdf$`_Z{SkYK['9֙|ɠUvVx\t eS;*$|FN &GB qfںE@=Y+q/l2)@AΡsMYL9Moo+ȅPOuݳh lř5#mkpuA&hÙ7oy[YBnv[S!ON<=RQ)wb]ɔ$eڵuy^q5: &j p`MQw]P"}E5Gmh=Z`.[cʏrdֱxn^Zűcɱ4ѿr%prQW娰8 7q؁%/m ݂=T24je_&_[m<B:S0Ї3@ic3r*NcgHo+[6f!1Ҏ4$ş} 4}u9{h:WEEN#'9 y6G+v> ( ʬ%Ix~# }Ȳp&TR seE"*[Lx~L|Ux>KG pOa§b .Chjh6sI l' *30IX@w@ nĄc| wx!ofbțU-ghN^s"q=ړZȬw{Ph=̾\KcQ~K4>A ܧXrl" Zfk:߉P3mRhIPEIzrOc3$yIl %| /2\n15"_G~]K-ޜ ˕ˆJ od6>)Z P\*CҜUYSjt_~j-nw`9ZL{<'^} vr ?P(L-m:$P RxyBd>/ Fr~s5l:lL;c>\8in +40ZE)3`41&N}.Xajٿ:G?(2˸.6Fw#56BRTPArR%JPJA%DBr4,~{ι?sgŊ,HiX-*9V"Wo>M2-yHdH^ׁ8NO.+Yc s%1ܠ >U !D=;4V'`I*KF>WJֲ^kU Ҋ~6]4t'oz?pE%4 u=d581Eo;z= مr,X`ГS.Bj>P*QxleLsV-B'Yp>%%Ay0ܙlpExHhQpH?=ePdY`WΣ7WH5 Zɧ۔>XAiw#&JWi&s#n|O/UK)DS?iAswPk?}1v}St Tߘ %%a:|uXɂ. j/{5 2CYz\.'c@ Km` !\C˸Q4lQOӫWH೨S}'(ptw]Ζ3͡l:%uCr5e P*%bɱmH;Y0?fy#Q;jm h:&z,(Df{ E!r8x\ 3Vp#E7zadZQ-/ْb5;?R!LtQ& rHx_(J{>+ }:\Ѯqa&R3 7Bp8I۽(-YZdDzhc?B}^}O1 3is(YF ɒ?UyqY8;%7I}9|*ЕnphJCh~󈵦{짬Iyُ6o ;tFcBѣ[mxh={Ʉzp󊊼WТ:?BtHN`|L7%$0bո*ufN=$Wu'M);{ŅArmal.pIQv{1.,B;cM)Gʫ ,1F'#_.\iɄ)ԣdx):sB(;؞d]V,Ք6QhA=*x홝$ VA3e7(f'ˋ^B4gPA0MjYAgm 9ȱe8ȭCoަLѣ{_o|$fIr>]b'S|"^d"`LuT>ū1tj7>9N!Nn u 6dςI 1f{|bm\gh4W{=S54;UkWCP a05|ܮDq0C(vnL*;etq:0{z8P!XLҬ 9' JH,YK)soV -3[SCoZe_5s^{z?«Y4cqKKk ɦ<1H72C9DD")^3_n`2a1~&#zQ<`\Uf$vc73`6m:Dj+q;^;q֨Rw;C.a?n=퍿U闹򗒋ki2a>l6v\PCkw3$DSђ'"235HqV =ז@;%蔿W쥴𞍃`aF@H=':MѰ^f-H餝S{dȐ2In>o.i?U3A׫Yrܵ+ 1ny(U1܁LPBydKݨ >ezL_H(vKo쳄yOɑxܴ ƚzR7S@'/ VD"yW;x$>Jj/ d!5hۤ4 WΗ}kbڲ@AӣI ^Dr]|@=cW-:1$UIDFA ےTߏP&_^)3Ce?f_ʍ _y=2@uQse|)W [$"0@+˓i F֨b?[AIr~sOMx R7UA:"|P}Y荀CmM'M" $9%wCYNXV<.|m]Mw׭GE_KD3Q[knWSk Qn&9wVr~+cGvcbs09Q@Gp_!,4mJ"Ӿv;# Y"mt>Ț=xܺf` W.:x*:O%*RWS?0VsɿͳS:C^Er e`q@%R(Q޸ nQAEQyi1<^єoY\oR#^7'=5 k}m|حxwSEŦ @!mJo}؏'MVā3[8R!p'" Y.- 6v M_~MU̍XZ^y.eA/B2]h%[}1qlX< kgzOSr8mQ.AQNVS0B$s}IxНcT1O0hixP7󗲓oe%ĄktIN8\~MܣpGTpW*p:<?[>#ա2O<{.^s“4e92;Hsc LѰ9>M ΃g?LNV|GNjT*ScT+$`fO hД>~U"eb4dS,jSRcf|-aH?!;BS48`#j4ϞXA-]&*yRYp~MsYFА,(`w#}%陻J6.[ShPDQ]DYP7h s:4^i Uw/9F:Tm"'GA3o̽N$Ģ&sa&OF9"|lp+eg a0`xޭ\gZCPYPNtSx B-R׮e7qFNݍrDAJ"Q@7ߵC}( ?(D?,?̆Oɷ[3}"}g0 7fNV1r[G+8'hP#R!|̜ cf!*S3oSEp2u嫨F pc: 1S6N sW2V-Z ͼ0܇_.J?gH^tꞩ԰`~dLzɼ gcGP%}/ɢB:Ѱ S&HDgekHAsc1+ 0 LQL7 *QZ¦`;_=NMQ,Й:mjcFx 1 @w"ȝVU $Ӯ%pgF opcA كWWW.Ū\4(U05z*r9u *46-Jf991 y7iyQ(vn`2_s,gsxl \. &8"gԫ3tBq09 t({/;|%#h?m мfb,4^jx` 4!l0$OtV?v.\7}y1k"kjZVD׃?ݦޡwtkDW8|iwz$a]i1vⷉ[P8*0ptd-Y a4)5'veE0:W XP>&lgުsȤY#q\*3HZ~>Q$I==桮%Aןh"3Ka#&H\5,H ҷmCcVKY#ƥp2=/M@$Ez>xO+ {v FCFC-'b0x#MQ|L, e^qkOj)i? Ƥ|v_oGyy inTQx*[՘ڞÊW ȗH|F$!'/{Oq[kvwӐT1^P,QN{.(RGB]kr,"FGeG?H'qN7 ֺ@f\q.Qy>(z\L m&k[y=͜/ G7s'Q!@#B:w;E&h^4b<`u]ODtÀajiPD*Ctyc<\ӴXk2p$OlPRő"Hu z.PɊ=.SQ'G?2<̳]"M0VQE;=sJsҒ% -w\૮h3r eb>,*%`BgR^Úd{ г;d@,LL _b;H5!/ Hm v3MO/m=6._-{6#NVߖUfr`مc_mz3ȁ;uR%SSMɣHR2! I[W)}R') ,+Y5WO#W<."C2TC})7*N{d\ "a6XzX|6T?9 2^7~b.;[+>|ag Q}[?GDj:<."zGDֺ٪HGFw2QTZB෵%z%\~fB]W<_^eC6CIӔ4/o"FW" zMˑǑjɰs05p>Y0_)tpd6Pׁ50PQR*h fR%P@b9 *Lv]2剻/Gd l I5EZOe&q ;FBoׇN3b  ILOBZ=aA|YS6vӃj8(b6R*ɣ U(RĬFIpM=f2(%CSE2oIPzE=|icj# -+Z]\tWJ4֗dg|v0)ҭ_EO_|B7_YuD,ÀO4Q A>3f$UVP5[YHij Ž*½ s݅,bdGC„#q`a1ث߃0߉ؽX=ѩo]*%t Nyo"N+:6j4<՜tpDQ&_A$N9c` [aQ4¶NK"U[O5\Ď4vdq$|-7ܵQy 6u/=cz'Z FpQzTOI:tc8FQюu43},$&Ccؒ%eII]kԭ~;XP2ٺUyJ.rhB˝^1%i@;n=Kk Kc\e7XvgjEhWo&`&Ng=rm dLe&dQǮ|뗍7dʠ;!+ga\wH̰-RЧxg?A|ܑFȧ$:ۦ4ƿ1e!( 0렝R!8@1v5ޥF9Z00!pFu3 a@&r+|C0ad0>', :-?G}h}rxTd EvluFH_ZE\LƲl@OSJJ:Q=1LaD32<d1om_v q|]u}H<,)m"ю#}Q;])N|q v [!ܱ.]C|p j&8O32}#$FbbJnbݽ1sD)l"9uKgO͋()q;'#/}Az`;u͑cmE^#5e2{uG]#Tq/PQwӑPBE/lW68w#fi<[Ҁ0-c۲`zb+. %B̗J^- (&4K7MaDL!B]&;,KJn}JŒk.VGG)`H1d0tHM2=v0b ;2߈g)5'\,T//Mtd)z}9m}+ӚY1d*iY#K j\˫'nOA2ZDΰ]򯔏"7좕ŒP.Dr!-_:Ů?rX eibK.p%OR/CBAPm؁2y Z6l5%G<2ߴՑ~M{gj/?]Vu|NT,kP;\w*i &ŕmlb5N3u/,CI:?"D=!#/V[xCO08v~u:@bIh@cǒv,\J hQ=dZH2WYeIO6Kf؄ZFُ}l oƞG6Þ&^S&Hн&o3ɨmXvps Οza᳐w1&k`@O9fR?/%, u" B C|5x}eؗ*?;TD@ MiX$b3y!v,`6{2 AT7ϛ JȻ:q5yL; 9!!ɶ: '.}!jz@O@u }·*d|TeWda3!-C%3>.m8ϔ$HkPBZu-#H {&J3 ӰKX7m)Ab>|_mHsU9 I=&B"r *]w^w;)jִH [PM45vYܶJhd)SR>l+ u[:]Qw(Ðc\ozp]&KT8ssk2s5<.{Lb1-owceU,=cB,nZT卟5 3PM,jl j)\j'Ğ{qG; bx%r"OEbBRrʄP3n.ǚC2Gud_u:S(;_=2uQb"Yn_,龢f%Wg!ܮ3Eܠ].-ط:bG#_lKFxWӞr.ľ'v/M6{"m} N~4u! ^/m|%.7.<PY唏|M >gUR)-;ϭլi'Ripa,p.\PO}/Ei!7 lpytJUS߾LlR >2E/)x,CkC_L"3'vl fvwUH\lk]}IxBœ!ESn@OO tgM_l.۝34~&Q!݉3D0Z8΢н bkxyAk(k|cwg*Db> ڥuʋځ׿Jq~stSt6_- : W\UMfrӿw<_oA&6*28 /~" 3y|y&e_Wtq tkbj$O^'?t'c#dQAش^,'356<Ґy"vwfE>J:U).v9l'S]um*5֗#H=2ˈa+`Xo7峳ZD,t@.Rn Ym}G&Ҩ[?¬2X$A+(q1V#8\q(藩 o28_y>4~>vf\pῶdLOڇD|ւb9Xa_S1m=Ɨ mc('7GT\ ;z(m,TܾVDSmf>*tO.D HArNش3 I,]~,A_ջ,ꠇ݅Sz7eT'c3cFQ]%`B9>+)0`Oʼn֩[wNV#E-xЇ5FDo ՈwfY]^He[)@?r, ?|zI".IZ;2ǒu"G ][agST2m(%0oWoA#~Њ|}<z5=s7ۃa{2*8WnYZNbrۍʎ ԰guá9f j { p"'…ȿڐ|]K8M w{+ݒX{ZTYBZ1g$^@'49̱;9^!Y:+: ?bK,_ 3[P़'%:Sc&5Z"e^@0F6'iNϖI:!0K)Kuho$n-geWcޯ)ܱ  /{s=HVܳI܅]'"ˡ< lh;wl곖U(";}Ua@HR~3 +woF$֣l6d5\<Ԯ/}hչq2?Ǥц&fxׇm^DR ۿ>5F9݉2ƝN7 zd*`g|-B>+sjRI"[s&fXdzZjq~*H\Iݛ 2Y[ r]ZL68d^yX5 7(n@K/RwzŠ^i36O;@H 0x+0^Qq 7o~B6 4t[^_=e09v6Z;UNZf.C0 :3O!'=JݸCmhPM;w.m#/k.)Lw|&馇$.չ'vUݭ0وg \q~#O9zh=Z'kqH J5ngKM2jZjf | ieUA4YEP6ڹjGnX踅 T5+b3'2-h] CYn悩վǵH/WVNw,@)ܧ5(Կ"$b5a>JZh''y- }š#DKE"zjM `SS}\B, 9jRٙ ER9% ޟzʌٹpc< ˬe|-jcUX|`vS4u/pOʑUsTpAYχRGw|[OAAF3[}F!8OFBᲿLmmgp9ȀAsNm[ɫCV>nqAa[`:CeL"pK9w|[. D{O8%ܱ<}5i+{wY{ʹc>(އACvK8x Z$ôc̽~ɻa\ŋtqͩ؏ol*pup}n(p6i@/ n}荟Ef(#{⚗X OT|a~TZZاNA7sJtq֗mɊFu᷀xOU_nD.fKdffwe 9B%支U|gհiyŕ[^r3I;2Uj?Cv3>ڍxΫTRU<r_lc|D̈́5^⻛7*y9ԄEFG f#"[O_U,z <*4娿wFjZ_Ly*-,[M~mׂf޻:kXi byC:Ada5OB%ʍ`gW8Z+!q8&㓄@l_8d! Sʾ.؉9;4_mT0;5(BG5!ĸ3Dԅ+X]SA2 FG.6Um%zvGє|u 2{|RdLu:Ν)LQuZ'ϟsE36\Q)#o2\ʋY1v,L+(Ȥ{Xӱ'kNJ aI/NsΔ 1ZTWWcgLys>f]l27 AWwfٖ^WHNy( ̜jaܾ'j/ƦSJ$VٵP Bc/mwTHSi<`Ii81ԱIA呁ܧ;_L}MÈ ֆ ߐ2bK0( N^hƲr1A7Qp9@#Ol脞lg^ _g|ێ-emdå  (S mFECf<̊u165de]J;'ם-W̍0w^oY0OYs:]zob62.uICwS'[KG!o=`w:5{'=R:Ӧy?WHV2ͪn *OѨS|W 7я#î QNcRfy X0SL=DpVɂHuM5O"$zkV/Lr[9;}uܢGyj&Zlvqѽ kݻk-u,缅>/:vY{'xf.^x:E; we'[*=ˤ=#3чXG]sl8@޶80.6yY4Qɇ4bnlǴXNۇ<;e߼s{Rj)NO6(*NHݵfԝZ'̣AW]x#f+_֤A'o9fK5pR""f״ozƊgmJ[7ͣYTNi3n^n.w2ȁ;\iٹ}.k]N+Y&mG;)gw>Nx1MW|#ZR椤 9 d䁎3JڽdKAbq=ぱ[ny4۝ %#̟hsf_^Yooy7ᮾČΈFZEW$NJ}(~.Ҿ]V5ٹ@Ωgom5{NjNŠ݊MW+, SkqA"GytTS4*xjX2煏|5)=hJ2v. ʋOӐө䩖i F[0mX0]ڟ'PaJ^R%v"wiY+N7TlțԱmD7G#(u{jӮ*(Z~/zّǦUyi[?=<#=_D4;uJ ݝ~ElA}vlC/ۿkJLjoTm&kI]|>ms[v%I?kVB™|cִtTzV\!T ’'/-V+.Ln}7vXEcTBJ)=T_ fg6~GOݱ8*zWs7_1ѦO=9b#5;mh3Cݥ F?90#Nֽ5nGdܰ3%Fvmgwa'$(7yUxud1'}0N?Y=oo ֩5kBNmXmԮ3ԣIiDAҔw2ՊT-b-E-|qh9XbMpB1ӥV.8:)G.MF{j*?pRޥ5jT 7k&\಴&6KݾUˎ'F ~zcO!g+S<&jNo_S_>LYE5 ul3zYϋ:7/aF(ef֑\1 6S.xRܥe/n^Ֆ^pHrVQMJ]<'2|5I6*ݫ`H}wik۞nlu[IqQ8guJѦǣ\~c>O9TOP0Dİ'M856vfwŎGW|ˁC7 toam9O,KK5Y]}R9t,Ri_A$Ywbr%;>eրykXr ۣ-$3ى&xf,ҫ/v?bo71l3L>/֜OQcƦqb[oR6ïP^S?vJ߉~#'r\픢 .rUsL'f5u$zN{ԕJ.>QuV-zKJqoK̜7k}9GJǖʋWJw;R=HxNy&-βP l-4tWnu~iN}y&5hm[k&4a=Z!hwv~\z &BYҲ+.xVhaKr=z7,m÷_NiҦW݋VXY#S _1E,WL6D uAUo7uyfލ]ix#C;/4jZtxFFM.YDjx^F!Sef-1m-Q%C_N|{=ɥ3/{%veӟɿcvjAٟn;z K+^P&#]"Z$)GJ|Qv'@A;o%K(rNJbY$JwJ@3OB~ λ#ZO֨W3!@ܿws-yƾI-E4\u~|zL,pZyWǻ+>kɛeCi ZtӾmL򟺹j~9msQ^y7E1 SZ ⸺-KZp'$k0NGlS $k)mOd>h?n{-aqĤa' P)=R2dg[F.,/vulRz9N1EޑII&j>YCt֛c+$LX_Ϟ8[!B:h~JW"OebY)K;M&M}ڗ)ˋ]#aՖ<߷ipSq-w;{&-6W$*:iNgXŮߛ5=|yX[v.tPO5*҂;6g _k4;l5U 1;Ͻ?/hE+qXWlR[49^3wUBf+fyUdždF<MfxPs^% $B4|cgXD40 Ύ~P3C??[]퐬߻AI~v.PrsŊc// fpv؇Ԁ7`Gk]>6UJk.2}w#K{(;;~??yx59*8pqqp8RZZZ,,,{FBqN!:*ʢ2Ӌ`8#O仙qKl+EԴ~w333S&&&6FFFM\*+O~7_UU>٬mSךv"^x>ϝ'~@ ¿O:G a< #HOV_>⿣fOl ɟF&Al/~F 9y%e%K5 \[Xx}$~%=:H7!_C1'҅B ;'K '6#8|.En"6"#v ݈DP(`ۋ'~ xy&؁ uc=F3E5PoV+CH')^`_,FwT`x e\{~ډX,g9"F~+pP+0 xͅ#f|ݜ/ߏV8lcyQg}X.ԇm؎u%O=K# >E9;-c9 3l|7b+E(wׂN*v^rR}eq2.}^)3Tx|_ߟyt+k㑧I{| fS"1OF/è"_۵ 1]{/`Xƾt&=&}OĻUKsssy([ބ߅|5c컜o{WS?#W@CY69aB("-a9h*9w냰@3}LTj]O1 E~BP;Ew`7Ť  ]㓟' wQvg)\IӑC6 S͒hGʹ#>ù0/Ä0\" N&9tN]ak7ssH2hŽaZsdFjڐ5>|Dw b~5L P~=aA_Ơ^N CH1Vyӿytu |~"y%QQ;c4nǾCy,h̆ߧy&û9Ёgpd2P90!ڵohs(<m3Vru`8?A'ɺP88U ʿL)I忣aԓڌ^U ",A>'Xc,(ug.N"W#0wO\֢9 .mbD3'EctmБw۠ u@|ܗ/ B8ʋe#>O׃=89Op.5s tN/2S ^wJ/2uWFY({0@='zpd>Ap~!\J0+kZ\O6)&ps1H0[LOO+I6xe` }zoxqFV)o"}`$ר{1 lin F>)@|.`=9߉`A倝y}W{

oo6[YP0wr<ɁǙ]DOOSYp˹zru˿.0Fa'1@ߠqFvB6j2:\U?cؽ̊.Q!ԅh;(GDD\\(?@<_J4.J9iq,H.c{pKem'e&pi5 %v-l2LCSʲMnSx sLE.^qDkO먌'YX^&)AuF_kI,``4I ôpce1W=.,;q?Q&{D`C2}P<}}g;[f[Asff&ߓ\P>,awoH E03@[7pz .bul䜃m ӹh\䛸³>L!!Z*k_狀'{ t; $.\\A}ec2A=0B=0# >Nc<`Lp7Tyd.}F۠ `Ns#G:pOc;eyЩCc %?]A+@m7H q}ȉ1Mhy7E޹p}l <yra#@9rZya`-P{皡a0;p/]$z%6O6҇25e !l0\n ?֡)_/Zu=hLC5-f|n=F4s={A`=kqN/¥]wR͐ws1 (c6g[-Q"y*ǁaYāYX+S;^vZX0nm1k)Spx7] a@]줂6d ~Y%rP~sqlF=~ iԒ:GWE>{ k5'B8(Ɂ ('\[oSQ~p% X<+xem2 M9?Ǘu1mmvQY3}~i ipk9-B8REP091X襆OfLP 4g 1 c8%-[s{ʿ ԧO&8P=C61r.,$3JIn8mڢLmQ( ء#0)oY -epg\h cq!o< m & LN婙wLEyn*ڗԋrH1hh?Fqo/ё{G?i0/΅ pa9\`YYhvPcۣ,EkE6?EP?cEݶ[[j[e1/@V1lTH~Ks \ihDy>١Ocё@*1 D8ph6D+L{xO8, *7Ayzewa>k %K8PC`pCBيUxcc㸠B6MQ+k&;j ĶM\D猯G> } c1` G l7ڡM8LG eOrPfεَpxrzݎvp)mmB9Hb3]{c逶ܟ?|+3g@{Ekȿ:75{ZϤ69k omvVkÎ&o"9K@n:@i< n#B B#ж44 q8Hח\Ơ٭8qe`E>rvOr>ONyP3nV!g)Hc^0h˿qN"̸VȔQ-kx}6c+a}>w9&|K8mt[ۜt ܗn7xǭXm-ɔaЫ-DI6oY..zp8c$҇wua)@ CvWrY ]3 P(4OsEX?ôm̦>{ :7SQJ[82|HCᢆEӑw.τ|QwʝSEh?Qqb{f\.Om~8~ AK2O6Ƚ=5Jwz h( xViPv׍/B@EкnǾ1ni޲!o}>qW7Ku>zݝ>P^s 6,9ػĺr,C)O;\NqA?`O 2X[Ug >Z2`qW>&ȥ\M{hν}=XrGCԦ~n̂B_8 lpCy}5f-5y*Ps]+˝>#p) ;@l+ȎæPc% \SKkJ`>}}d j0s|5=5Rh%>imdٶpj3\Lk[mȿ>5uqeѩmcn>n"nzM}|;-vӬ02Z,\WnODq G()7 |ވ.xkv CM#LO,uIpe\O~lA}!ѴQyu-D#Ӎ4_(A]ήqc !wl̆ v8!FZW) 2`|( О4h+^ꝙq8-m ZO mۨ/:g!%) _׷˭$nK*w(wh3b C]|ܟ։\ @&|@xOs<^ c+CrdEcx\Lk~Zucu1C#] 27ȟa;F `q_( 8 }q|݃,V=}}ѽe @_]5!}C2w8䅶zW*\]뜿B\\ Mv?QW6 pfm_86n QV=1?ZNBg@ AEqhȼ'[ذg56Y R|&+jOhP_ z}(KB/saXsH 4J8w-٢}c  æ'nWjtfl>0Npre_8.nv ҦǙ? }%yn@򇳉PMC0Q:Dy@Yѳ(~f>{о}575Yu| ۏP;-D瓱}P)<м@;84 ca(3>MKh,.z =~*3gohct{##ۧ%wCIp>%W7o{$C;;EK`t'H.d|<CzQŪhGk4$`{w~O lȅ)plq_(^>) ۵nXEڏc@Z{Bv-@}j)=G@kCc{vUEGNuUnb> }Z٤~u)8 Tj?Bb ]_ faBbuKSHSCc>4S] n7f 9"o8k>X>ڊٻQ\ B4+Oy@8 hH 4@Nu=3UrmC[Hqւ?/󃓫1n3w s׫tO_.uUf0VrMi`*P |8sRioվ @( E~E-@kGԶ)Kדd ߱؛tcgʭe5Uª|Ycl`vKDsv;W! seAXw*dԬ4lVzܸuiU ӮOȢ=!u9LŌ7sSq<^qf c7M[TNcCxg7|wiqpnְZr/'.'ֿkN ֏S2=88`+.~]vFʢL*Epp?vʁPCEݞ^qz53rf13TKeP, il`,o~UQOKY;3{L+PG^r nir鞡t0o=bZ71d5ކgBK Ыu+{Օ+_?q$ !H5h_fI3m5`] ؈_IZ5?z_m5ɿ\敮{aLJ<Gut?8=}c酫n^OV s0Ё)w`Ja]SHݸ:6YYs(5|7 <!T^9}gL-@3'HeqSL3mFۙy[514mTz7"1g[c X5;3WqX t]$ ;k`i?h׼qdֱeSw.z*5 +]/O9jou2}:%sz_.g _xΝFQ^5*kY:7 z] y $aNN:~J9L*jx?܂Ɩm@Nt~>a[u&%U\ =ub~|?CIb#X֑})d0 Q^Wyc< ]Āu-!I5嘱x|&8G,q3b2RG@jįAIOGuyh@V͠Y̜AʶzWcPкm4ʫRum &[iFsg~pW+̲xbm1~ ׫Qtl:^\RU?яVjw *[Who0VГm%,>Ν-? 91XX^:B\FauӦY.c#le ب+3sT8N_G30n˴H n`SC~zV?M-V|ANs_OZ/[wyuU/XїXƸ`1.V[f F}*ߴw ش!"J}jl]ψ>f8}m VWЮg93sd;ƇBā6͛((]ߓֶySEDmJ[6t;'1:@jc0fOi?|0k%113K`յkZk9& V~M ҮR:xvE͜Oc@ {> TNA̰|/)C!kڰZr58_SoߺJ~< J a!nSwAyur|!Ő[Ϟ6vgh(?X~M/%)SЬ?? ɉS򐇬C!=:>oMtUnX,ŀQ|5XbFYaZ^Ohgs5# \'eLV2C؜?ȰkŚoV5@0W!3$7rD ֌ '$C*[}VWUt?Ĺ}.Zʾ58ޝt*b4}fˉ ybj 򍕁|-vMOc=ӂ=+hh~oVm[SPL1 mca߂3]S`ݲkhn}cڴ_KIJדP@t*||$8Wf=}]0/T0iOi҈o;wh`pO4VgTV}d͉iGsss>:tQE+M{2ƁT)p`Zm|ܮq!{LVvE J_t*)_c.kG3{0>b_bFXUQfy՘5{ZϞ>ٗcSa1g,&x!:}&@ʙP0aлPpfy5Lh'Jf1:@Ձ(yl揄 zĹɴpu<Z39UN,^4[0&FYi| (X36wik"c={Ȝ4Ofv8q>N95& ozwUnYsGֈs>V 1.1SgyM|~X V čUHB8`6G10a nfHòf5ڿa!˦3o@8||>&૫~u~{PS99ߍY EW@ѦFt TfܝdAF+wϻ?&7m}!on I\'6[WW|㕪]BWHZR#}ilI`/L3F1 )$80[āK TZ(ޞH4kԸ/|ƶŽFd85}ꝇ Ua-cttz2X_-V ]pêj9f G{cz~S ?lc[~/:lw1pl90c3;7M?Aalѿ}}&$ʾ6 XgM|[?Z-Q_1ho&O=a)vm[+dYs yH^i.0VydTy {i>b1lMdrAυ=+=uޮ 1>XfnuPO&SSeD!=?Rs>;.e v;+Oۜa](錭mZ{–0RqZ: `/NmK 9L\Ϫ3 {)))H=NC  O}3ڎXZ:!\Ё\ȈOcA+p`7\+S'ׯ6ɫ}f(oC܋)Rkn+{`[QUDgQ,X6сK{3ʫ3L=eiL'y㈾0BsOZלV6wD8Y:6&' P7‘p^i~r!0Lx 9^.>m7[-ڸ{ҁp<=z4ƣ)V8 Okj~4@l> vdL}?́ Cpa}د[ELA{+famY84d;CꚷާRBʰ>Z߾ J"(={;D鹓S{ffm#8XQ.P>ruQm?*ra9%SuC#x@w_8 /wڊm& \bN&JF8'63Q)ѽuͯ:D  i/c΢88QN@~d9xxp79}?._ӡs| _?:(]LnA&*ĂuC#9ѵ{prr]]SP]ȴųu \ޛ1Z{%aWi GC==Ѭ9 Пbِ8ēуUz/F_'ׯƵCu>.pOSb|n:<2'Ȼ>3c?`Z!Z;yF3N8!2' fmX̓SGXK ~n^[xzWY |yMEYe7KʹG'_O82wi10DϗMյR<+ `%lgb8|VW)=sY.?ٝ[{!Nhٝy;YwM k|i0~K<^](z='!`q, g[8{N1|C7߿P\7^*o(kǯ83e#hnRNfouS]h^߉S~ӺxAc܌r}@ys]!%ΰ)"yJn|s^3g%W4NK;"e=iqLHh;qMm'>0=8q` ݉s.^`[!tZnʵ"|+]AwF…Z}`A${2~"5jdžfƘtt=lA=6Dsm݊1)!Dv. &?@YA .%>4&(#;%1ׁz0L!Ll!)4\OEQNc7\d7Z>!|ӑT6)@3;?EA$QN5ͺGѾT~,Aлu:R~I~v~뼌Υ:(?MyJC?mW}Vg-(881:E u.Yk?s/U׹Ջz)5_4iЛϛA_|~.E~.esv.e~\7_7yٗ?:/duv.%5|^U:~|}#Z__7{?g`%Ϳ/_QW}%:6ʿ}_uhU|"|קxE 8Eq-,|֚Os/5I~%sq1y, Zѳ P]\\BW&%3335zts\9zʦۇX|̓KS_o7#U~nElG6f>Y2JG- oz+yR/ B!/̌B+s4սf~T= %sŒ_hn?kӱXf,•tu/ocLE^ p̄\ 7v[&]^އe!-L`P.F)}*|ȑP,>g)R}`տh. xL:6BqsY=r' vr =ٽRc?,Ra@uH YaXmȋсHm#`` HQ0p<>zc,u>%? ,M|>s9<6;̠$KL! lz|g(w~l[b{b'Xs*ic08g W  xiOs^x^#DQ9lq5Y$!Xȃcק7 0'[nP!V@NƜl >Ns1k A%^<ζ\{l<[ϾWO'{~jVYHԂPGwCB>rȀ(3*2^k ,V v9$x "{-3hv&Q>*yg<N#\Xc !L?zw+sK7C2~格%`GI8n:ý]nn" HI~DΘVͤTLՄ[]&{? n${8gÍ1Rd.waM]7#l#$lHba$TTDATTh{V[E m֪mmmmV~uT;D܄ys!ܳy f+L҆ʼ̟ϋsc"~ ] %S᷃pӗhɞbٿ֥ϵxi7CTRILڠ =?K%VB?*wc])p{IޯOݡ$ nOU-֞Tvs"+lsȿa...=tDO۟5NpF7Gߞڹ_ÀRe9]RLy68.2=%6Na^dllg߉oH2i"C/\N{DnԚdp\'e~F ,xo߈GLj3ྞ`dսaNGgFRo\ߑ?kJ=:õ;2ْۭxXC180i=^;#{2V?4'{@* ~) x>P fym[\~?"}OL; iM9_ǥ͎rccLzk6| tz5ʽ%>[ @)q} 38m9SkeָsέM9pհcV,v|})1orsphZb`[Emd0ؑxDptv<\|7 z/W'VMTXCN-O4Ҩ/m_gHa]H&A|DƤȞVP`@դa.Mrv'wm%|u&dc}CLMGlHsg4 Ȃssr5iRCuꭑW׿xð#mXGf'A1c="fgd74msy|ƃ̲l8KKn\J=^d3 LzĉiD쉼ҍd~3y.R0 0D98(g}8cZŽd8 O84/]kqba&lB uo!~pc`1'ptLZ-[%}FeD8z2-y(I3/"6`Dij$ $mA,tR!k7(ľP;1Qgy{K"RYObYnkP36 Lk`GQBq-mְ~d֨?X 6CakaJ@Gs/-gj/8*# ɨ2@1j b`qmԷ' M-n?l@~X R?7Ʈ ;%j`{`}bP_L:zZӦQOx;Odg-FbMagB9lo J/y6}uȀd=IL#귎\h;7z ~6K~t鷏PHe[E^d,yUV0wx8KnZp\*;Һ`|K}t L87LcI4wƍ"?mFY9R^ݺ13󴁽zhI}t4L5&x ;Ej!m9˭`Wڌ]{/+ SaP'i>=Q^P~ovәF%i-?Fk >EHs7;7MG?mqz*3`{ g-Ǧ-0*P~6OЬ{Lؘ,XO,mgq;ǧ#)d"硗 aoH(,)#}-i b}piB'{"|[QT:~y bT@VI]YF6yF܏fRc`߱QnqBi,w%zc8UyF\W;Pe1my5FCz?xΖ&( ia=5])bv4ߞ QpOUZ>FS( iV2H.&!8FFS~0}}6:P%,Ns1MԜ(Oq3gN yG8S.1pjlǁ>~#(]5ױ:䧵Zf7{%2LB[xw g}dǐf6o|?/Gxk(kY:@2e\I[0*suOO(qw mԃIs3Q$r}M3K7-M/S7yp|ʤEr-qbhR|-yGB]8uRk'ak7Vk,m@>V|^Sr!߮>dz[eW)tF4% l5^h7tfpaVjʏ&d?uz4Ctفc(,QB^zz|(/<625uɮLn:xM ٣/3{cu/G3 ԍuˮ)CY,݉/oM|upv"x'=&]$,d^8lԷ}P .MGP՞k|2sd-׶~Ypj=\|PDgdo{'ߒe kce1IK &咽j±#Q\\~w_@Ɍ|bp~uRZV]I\ҙY^ONc/ˎMa1ppT8B9r]>)9\qȽIfWRSZnF+c򴺓e 9-%la ^JnhT-?dn}RCdJ6 f@AAb*6& :Wf/8WƔ7s#(xa/Eqr)QvPNkU[>jWe7TUfjlks)SY6W7=-$73T44[<5Sp#{<x m Qo ظ4U4׳P@$ӃYh'GE"ڏ!c1RfA^"!7Y  N N}/ ℞D ~hs/ R$%LĿ!Gn@0t=v|~}x)6`+y!/i N4k2~o[rs0QȲa^}CU ,E[i8=-h? >fzR{1aUccpy>y*PHH 2ٶ y:3loyM$uo7mm9;eZ?Wspi/ =`ĩ!?R.2oΐr`v S9NwYqSpk;ڣ Bx' ڣQ6'"xtL~(;\\&zDdž#aDY; <@`-~B;QWoq6G[֯po<?|@ʬl4㯣H{8\] u~Pf/O pi'I G[k rhqoKCh ý# 8J<`0sA,gbhIC8vc· >vI9 1 ؖcU-obp3~0ԟ=kcW޹SGpӜ~$߻OkU1=tYFQޮ 8ϏW¹9}[K ۃmQ+9Y zQ6ٰy$,'hsµ-p 88K@'Ƹ2nDZu60~ećS@o Pf7iB6)Ɵ6b CYVOwi(Ɨw-?;ig*gF-k?In^Īl ]Ⱦ"ks# s|ۚ$zkŴ2{H)Hh& ItWy6cj1ZxXɞv??,ּPS(&H @هfz!rZƀު&pwH?f'!ŸW&J ZE^9 xe|Hs)l.L=rI*%P&tn[| ,)\J'~Vѿv{Gf4݋uˆ{aGx[?{9D*:??-t;ˡtڪ䵭4[c:P̭bPi˾LQIYphO.t}H3@kQT=|2K}Gdlo GQ:п5ujrֵeז/5nt,YU]ݩ>jWw|QOVx,'uR֥|7eotX1=GӐ$Pg6,ԊYF׫M;TY5ߴpoo?L4VwEč=<>ۼ m^Nm'+>d.ܿ/TWNU7Y8Xi͓3itJЃ' KΉhD=5iq~5B{@*ei͏먶}b:\cHs5aqgY.|{#\޷;u+h?")VY[[<:wZTnMߺ+BQ_Gk(\uKhW@dd錧]9JxIb2n~wkɏ'[qwkSIBb ѯR LQMR:OuP{yF<}]R]M$>L΃>9DQz yO(=X,,#gm FybO7-_};{i4^b9m48<1M7jjȴSn y/JФ7cP/C5 ILS#F|k`vbX_8N|/mk;CbD͇H]ٞVdy[=,_dd. .*Z"[lX-pݽLO˻d}Yl߅)il ŌlO-^V',dyZ x2''2 7 UĞ6x.pT+D>^M/T̴] ZHE*SWB.:BޖjY-G^7==}E/SzZM>}!=-ʧ$(Q/X( Cy~WDBau"Ep+b+ϗ;Ks=jH"t^$m3ټJ٨PdxY~h .[բL\yîqdP#pX-_됯\ss=ԷMrkՉT;R۪xX%O `LIW6+MnI27Crv ҟJӞtbMӗ O-rzvau2|_IIۤ.׶g`9˗]S W(xk=crn+~!*= -ʸ~>G|,QbIA QÔk㑥-k'e/Gb >T\N&}ږml1"pnI!`)D|X Ei^'džÉJq7ޫvڳ[gg8N0/K^Q~{bʓ9c XǑ1P}ZwJ2Vq ڗyDQ~խ]㠶DL2OlǢ(_}J}Ψ?t҉I84& }jþ=B&U% >$8}(?֎oaw];S"w6"|aÈH xXk<WkiBHvXɴ=tnԁUZOo1)/MBEl#",~ovE4-9 ;v-{85GQ~1k^|/CZ]94%Pe#uU;|k50osCFN&;^ItJrLQ4 {q3XuԚ9Hًpb,R7]h4E4 S| zpng`2*;S?6L-ȎRV2-ݩ?VGRK _d 0?# Q.o _ZCz՝\_P5}8Ȟm!*- ~s|cl 6咵͋vᆰ$ä@̶xe[ $5q+wRzzw\xw'>byZ9312ؗ3g3aF^0m SaˬԽ9Ѷ\3 6(ՓF±U3̆p*XCh:x|\_Y I6ɸL=s\KgP0*7q#ԡ`݄b&Mq:en<VM+@ۍlxr\`B|\K}Bf ?ʨr>߷.n|w56[W}9@>u=u# xp⧠ӣ~#iT1s+޿wr\o`uQdҍC$Gn߄z94Rst7-&?5R;fXÛ֡ PǸC{h=C{h=C{h=4_0./Listaller-0.5.8/tests/testdata/FooTest2.framework0000664000175000017500000000022612176743563022401 0ustar matthiasmatthiasID: FooTest2 Version: shell$ echo "MegaFoo: 1.0" prefix$ "MegaFoo: " Binaries: bash xdg-open ExtraLibSearchPath: %SYS_LIB%/kde4 Libraries: libc6.so ./Listaller-0.5.8/tests/testdata/sigtest-control.tar.xz0000664000175000017500000000734412176743563023335 0ustar matthiasmatthias7zXZִF!t/7]3IֻFRȗG[́Wri)HHk+9:d& 9a|XJGsRaQy8y'^}Åiéq[PAH>( Nα~l>4 ~O'z$:"%}&WƃcF`AI18&lA& k%1=a4(̲鏹GفYPx^ʭjA=H|wu2֨V{06R L/Bo=&l9),|;fgǵ%e=i6oi:=h97ľLmuRyyrA:f|/ I~eҁW8ZGJcU؈M?3MG9^煍q.RxPI]znqm7y;,aTRM4pDS.eۄ!O.ڔ |.>Qϙe*$Q%%*ٌūCh)eؗ }2ӵ!NEiԭ+&ǮBbNZ:4\bukVu̪Mc{fz1mFdfG6Ml 2')& yӇcϫǪ#fX'*4&?V餲;IX u~ Ga.tձEn~!YI1PZ@a5sT)×e@7ET2ET=-z , "OeY;) {KqA̰3/&nM;zM ci0dz=Gσr`3J')㢥 $մE (gNƥ1ҸV_y>8q|YVk}U8L!E_o0-Sk=neM~rv/S<i u^fnw<)> Fae!e}3U_3d]b:X_fR{y!ۏ2 ]5ڙX׾ ܠwδN36g 9.Wyv:efDIgW$`v1J{-D{X_%R/3y4~AJq[ա Hm7d$Jԉnۢ°ORk.sOb뇘 Ȟ ;k~ A||z@"-))RT 6QT|})ǜ2ob}Sx AM_ ~SL @"|5āڨ= LLܻSn<|{>O;2tRhyJoZG^!dE$<jFg:. ʄ $=p:ھݷ<u}xEK7Ō V%-D26d,PBxi^ҕ2@*/L`]p|Mck-x@VBbRr,N;wP3`t4%+ 㐬V\Ӎދ&/ 6Gɨ]xP':nYH'Q9dX.`YZD kwl5weNaf%wV #ɧv!O6fTlZd9CrmўD7ݖ#ݫ&ǣ.c?(oȰ;1q[7/_+MkLJ8[RRO%}9͋lj;y#o1~^ pK?J+noŐ/?ZEQ$|kOqz* *MN^cOmMENwֵ_`^h8tr2qS {y^@ZjUJP 0}LMe ")<"nc4 -\tݎԫݫqkr3MΖvG'ZP\7{{Ĉ{%;€J>ɥr!Xםj3iGMd{pytup:Jvl?IND.ev1&7>uOG#l3^FN. ~H,DYɱRʊ+9Q>37h; m׋X2d'P~@ uI R*a֑>PEXt/Aj^no5 !a DK`{*8My,kб4,Zp)zn_)u@(`w*|i@O(A ~y!p}5p6vDi*7',d̿ь!9.3a*M1Ņ~,бe?n O[T2AڢfJQ k5dF_B3OrkVK8`CvD%RY#& AM3Z 5y]^E+Oz{<"cɄ FzƧ{~5ӵSgdI´ `:ND&ymNR(zie8, j"2߲1.$O젿S p,'AK|]udᚽC"C 30"mᎱ<ԝݪ(RY::EV¢\:漯- 3r_rUms]b{*Pevd]B@##H\ N#+@N<&YBm'sW2%+"G^Ħu{FU:PY7 #p% gYZ./Listaller-0.5.8/tests/testdata/ListallerTest1.framework0000664000175000017500000000026212176743563023610 0ustar matthiasmatthias# Listaller Framework Test 1 # THIS FILE IS ONLY FOR UNIT-TESTING! ID: ListallerTest1 Version: libversion$ liblistaller-glib.so.* Binaries: lipa Libraries: liblistaller-glib.so ./Listaller-0.5.8/tests/testdata/libpng12-0.xml0000664000175000017500000000220512176743563021311 0ustar matthiasmatthias libpng12-0

PNG library libpng is a library implementing an interface for reading and writing PNG (Portable Network Graphics) format files. This package contains the runtime library files needed to run software using libpng. http://libpng.org/pub/png/ ./Listaller-0.5.8/tests/testdata/sigtest-signature.asc0000664000175000017500000000151112176743563023164 0ustar matthiasmatthias-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAEBAgAGBQJQUl+hAAoJEElMil+/TezrRB0P/jqNjtzYUKp5GBOiMCmULd+B Mm0j2rSJnLvgC3/LlJX6ioWWl6QmAxIjN/Ww7/4BiTCdG//riF3uj+gUX7h2ai/g KP5aJvo1pCpjt3z73jtt+tH+8h0z+Zjq4Ey5GFgL71pCX4iSML2gIv0R22qEQr3y +BGMqZ7Gyvs6o+eu26a3j0so+hyQHrvSgSAjw+X0+jOw/wecqAikOVLAulIFtpJo vUN29xSbN57GTWyFZRJ7koXycV713LPB6qQzrkNkboLzix94YeeaxGA0+gJjosxd btw+ryOWIpczDVuS3VA2osOPTKgXNcPjil7TUqA05SwvhT59Ji5ws2q9AvUpqSf3 sJ8dorjnqVWKS3PFMAjkutGtoRvC2QJaI1JDYvZShQIxTQHTUSDzVVj/gce5QfdG VyjCX7rhJIjups5xRobUCTzaGLM2769SFPv6U+9qQKot1F8HVw77sNnsgmfEl1RV 4ct+ey9VMjSsVXMOsp3JL/kPC+Cdy6XewXpwQ/+7IwPAdP7ZVZtm1329GanSm7gY 8JZc2n6Ytqi6HRRjVStgdUltK1JuWDW+eZ0H8M2kReheq23ZVYX9/6uywkhbKz9C taxcDuvu3kX7JdyHePF7Yd61tpy9kVmjK2WP6q1BcfYocwZAwjqWBSNPCT+JXEfg uwXUwRhyeLnR3rF8Va6l =gV+3 -----END PGP SIGNATURE----- bQ./Listaller-0.5.8/tests/testdata/libogg.xml0000664000175000017500000000626312176743563021011 0ustar matthiasmatthias libogg The Ogg bitstream file format library The Ogg bitstream file format library http://xiph.org/ogg/ ./Listaller-0.5.8/tests/tests-depmanager.vala0000664000175000017500000001634512176743563021325 0ustar matthiasmatthias/* tests-depmanager.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; private SetupSettings ssettings; private SoftwareDB sdb; void msg (string s) { stdout.printf (s + "\n"); } void test_solver_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype != MessageEnum.CRITICAL); } void test_solver_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); error (item.details); } void test_dependency_installer () { msg ("Dependency installer tests"); bool ret; var depinst = new DepInstaller (sdb); var cfactory = new Dep.ComponentFactory (ssettings); // Test 1 Dep.Module test1 = new Dep.Module ("Test:1#expat"); test1.feed_url = "http://repo.roscidus.com/lib/expat1"; //test1.add_item ("libgee.so.2", Dep.ItemType.SHARED_LIB); test1.add_item (Dep.ItemType.SHARED_LIB, "bladada.so.2"); ret = depinst.install_existing_module_dependency (cfactory, ref test1); assert (ret == true); assert (test1.installed == true); debug (test1.full_name); assert (test1.full_name == "libexpat1"); // Test 2 Dep.Module test2 = new Dep.Module ("Test:2#GNU_parallel"); test2.feed_url = "http://git.savannah.gnu.org/cgit/parallel.git/plain/packager/0install/parallel.xml"; //test2.add_item ("libvorbis.so.0", Dep.ItemType.SHARED_LIB); test2.add_item (Dep.ItemType.SHARED_LIB, "nobis.so.0"); ret = depinst.install_existing_module_dependency (cfactory, ref test2); /* We already installed this in a previous test, but did no proper * registration. So this has to fail because unknown files would be overwritten. */ assert (ret == false); assert (test2.installed == false); assert (test2.full_name == "GNU parallel"); // Test 3 // Look if dependency of test1 is still available :-P test1.installed = false; test1.full_name = ""; ret = depinst.install_existing_module_dependency (cfactory, ref test1); assert (ret == true); assert (test1.installed == true); assert (test1.full_name == "libexpat1"); } void test_dependency_manager () { msg ("Dependency manager tests"); DepManager depman = new DepManager (sdb); Dep.Module testA = depman.dependency_from_idname ("libexpat1"); assert (testA != null); string path = depman.get_absolute_library_path (testA); string expectedPath = Path.build_filename (ssettings.depdata_dir (), testA.idname, "usr", "lib", null); debug (path); assert (path == expectedPath); // We do the whole thing again to check if storing this info in the database worked. testA = depman.dependency_from_idname ("libexpat1"); path = depman.get_absolute_library_path (testA); debug (path); assert (path == expectedPath); } void search_install_pkdep (Dep.PkInstaller pkinst, Dep.PkResolver pksolv, ref Dep.Module dep) { bool ret; ret = pksolv.search_dep_packages (dep); if (!ret) { debug (pksolv.last_error.details); assert (ret == true); } ret = pkinst.install_dependency (dep); if (!ret) { debug (pkinst.last_error.details); assert (ret == true); } } void test_packagekit_installer () { msg ("PackageKit dependency installer test"); bool ret = false; // Build simple mp3gain dependency ArrayList deplist = new ArrayList (); Dep.Module depMp3Gain = new Dep.Module ("Mp3Gain"); depMp3Gain.add_item (Dep.ItemType.BINARY, "/usr/bin/mp3gain"); Dep.PkInstaller pkit = new Dep.PkInstaller (ssettings); Dep.PkResolver pkslv = new Dep.PkResolver (ssettings); pkit.message.connect (test_solver_message_cb); search_install_pkdep (pkit, pkslv, ref depMp3Gain); assert (depMp3Gain.installed == true); // Now something more advanced Dep.Module crazy = new Dep.Module ("CrazyStuff"); crazy.add_item (Dep.ItemType.BINARY, "/bin/bash"); crazy.add_item (Dep.ItemType.SHARED_LIB, "libpackagekit-glib2.so"); crazy.add_item (Dep.ItemType.SHARED_LIB, "libc6.so"); search_install_pkdep (pkit, pkslv, ref crazy); assert (crazy.installed == true); // Now something which fails Dep.Module fail = new Dep.Module ("Fail"); fail.add_item (Dep.ItemType.UNKNOWN, "/run/far_away"); ret = pkslv.search_dep_packages (fail); if (!ret) { debug (pkit.last_error.details); assert (ret == false); } assert (fail.installed == false); } void test_feed_installer () { msg ("ZI Feed installer tests"); Dep.FeedInstaller finst = new Dep.FeedInstaller (ssettings); Dep.Module test1 = new Dep.Module ("feedTest:1-gnu_parallel"); test1.feed_url = "http://git.savannah.gnu.org/cgit/parallel.git/plain/packager/0install/parallel.xml"; bool ret; ret = finst.install_dependency (test1); if (finst.last_error != null) { error (finst.last_error.details); } assert (ret == true); assert (test1.full_name == "GNU parallel"); debug ("Selected version (GNU parallel): %s", test1.get_version ()); } void test_depsolver () { msg ("Dependency solver tests"); ArrayList deplist = new ArrayList (); // Create a set of dependencies Dep.Module dep1 = new Dep.Module ("Gee"); dep1.feed_url = "http://sweets.sugarlabs.org/base/libgee"; dep1.add_item (Dep.ItemType.SHARED_LIB, "libc.so.6"); deplist.add (dep1); Dep.Module dep2 = new Dep.Module ("SDLMixer1.2"); dep2.feed_url = "http://repo.roscidus.com/lib_rsl/sdl-mixer1.2"; dep2.add_item (Dep.ItemType.SHARED_LIB, "libgee.so"); deplist.add (dep2); Dep.Module dep3 = new Dep.Module ("Mp3Gain"); dep3.add_item (Dep.ItemType.BINARY, "/usr/bin/mp3gain"); dep3.add_item (Dep.ItemType.SHARED_LIB, "libc.so.6"); deplist.add (dep3); Dep.Module dep4 = new Dep.Module ("LibXml2"); dep4.feed_url = "http://sweets.sugarlabs.org/base/libxml2"; dep4.add_item (Dep.ItemType.SHARED_LIB, "libglib-2.0.so.0"); deplist.add (dep4); bool ret; var cfactory = new Dep.ComponentFactory (ssettings); ret = cfactory.modules_installable (ref deplist); assert (ret == true); } int main (string[] args) { msg ("=== Running Dependency Solver Tests ==="); datadir = args[1]; assert (datadir != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("depmanager"); tenv.init (ref args); tenv.create_environment (); // Set up Listaller configuration & database ssettings = new SetupSettings (IPK.InstallMode.TEST); sdb = new SoftwareDB (ssettings); sdb.error_code.connect (test_solver_error_code_cb); sdb.message.connect (test_solver_message_cb); // Open the DB sdb.open_write (); test_depsolver (); test_feed_installer (); //! test_packagekit_installer (); test_dependency_installer (); test_dependency_manager (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/tests-ipk.vala0000664000175000017500000001200712176743563017774 0ustar matthiasmatthias/* tests-ipk.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; void msg (string s) { stdout.printf (s + "\n"); } void test_ipk_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype == MessageEnum.INFO); } void test_ipk_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); error (item.details); } void test_ipk_package () { bool ret = false; msg ("Package tests"); string ipkfilename = Path.build_filename (datadir, "FooBar-1.0_%s.ipk".printf (Utils.system_machine_generic ()), null); msg ("Loading IPK package %s".printf (ipkfilename)); IPK.Package ipk = new IPK.Package (ipkfilename); // Connect signal handlers ipk.message.connect (test_ipk_message_cb); ipk.error_code.connect (test_ipk_error_code_cb); ret = ipk.initialize (); assert (ret == true); ret = ipk.set_install_mode (IPK.InstallMode.TEST); assert (ret == true); AppItem app = ipk.control.get_application (); assert (app.full_name == "Foo Bar"); Collection flist = ipk.get_file_entries (); foreach (IPK.FileEntry e in flist) { bool inst_ok = ipk.install_file (e); assert (inst_ok == true); } } /* NOTE: This is an old IPK-Control read/write test void test_ipk_control_file () { msg ("Controlfile tests"); IPK.PackControl ipkc = new IPK.PackControl (); //! ipkc.create_new (); AppItem a = new AppItem ("echoecho", "123"); a.idname = "echo-123"; a.desktop_file = "echo.desktop"; //! ipkc.set_application (a); ArrayList list = new ArrayList (); IPK.Dependency d = null; d = new IPK.Dependency ("alpha"); d.add_component ("/etc/alpha.conf", Deps.ComponentType.FILE); list.add (d); d = new IPK.Dependency ("beta"); d.add_component ("/usr/lib/libbeta.so", Deps.ComponentType.SHARED_LIB); list.add (d); d = new IPK.Dependency ("gamma"); d.add_component ("%SYS_LIB%/gamma.so.4", Deps.ComponentType.SHARED_LIB); list.add (d); d = new IPK.Dependency ("delta"); d.add_component ("/usr/bin/delta", Deps.ComponentType.FILE); list.add (d); ipkc.set_dependencies (list); //! ipkc.test_dump_xml (); AppItem app = ipkc.get_application (); assert (app.full_name == "echoecho"); assert (app.idname == "echo-123"); assert (app.desktop_file == "%APP%/echo.desktop"); list = ipkc.get_dependencies (); assert (list[0].full_name == "alpha"); assert (list[0].has_component ("/etc/alpha.conf", Deps.ComponentType.FILE) == true); } */ void test_ipk_packcontrol () { msg ("IPK PackControl tests"); string ctrlDir = Utils.real_path (Path.build_filename (datadir, "..", "foobar", "ipkinstall", null)); IPK.PackControl ipkc = new IPK.PackControl (); bool ret; // We use the "pkoptions" file instead of the "pksetting" file here, both files have the same layout. ret = ipkc.open_control (Path.build_filename (ctrlDir, "pkoptions", null), Path.build_filename (ctrlDir, "foobar.doap", null)); assert (ret); AppItem app = ipkc.get_application (); assert (app.full_name == "Foo Bar"); assert (app.idname == "foobar"); } void test_ipk_filelist_file () { msg ("Filelist tests."); bool ret = false; IPK.FileList flist = new IPK.FileList (); string foodir = Utils.real_path (Path.build_filename (datadir, "..", "foobar", null)); // Add some files to IPK file list ret = flist.add_file (Path.build_filename (foodir, "autogen.sh", null), "%INST%/+junk"); assert (ret == true); ret = flist.add_file (Path.build_filename (foodir, "doc", "foo.info", null), "%INST%/+junk"); assert (ret == true); ret = flist.add_file (Path.build_filename (foodir, "foobar.desktop", null), "%APP%"); assert (ret == true); string tmpfile = Path.build_filename (datadir, "files-tmp.list~", null); FileUtils.remove (tmpfile); flist.save (tmpfile); HashSet lst = flist.get_files_list (); foreach (IPK.FileEntry e in lst) { msg (e.to_string ()); } } int main (string[] args) { msg ("=== Running IPK Tests ==="); datadir = args[1]; assert (datadir != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("ipkp"); tenv.init (ref args); tenv.create_environment (); test_ipk_packcontrol (); test_ipk_filelist_file (); test_ipk_package (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/CMakeLists.txt0000664000175000017500000001146612176743563017754 0ustar matthiasmatthias# CMakeLists for Listaller Unit Tests find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) find_package(Gettext REQUIRED) find_package(GPGMe REQUIRED) find_package(GI REQUIRED) find_library(M_LIB m) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) pkg_check_modules(REDLAND REQUIRED redland>=0.4) pkg_check_modules(PACKAGEKIT REQUIRED packagekit-glib2) #find_gir(PKGIR "packagekit-glib2" REQUIRED) set(LIUNITTEST_SOURCES testcommon.vala ) link_libraries(${M_LIB} ${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ${LIBXML2_LIBRARIES} ${GPGME_VANILLA_LIBRARIES} ${PACKAGEKIT_LIBRARIES} ${REDLAND_LIBRARIES} listaller-glib ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIRS} ${GIO2_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR} ${GPGME_INCLUDES} ${PACKAGEKIT_INCLUDE_DIRS} ${REDLAND_INCLUDE_DIRS} ) add_definitions ("-DI_KNOW_THE_PACKAGEKIT_GLIB2_API_IS_SUBJECT_TO_CHANGE") add_definitions ("-DI_KNOW_THE_PACKAGEKIT_PLUGIN_API_IS_SUBJECT_TO_CHANGE") # Basic tests vala_add_executable (li-test-basics ${LIUNITTEST_SOURCES} tests-basics.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(basic-test li-test-basics ${CMAKE_CURRENT_SOURCE_DIR}) # Database tests vala_add_executable (li-test-database ${LIUNITTEST_SOURCES} tests-database.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(database-test li-test-database) # IPK layout tests vala_add_executable (li-test-ipk ${LIUNITTEST_SOURCES} tests-ipk.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(ipk-test li-test-ipk ${CMAKE_CURRENT_SOURCE_DIR}) # NOTE: lipkgen is part of LiTools, but it is essential for other tests to complete, so we don't exclude # it here and instead depend on it. People who want to run tests need to be aware that this is intended # behaviour. # Lipkgen tests vala_add_executable (li-test-ipkbuild ${LIUNITTEST_SOURCES} tests-ipkbuild.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(ipkbuild-test li-test-ipkbuild ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_BINARY_DIR}/tools/appcompile/appcompile ${CMAKE_BINARY_DIR}/tools/lipkgen/lipkgen ) add_dependencies(li-test-ipkbuild lipkgen appcompile) # IPK installer tests vala_add_executable (li-test-installer ${LIUNITTEST_SOURCES} tests-installer.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(installer-test li-test-installer ${CMAKE_CURRENT_SOURCE_DIR}) # IPK repo tests vala_add_executable (li-test-repo ${LIUNITTEST_SOURCES} tests-repository.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(repo-test li-test-repo ${CMAKE_CURRENT_SOURCE_DIR}) # Updater tests vala_add_executable (li-test-updater ${LIUNITTEST_SOURCES} tests-updater.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(updater-test li-test-updater ${CMAKE_CURRENT_SOURCE_DIR}) # Dependency solver tests vala_add_executable (li-test-depmanager ${LIUNITTEST_SOURCES} tests-depmanager.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) if(TEST_DEPMANAGER) add_test(depmanager-test li-test-depmanager ${CMAKE_CURRENT_SOURCE_DIR}) endif(TEST_DEPMANAGER) # Tests of GPG signing vala_add_executable (li-test-signing ${LIUNITTEST_SOURCES} tests-signing.vala ../tools/lipkgen/lpkgutils.vala ../tools/lipkgen/gpgsign.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) if(TEST_SIGNING) add_test(signatures-test li-test-signing ${CMAKE_CURRENT_SOURCE_DIR}) endif(TEST_SIGNING) # GPG Keydatabase tests vala_add_executable (li-test-keydb ${LIUNITTEST_SOURCES} tests-keydb.vala BASE_DIR ${lisrc} PACKAGES ${LISTALLER_BASE_VALA_DEPS} packagekit-glib2 listaller_internal VAPI_DIRS ${CMAKE_SOURCE_DIR}/vapi ${CMAKE_BINARY_DIR}/src ) add_test(keydb-test li-test-keydb ${CMAKE_CURRENT_SOURCE_DIR}) ./Listaller-0.5.8/tests/tests-keydb.vala0000664000175000017500000000450412176743563020312 0ustar matthiasmatthias/* tests-keydb.vala * * Copyright (C) 2012-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; private string foobar_dir; void msg (string s) { stdout.printf ("%s\n", s); } void test_keydb () { msg ("~~ Testing KeyDB ~~"); KeyManager keymgr = new KeyManager (); var k = keymgr.lookup_key ("0xBF4DECEB"); assert (k != null); msg (k.uids->name); assert (k.uids->name == "Matthias Klumpp"); } void test_signature_validation () { msg ("~~ Testing signature validation ~~"); bool ret; string sigtext = Utils.load_file_to_string (Path.build_filename (datadir, "sigtest-signature.asc", null)); string pkgdata_path = Path.build_filename (datadir, "sigtest-control.tar.xz", null); var sign = new GPGSignature (sigtext); ret = sign.verify_package (pkgdata_path); assert (ret == true); assert (sign.valid == true); assert (sign.sigstatus == SignStatus.VALID); debug ("Signature key fingerprint: %s", sign.key_fpr); assert (sign.key_fpr == "D33A3F0CA16B0ACC51A60738494C8A5FBF4DECEB"); debug ("Signature signer user-ids: \n%s", sign.user_names); debug ("Signature trust level: %s", sign.trust_level.to_string ()); } int main (string[] args) { msg ("=== Running KeyDB Tests ==="); datadir = args[1]; assert (datadir != null); foobar_dir = Path.build_filename (datadir, "foobar", null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("keydb"); tenv.init (ref args); tenv.create_environment (); test_keydb (); test_signature_validation (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/tests-installer.vala0000664000175000017500000000423012176743563021205 0ustar matthiasmatthias/* tests-installer.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; void msg (string s) { stdout.printf (s + "\n"); } void test_setup_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype == MessageEnum.INFO); } void test_setup_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); // skip all permission-errors if (item.error != ErrorEnum.OPERATION_NOT_ALLOWED) error (item.details); } void test_install_package () { bool ret = false; msg ("Installer tests"); string ipkfilename = Path.build_filename (datadir, "FooBar-1.0_%s.ipk".printf (Utils.system_machine_generic ()), null); Setup setup = new Setup (ipkfilename); setup.error_code.connect (test_setup_error_code_cb); setup.message.connect (test_setup_message_cb); ret = setup.initialize (); assert (ret == true); ret = setup.set_install_mode (IPK.InstallMode.TEST); assert (ret == true); ret = setup.run_installation (); assert (ret == true); } int main (string[] args) { msg ("=== Running IPK Installer Tests ==="); datadir = args[1]; assert (datadir != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("installer"); tenv.init (ref args); tenv.create_environment (); test_install_package (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/testcommon.vala0000664000175000017500000001001712176743563020240 0ustar matthiasmatthias/* testcommon.vala -- Basic testing infrastructure * * Copyright (C) 2012-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; /** * A generic Listaller testing environment */ private class TestEnvironment { private string test_env_name; private string test_tmpdir; private string tmp_home_dir; private string tmp_home_data_dir; private string tmp_home_config_dir; private string tmp_home_cache_dir; public TestEnvironment (string test_name) { test_env_name = test_name; // build tmp directory name string base_tmp_path = Path.build_filename ("/var", "tmp", "listaller", "unit-tests", null); Listaller.Utils.create_dir_structure (base_tmp_path); string template = Path.build_filename (base_tmp_path, "%s-XXXXXX".printf (test_env_name), null); string res = DirUtils.mkdtemp (template); if (res == null) { error ("Unable to create temporary test dir! Error: %s", strerror (errno)); } test_tmpdir = res; // create fake dirs tmp_home_dir = Path.build_filename (test_tmpdir, "home", null); tmp_home_data_dir = Path.build_filename (tmp_home_dir, "data", null); tmp_home_config_dir = Path.build_filename (tmp_home_dir, "config", null); tmp_home_cache_dir = Path.build_filename (tmp_home_dir, "cache", null); } private void clear_environment_variables () { string[] vars = Environment.list_variables (); foreach (string s in vars) Environment.unset_variable (s); } public void create_environment (bool clear_standard_env = true) { if (clear_standard_env) clear_environment_variables (); // make sure directories exist Listaller.Utils.create_dir_structure (tmp_home_dir); Listaller.Utils.create_dir_structure (tmp_home_data_dir); Listaller.Utils.create_dir_structure (tmp_home_config_dir); Listaller.Utils.create_dir_structure (tmp_home_cache_dir); // set environment variables Environment.set_variable ("HOME", tmp_home_dir, true); Environment.set_variable ("XDG_HOME_DIR", tmp_home_dir, true); Environment.set_variable ("XDG_DATA_HOME", tmp_home_data_dir, true); Environment.set_variable ("XDG_CONFIG_HOME", tmp_home_config_dir, true); Environment.set_variable ("XDG_CACHE_HOME", tmp_home_cache_dir, true); // PackageKit limits the use of GIO, and we don't want (and can't) to use it's advanced // features in Listaller too. Environment.set_variable ("GIO_USE_VFS", "local", true); } public void listaller_set_unittestmode (bool enabled) { Listaller.Utils.__unittestmode = enabled; } public void enforce_full_verbosity () { Environment.set_variable ("G_MESSAGES_DEBUG", "all", true); } public void init ([CCode (array_length_pos = 0.9)] ref unowned string[] args) { Test.init (ref args); // set Listaller generic verbosity settings Listaller.set_console_mode (true); Listaller.set_verbose_mode (true); Listaller.add_log_domain ("LiTest"); // switch Listaller internals to unittestmode listaller_set_unittestmode (true); } public void run () { Test.run (); } public void add_func (string testpath, Callback test_funcvoid) { Test.add_func ("/%s/%s".printf (test_env_name, testpath), test_funcvoid); } public void print_environment_vars () { string[] vars = Environment.list_variables (); string vars_str = ""; foreach (string s in vars) vars_str += "%s = %s\n".printf (s, Environment.get_variable (s)); stdout.printf ("Environment: %s", vars_str); } } ./Listaller-0.5.8/tests/dummy-pack/0000775000175000017500000000000012176743563017253 5ustar matthiasmatthias./Listaller-0.5.8/tests/dummy-pack/zero-byte.rpm0000664000175000017500000000000012176743563021701 0ustar matthiasmatthias./Listaller-0.5.8/tests/dummy-pack/test.catalog0000664000175000017500000000105512176743563021567 0ustar matthiasmatthias[PackageKit Catalog] # Just a package on all versions of fedora that can provide the dependency. # If there are multiple packages then the user will be asked to choose InstallProvides(selftest)=":lang=bo" # Just for Fedora 12, install a development file InstallPackages(selftest;11.91)=ruby-json # On any distro, install the package with this file InstallFiles=/usr/bin/kate # For each architecture on Fedora rawhide, install one of the two different files InstallFiles(selftest;11.91;i686)=/usr/bin/pand InstallFiles(selftest;11.91;x64)=/usr/bin/dund ./Listaller-0.5.8/tests/dummy-pack/ipkinstall/0000775000175000017500000000000012176743564021426 5ustar matthiasmatthias./Listaller-0.5.8/tests/dummy-pack/ipkinstall/dummy.doap0000664000175000017500000000221512176743563023425 0ustar matthiasmatthias DummyPkg dummy-pkg All-arch dummy app Dummy package with the only purpose of testing Listaller repositories and being arch:all None Matthias Klumpp 5c75e44665b0c254cd1c6de462b256180d304c8d unstable 2012-10-18 0.1 ./Listaller-0.5.8/tests/dummy-pack/ipkinstall/files-all.list0000664000175000017500000000015712176743563024175 0ustar matthiasmatthias# IPK file list :: %INST% ../testdata/xfile1.bin test.catalog zero-byte.rpm :: %APP% ../foobar/foobar.desktop ./Listaller-0.5.8/tests/dummy-pack/ipkinstall/pkoptions0000664000175000017500000000013512176743563023375 0ustar matthiasmatthiasVersion: 1.2 AutoFindDeps: true Requires: FooDependency (>= 1.0) InstallModes: Shared, Test ./Listaller-0.5.8/tests/dummy-pack/updateable.txt0000664000175000017500000000102212176743563022115 0ustar matthiasmatthiasThis file will be updated! :P Theorem: All positive integers are equal. Proof: Sufficient to show that for any two positive integers, A and B, A = B. Further, it is sufficient to show that for all N > 0, if A and B (positive integers) satisfy (MAX(A, B) = N) then A = B. Proceed by induction. If N = 1, then A and B, being positive integers, must both be 1. So A = B. Assume that the theorem is true for some value k. Take A and B with MAX(A, B) = k+1. Then MAX((A-1), (B-1)) = k. And hence (A-1) = (B-1). Consequently, A = B. ./Listaller-0.5.8/tests/tests-signing.vala0000664000175000017500000000563612176743563020661 0ustar matthiasmatthias/* tests-signing.vala * * Copyright (C) 2011-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; private string foobar_dir; void msg (string s) { stdout.printf ("%s\n", s); } /*FIXME: this test only works if * sudo likey -i BF4DECEB * has been executed previously, to provide a database key. * The KeyManager needs to be adjusted to be unit-testable. * (That's the reason why this test is excluded from the default set) */ void test_sign_working () { GPGSign gsig = new GPGSign (); string sign_text; gsig.sign_package (Path.build_filename (datadir, "xfile1.bin", null), out sign_text); msg ("=========WORKING============\n"); msg (sign_text); msg ("=========WORKING============"); GPGSignature sigverify = new GPGSignature (sign_text); sigverify.verify_package (Path.build_filename (datadir, "xfile1.bin", null)); debug (sigverify.sigstatus.to_string ()); assert (sigverify.sigstatus == SignStatus.VALID); } void test_sign_failing () { GPGSign gsig = new GPGSign (); string sign_text; gsig.sign_package (Path.build_filename (datadir, "FooBar-1.0_%s.ipk".printf (Utils.system_machine_generic ()), null), out sign_text); msg ("============FAILING============"); msg (sign_text); msg ("============FAILING============"); // We just use some random binary stuff here instaled of a "real" IPK package GPGSignature sigverify = new GPGSignature (sign_text); sigverify.verify_package (Path.build_filename (datadir, "xfile1.bin", null)); debug (sigverify.sigstatus.to_string ()); assert (sigverify.sigstatus == SignStatus.BAD); } int main (string[] args) { msg ("=== Running Signature Tests ==="); datadir = args[1]; assert (datadir != null); foobar_dir = Path.build_filename (datadir, "foobar", null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("signing"); tenv.init (ref args); // NOTE We don't create the testing environment here, because we need the real one to test GPG // Maybe we can set-up a new GPG testing env later, but for now this test is better than none. test_sign_working (); test_sign_failing (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/tests-repository.vala0000664000175000017500000000442312176743563021433 0ustar matthiasmatthias/* tests-repository.vala * * Copyright (C) 2012-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; void msg (string s) { stdout.printf (s + "\n"); } void test_repo_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype == MessageEnum.INFO); } void test_repo_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); error (item.details); } void print_app_arraylist (ArrayList appList, string label = "") { if (label != "") msg ("Application List [%s]:".printf (label)); else msg ("Application List:"); foreach (AppItem app in appList) { stdout.printf ("%s\n", app.to_string ()); } msg ("END"); } void test_repo_remote () { var repo_remote = new IPK.RepoRemote ("http://listaller.tenstral.net/stuff/test-repo"); repo_remote.load_server_index (); ArrayList appList = repo_remote.get_available_applications (false); print_app_arraylist (appList, "arch-specific"); assert (appList.size >= 1); appList = repo_remote.get_available_applications (true); print_app_arraylist (appList, "arch-indep"); assert (appList.size >= 0); } int main (string[] args) { msg ("=== Running IPK Repo Tests ==="); datadir = args[1]; assert (datadir != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("repository"); tenv.init (ref args); tenv.create_environment (); test_repo_remote (); tenv.run (); return 0; } ./Listaller-0.5.8/tests/listaller.supp0000664000175000017500000000411612176743563020112 0ustar matthiasmatthias# Valgrind suppressions file for Listaller modules # # Started by Matthias Klumpp 2010-03-24 { FPSYSCALL-Leak Memcheck:Param stat(file_name) fun:SYSTEM_FPSYSCALL$INT64$INT64$INT64$$INT64 fun:SYSTEM_FPSTAT$PCHAR$STAT$$LONGINT fun:main } { FPSYSCALL-Leak2 Memcheck:Param access(pathname) fun:SYSTEM_FPSYSCALL$INT64$INT64$INT64$$INT64 fun:SYSTEM_FPACCESS$PCHAR$LONGINT$$LONGINT fun:main } { Qt4-Initleak-listallgo1 Memcheck:Leak fun:malloc fun:XInitExtension fun:XextAddDisplay fun:XSyncQueryExtension obj:/usr/lib/libQtGui.so.4.6.2 fun:_ZN19QApplicationPrivate9constructEP9_XDisplaymm fun:_ZN12QApplicationC1ERiPPci fun:QApplication_create fun:QTINT_TQTWIDGETSET_$__CREATE$$TQTWIDGETSET fun:FORMS_CREATEWIDGETSET$TWIDGETSETCLASS fun:INTERFACES_init fun:fpc_initializeunits fun:(below main) } { Qt4-Initleak-listallgo2 Memcheck:Leak fun:malloc fun:XInitExtension fun:XextAddDisplay obj:/usr/lib/libXrandr.so.2.2.0 fun:XRRQueryExtension obj:/usr/lib/libQtGui.so.4.6.2 fun:_ZN19QApplicationPrivate9constructEP9_XDisplaymm fun:_ZN12QApplicationC1ERiPPci fun:QApplication_create fun:QTINT_TQTWIDGETSET_$__CREATE$$TQTWIDGETSET fun:FORMS_CREATEWIDGETSET$TWIDGETSETCLASS fun:INTERFACES_init fun:fpc_initializeunits fun:(below main) } { Qt4-Initleak3 Memcheck:Leak fun:malloc fun:XInitExtension fun:XRenderFindDisplay fun:XRenderQueryExtension obj:/usr/lib/libQtGui.so.4.6.2 fun:_ZN19QApplicationPrivate9constructEP9_XDisplaymm fun:_ZN12QApplicationC1ERiPPci fun:QApplication_create fun:QTINT_TQTWIDGETSET_$__CREATE$$TQTWIDGETSET fun:FORMS_CREATEWIDGETSET$TWIDGETSETCLASS fun:INTERFACES_init fun:fpc_initializeunits fun:(below main) } { Qt4Leak1 Memcheck:Leak fun:malloc obj:/usr/lib/libfontconfig.so.* ... obj:/usr/lib/libQtGui.so.* } { Qt4Leak2 Memcheck:Leak fun:calloc ... obj:/usr/lib/libQtCore.so.* } { FontconfigLeak Memcheck:Leak fun:malloc obj:/usr/lib/libfontconfig.so.1.4.4 ... } ./Listaller-0.5.8/tests/leaktest0000775000175000017500000000103012176743563016740 0ustar matthiasmatthias#!/bin/bash # Script to launch Listaller module under valgrind for memory error/leak checking. set -e modpath=$1 function usage { echo "Check memory leaks in Listaller toolset using Valgrind." echo "Usage:" echo " leaktest " } eval set -- "$PARSED_OPTIONS" if [ "$modpath" == "" ]; then usage; exit 1; fi sdir=$0 sdir=${sdir%/*} echo "Running Valgrind..." valgrind --log-file=valgrind.log --leak-check=full --suppressions="$sdir/listaller.supp" --gen-suppressions=all --num-callers=20 \ $modpath "$@" ./Listaller-0.5.8/tests/tests-updater.vala0000664000175000017500000001205312176743563020656 0ustar matthiasmatthias/* tests-updater.vala * * Copyright (C) 2012-2013 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ using GLib; using Gee; using Listaller; private string datadir; void msg (string s) { stdout.printf (s + "\n"); } void test_upd_message_cb (MessageItem item) { msg ("Received message:"); msg (" " + item.to_string ()); assert (item.mtype == MessageEnum.INFO); } void test_upd_error_code_cb (ErrorItem item) { msg ("Received error:"); msg (" " + item.to_string ()); // skip all permission-errors if (item.error != ErrorEnum.OPERATION_NOT_ALLOWED) error (item.details); } void print_app_arraylist (ArrayList appList, string label = "") { if (label != "") msg ("Application List [%s]:".printf (label)); else msg ("Application List:"); foreach (AppItem app in appList) { stdout.printf ("%s\n", app.to_string ()); } msg ("END"); } private string foobar_fake_config_ipath; void test_foobar_installation () { bool ret; string ipkfilename = Path.build_filename (datadir, "FooBar-1.0_%s.ipk".printf (Utils.system_machine_generic ()), null); Setup setup = new Setup (ipkfilename); setup.error_code.connect (test_upd_error_code_cb); setup.message.connect (test_upd_message_cb); ret = setup.initialize (); assert (ret == true); ret = setup.set_install_mode (IPK.InstallMode.PRIVATE); assert (ret == true); ret = setup.run_installation (); assert (ret == true); AppItem? app = setup.get_current_application (); assert (app != null); var vs = new VarSolver (app.idname); foobar_fake_config_ipath = vs.substitute_vars_auto ("%INST%/foo_testconf.conf", setup.settings); } void test_manager_installed_apps () { Manager mgr = new Manager (); mgr.settings.current_mode = IPK.InstallMode.PRIVATE; ArrayList app_list; mgr.filter_applications (AppState.INSTALLED_SHARED | AppState.INSTALLED_PRIVATE, out app_list); print_app_arraylist (app_list, "Installed apps (pre-update)"); // we should have exactly 1 app installed (FooBar) assert (app_list.size == 1); // test version assert (app_list[0].version == "1.0"); // test example file var fake_conf = new KeyFile (); fake_conf.load_from_file (foobar_fake_config_ipath, KeyFileFlags.NONE); string str = fake_conf.get_string ("Foobar", "Version"); assert (str == "1.0"); } void test_refresh_repo_cache () { // refresh app cache Repo.Manager repomgr = new Repo.Manager (); repomgr.refresh_cache (); // check new app info Manager mgr = new Manager (); mgr.settings.current_mode = IPK.InstallMode.PRIVATE; ArrayList app_list; mgr.filter_applications (AppState.AVAILABLE, out app_list); print_app_arraylist (app_list, "Available apps"); // we should now have more than one app assert (app_list.size > 1); } void test_updater_update () { Updater upd = new Updater (false); upd.settings.current_mode = IPK.InstallMode.PRIVATE; upd.find_updates (); message ("Found updates: %i", upd.available_updates.size); assert (upd.available_updates.size >= 1); upd.apply_updates_all (); foreach (UpdateItem item in upd.available_updates) assert (item.completed == true); upd.find_updates (); assert (upd.available_updates.size == 0); // now test installed apps *after* update (version should have been increased) Manager mgr = new Manager (); mgr.settings.current_mode = IPK.InstallMode.PRIVATE; ArrayList app_list; mgr.filter_applications (AppState.INSTALLED_SHARED | AppState.INSTALLED_PRIVATE, out app_list); print_app_arraylist (app_list, "Installed apps (post-update)"); // we should still have exactly 1 app installed assert (app_list.size == 1); // test version assert (app_list[0].version == "1.2"); // test example file var fake_conf = new KeyFile (); fake_conf.load_from_file (foobar_fake_config_ipath, KeyFileFlags.NONE); string str = fake_conf.get_string ("Foobar", "Version"); assert (str == "1.2"); } int main (string[] args) { msg ("=== Running Updater Tests ==="); datadir = args[1]; assert (datadir != null); datadir = Path.build_filename (datadir, "testdata", null); assert (FileUtils.test (datadir, FileTest.EXISTS) != false); var tenv = new TestEnvironment ("updater"); tenv.init (ref args); tenv.create_environment (); tenv.listaller_set_unittestmode (true); // prepare updater environment test_foobar_installation (); test_manager_installed_apps (); // perform updater tests test_refresh_repo_cache (); test_updater_update (); tenv.run (); return 0; } ./Listaller-0.5.8/contrib/0000775000175000017500000000000012176743563015502 5ustar matthiasmatthias./Listaller-0.5.8/contrib/tools/0000775000175000017500000000000012176743563016642 5ustar matthiasmatthias./Listaller-0.5.8/contrib/tools/make-icons0000775000175000017500000000367512176743563020631 0ustar matthiasmatthias#!/bin/sh # # This script generates a directory and an automake fragment from an SVG # file. It's useful when you have an SVG and want to pre-render icons of # various sizes from it, then install them into the users icon theme. # # For autopackage users, put the following line in your specfile: # # installIcon share/icons/hicolor # # It uses rsvg to render the icons if [[ "$1" == "" ]] || [[ "$2" == "" ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then echo "Usage: make-icons myprogram.svg type" echo echo "Generates a subdirectory called icons with an icon theme tree" echo "in it. Also outputs some automake code you can copy/paste". echo "" echo "type is the type of icon and should be one of the following:" echo "apps, mimetypes, actions, devices, filesystems" echo "See FDO spec for details--you most likely want apps or mimetypes" exit 0 fi if ! which rsvg >/dev/null; then # a part of librsvg echo "make-icons: this script needs the rsvg program installed" exit 1 fi if [ ! -e $1 ]; then echo "make-icons: the given file does not exist" exit 1 fi if [[ "$2" != "apps" && "$2" != "mimetypes" && "$2" != "actions" && "$2" != "devices" && "$2" != "filesystems" ]]; then echo "make-icons: $2 is not a valid icon type. type should be one of these:" echo "apps, mimetypes, actions, devices, filesystems" echo "See FDO spec for details--you most likely want apps or mimetypes" exit 1 fi mkdir -p icons/scalable/$2 cp $1 icons/scalable/$2 newname="`basename $1`" echo "iconSVGdir = \$(datadir)/icons/hicolor/scalable/$2" echo "iconSVG_DATA = icons/scalable/$2/$newname" newname="${newname/.svg/}.png" for size in 128 64 48 24 16; do mkdir -p icons/${size}x${size}/$2 rsvg --width=$size --height=$size $1 icons/${size}x${size}/$2/$newname echo "icon${size}dir = \$(datadir)/icons/hicolor/${size}x${size}/$2" echo "icon${size}_DATA = icons/${size}x${size}/$2/$newname" done ./Listaller-0.5.8/contrib/tools/checksym.c0000775000175000017500000000174012176743563020621 0ustar matthiasmatthias/* Returns 0 if the named symbol is present, 1 if not * * (C) 2005 Mike Hearn * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * 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 * Lesser General Public License for more details. */ #include #include int main(int argc, char **argv) { if (argc < 3) { fprintf(stderr, "checksym: needs two arguments, library and symbol name\n"); return 1; } char *libname = argv[1]; char *symname = argv[2]; void *handle = dlopen(libname, RTLD_LAZY); if (dlsym(handle, symname)) return 0; return 1; } ./Listaller-0.5.8/contrib/tools/freespace.c0000775000175000017500000000151712176743563020752 0ustar matthiasmatthias/* c-basic-offset: 4 */ #include #include #include #include int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "freespace: not enough arguments, argc=%d\n", argc); return 1; } struct statvfs buf; if (statvfs(argv[1], &buf) != 0) { fprintf(stderr, "freespace: statvfs failed: %d\n", errno); return 2; } unsigned long long bytesfree = (unsigned long long) buf.f_bsize * (unsigned long long) buf.f_bfree; if (argc >= 3) { /* Check whether there's enough free space */ unsigned long long required = (unsigned long long) atoll(argv[2]); if (bytesfree >= required) return 0; else return 1; } else { /* Report free space */ printf("%llu\n", bytesfree); return 0; } } ./Listaller-0.5.8/contrib/tools/scandeps0000775000175000017500000000574212176743563020400 0ustar matthiasmatthias#!/usr/bin/env perl use strict; use IPC::Open2; if ($ARGV[0] eq '--version') { print "scandeps version 1.0\n"; print "Copright (c) 2005 Hongli Lai\n"; print "Licensed under the GNU General Public License v3.\n"; exit; } elsif ($ARGV[0] eq '--help') { print "Usage: scandeps [FILES...]\n"; print "This script scans ELF binaries' library dependancies and prints a nice report\n" . "of the dependancies.\n"; exit; } # First, generate a list of binaries. Either scan user-specified files, # or scan all files in the current directory (including subfolders). my @files; if (@ARGV > 0) { # Scan user-specified files @files = @ARGV; } else { # Scan directory recursively @files = scandir("."); } # Now get the dependancies for all binaries # %fileDeps: hash which contains a list of dependancies. The filename is the key. # %depFiles: hash which contains a list of files. The dependancy is the key. my (%fileDeps, %depFiles); getdeps(\%fileDeps, \%depFiles, \@files); print "Common dependancies:\n"; foreach my $dep (keys %depFiles) { if (@{$depFiles{$dep}} == @files) { print " $dep\n"; } } print "\n"; print "All dependancies:\n"; my @keys = keys %depFiles; @keys = sort { @{$depFiles{$b}} - @{$depFiles{$a}} } @keys; foreach my $dep (@keys) { my $num = scalar(@{$depFiles{$dep}}); my $word = ($num > 1) ? "files" : "file"; printf " %-40s (used by %3d $word)\n", $dep, $num; } print "\n"; print "Dependancies and associated binaries:\n"; foreach my $dep (@keys) { print " $dep:\n"; if (@{$depFiles{$dep}} == @files) { print " All files depend on this library.\n"; } else { foreach my $file (@{$depFiles{$dep}}) { print " $file\n"; } } print "\n"; } ################################## sub fatal { print STDERR $_[0]; exit 1; } sub isELF { my ($f, $data); if (!open($f, $_[0])) { print STDERR "Warning: cannot open file '$_[0]' for reading.\n"; return 0; } binmode $f; sysread $f, $data, 4; close $f; return $data eq "\177ELF"; } sub scandir { my $d; if (!opendir($d, $_[0])) { print STDERR "Warning: cannot open directory '$_[0]' for reading.\n"; return; } my @files; foreach my $file (readdir($d)) { next if ($file eq "." || $file eq ".."); $file = "$_[0]/$file"; if (-d $file) { # Recurse into subdirectory push @files, scandir("$file"); } elsif (-f $file && -x $file && isELF($file)) { push @files, $file; } } closedir($d); return @files; } sub getdeps { my ($fileDeps, $depFiles, $files) = @_; my ($r, $w); if (!open2($r, $w, 'objdump', '-p', @{$files})) { fatal("Cannot communicate with objdump.\n"); } close $w; my $currentFile; foreach my $line (<$r>) { if ($line =~ /^(.+):[ \t]+file format /) { $currentFile = $1; $currentFile =~ s/^.\///; } elsif ($line =~ /NEEDED[ \t]+(.+)$/) { $fileDeps->{$currentFile} = [] if (!exists $fileDeps->{$currentFile}); push @{$fileDeps->{$currentFile}}, $1; $depFiles->{$1} = [] if (!exists $depFiles->{$1}); push @{$depFiles->{$1}}, $currentFile; } } close $r; } ./Listaller-0.5.8/contrib/tools/dump-elf-metadata.c0000775000175000017500000000700112176743563022276 0ustar matthiasmatthias/* Dump the contents of the .metadata section, one string per line * * (C) 2005 Mike Hearn * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * 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 * Lesser General Public License for more details. * */ #include #include #include #include #include #include #include #include #include #include #include /* support building for 32 bit and 64 bit platforms */ #ifndef DEM_WORDSIZE # ifndef __x86_64 # define DEM_WORDSIZE 32 # else # define DEM_WORDSIZE 64 # endif #endif #undef ElfW #define ElfW(type) _ElfW (Elf, DEM_WORDSIZE, type) #define elfcast(a, b) (ElfW(a)*)(b) static void __attribute__((format(printf, 1, 2))) bail(char *message, ...) { fprintf( stderr, "dumpverdefs: " ); va_list args; va_start( args, message ); vfprintf( stderr, message, args ); va_end( args ); exit( 1 ); } static void help() { printf( "dump-elf-metadata: a tool to dump the .metadata section of an ELF binary\n" \ "Usage: dump-elf-metadata /path/to/binary\n\n" \ "(C) 2005 Mike Hearn \n\n" ); exit( 0 ); } /* retrieves the string from the given strtab */ static char *resolve_string(ElfW(Ehdr) *header, int tabindex, ElfW(Word) offset) { ElfW(Shdr) *section = elfcast( Shdr, (char*)header + header->e_shoff ); section = elfcast( Shdr, (char*)section + (tabindex * sizeof(ElfW(Shdr))) ); assert( section->sh_type == SHT_STRTAB ); char *string = (char*)header + section->sh_offset; return string + offset; } int main(int argc, char **argv) { argc--; argv++; /* don't care about our own name */ if (!argc) help(); char *name = argv[0]; argc--; argv++; struct stat buf; int e = stat( name, &buf ); if (e == -1) bail( "could not open %s: %s\n", name, strerror(errno) ); int fd = open( name, O_RDONLY ); if (fd < 0) bail( "could not open %s: %s\n", name, strerror(errno) ); void *binary = mmap( NULL, buf.st_size, PROT_READ, MAP_SHARED, fd, 0 ); if (binary == MAP_FAILED) bail( "could not mmap %s: %s\n", name, strerror(errno) ); close( fd ); ElfW(Ehdr) *header = binary; if (strncmp( (char *) &header->e_ident, ELFMAG, SELFMAG ) != 0) bail( "bad ident sequence, %s not an ELF file?\n", name ); if (((header->e_ident[EI_CLASS] == ELFCLASS32) && (DEM_WORDSIZE != 32)) || ((header->e_ident[EI_CLASS] == ELFCLASS64) && (DEM_WORDSIZE != 64))) bail( "32/64 mismatch: elfclass is %d but compiled for %dbit machine\n", header->e_ident[EI_CLASS], DEM_WORDSIZE ); ElfW(Shdr) *sectab = binary + header->e_shoff; ElfW(Shdr) *section = NULL; int found = 0; for (section = sectab; section < §ab[header->e_shnum]; section++) { if (!strcmp( resolve_string( header, header->e_shstrndx, section->sh_name ), ".metadata" )) { found = 1; break; } } if (!found) return 1; char *str = binary + section->sh_offset; while (*str) { printf("%s\n", str); str += strlen(str) + 1; } return 0; } ./Listaller-0.5.8/contrib/CMakeLists.txt0000664000175000017500000000032112176743563020236 0ustar matthiasmatthias if (LIBUILD) add_subdirectory(libuild) add_subdirectory(binreloc) endif (LIBUILD) if (PATCHELF) add_subdirectory(patchelf) endif (PATCHELF) if (VISUAL_LDD) add_subdirectory(visual-ldd) endif (VISUAL_LDD) ./Listaller-0.5.8/contrib/libuild/0000775000175000017500000000000012176743563017126 5ustar matthiasmatthias./Listaller-0.5.8/contrib/libuild/test-app/0000775000175000017500000000000012176743563020663 5ustar matthiasmatthias./Listaller-0.5.8/contrib/libuild/test-app/randomapp1.c0000664000175000017500000000047512176743563023077 0ustar matthiasmatthias#include #include #include #include #include int main() { char *respath = malloc(PATH_MAX); unsigned char c = (unsigned char)"c"; printf("foo\n"); printf("%d\n", isalpha(c)); realpath("/some/path", respath); fnmatch ("foo", "bar", 0); return 0; } ./Listaller-0.5.8/contrib/libuild/ligcc0000775000175000017500000007246012176743563020146 0ustar matthiasmatthias#!/usr/bin/env perl # ligcc - a GCC wrapper for creating portable binaries # Copyright (c) 2003,2004,2005 Hongli Lai # Distributed under the GNU General Public License use warnings; use strict; use FindBin qw($RealBin); use File::Spec; use lib $RealBin; use lib "$RealBin/../share/listaller"; use IPC::Open2; use POSIX; use Cwd; use LiBuild::GCC; use LiBuild::Utils; # Don't forget to bump the version in Makefile too. our $LIBUILD_VERSION = "2.1.0"; ######## Initialization ######## # In C mode: # $gcc is the default compiler. # $gxx2 is not set. # # In C++ mode: # $gcc is g++ 3.2. # $gxx2 is g++ 3.4, and it might not be set. # Double compiling is only enabled if both are set. # # Note that $LIBUILD_CXX_MODE is an internal environment variable # which should not be set by the user. our ($gcc, $gxx2); if ($ENV{LIBUILD_CXX_MODE}) { # C++ support; user can: # - Not set LIBUILD_CXX1/2 at all -> use g++ as default, and don't double compile C++ sources. # - Set LIBUILD_CXX1 and LIBUILD_CXX2 -> enable double compiling. # - Set only LIBUILD_CXX1 -> don't double compile. # - Set only LIBUILD_CXX2 -> use 'g++' as default for LIBUILD_CXX1, and enable double compiling. if (empty($ENV{LIBUILD_CXX1}) && empty($ENV{LIBUILD_CXX2})) { $gcc = new LiBuild::GCC('g++'); } elsif (!empty($ENV{LIBUILD_CXX1}) && !empty($ENV{LIBUILD_CXX2})) { $gcc = new LiBuild::GCC($ENV{LIBUILD_CXX1}); $gxx2 = new LiBuild::GCC($ENV{LIBUILD_CXX2}); } elsif (!empty($ENV{LIBUILD_CXX1})) { $gcc = new LiBuild::GCC($ENV{LIBUILD_CXX1}); } elsif (!empty($ENV{LIBUILD_CXX2})) { $gcc = new LiBuild::GCC('g++'); $gxx2 = new LiBuild::GCC($ENV{LIBUILD_CXX2}); } } else { my $gcc_command = 'gcc'; $gcc_command = $ENV{LIBUILD_CC} if (!empty($ENV{LIBUILD_CC})); $gcc = new LiBuild::GCC($gcc_command); } our $appath; our $libgcc = $ENV{LIBUILD_STATIC_LIBGCC} ? '-static-libgcc' : '-shared-libgcc'; # Find out where ligcc is located and determine the buildlist executable # path relative to the ligcc script location. $appath = $ENV{LIBUILD_PATH} if (!empty($ENV{LIBUILD_PATH})); if (!defined $appath) { $appath = $FindBin::Bin; $appath =~ s/\/*$//g; $appath =~ s/^(.*)\/.*?$/$1/; $appath .= '/lib/listaller'; if (! -f "$appath/buildlist" && -f "$FindBin::Bin/buildlist") { $appath = $FindBin::Bin; } } # Build the apsymbols.h header file my $headerPath = "$ENV{HOME}/.config/libuild"; run('mkdir', '-p', $headerPath); my $minimumGlibc = "2.7.0"; if (!empty($ENV{LIBUILD_MINIMUM_GLIBC})) { $minimumGlibc = $ENV{LIBUILD_MINIMUM_GLIBC}; } if (run("$appath/buildlist", $headerPath, $minimumGlibc) != 0) { exit 1; } # Special constants our @linking = ('-Wl,--enable-new-dtags,--rpath,${ORIGIN}/../lib'); our @include = ("-I$appath", '-include', "$headerPath/apsymbols.h", "-DLIBUILD_VERSION=\"$LIBUILD_VERSION\""); our $extraTypes = $LiBuild::GCC::extraTypes; our $srcTypes = $LiBuild::GCC::srcTypes; @linking = () if ($ENV{LIBUILD_NO_RPATH}); if (!empty($ENV{LIBUILD_INCLUDE})) { foreach my $dir (split /:+/, $ENV{LIBUILD_INCLUDE}) { if ($dir =~ /=/) { # allow people to force changing a path with oldpath=newpath, e.g.,: # $echo $LIBUILD_INCLUDE # /opt/kde/include=/home/taj/kde-headers/kde-3.3.2/kde/include # would change -I/opt/kde/include to my KDE 3.3 headers. # this works around problems where the order of the include # directories is important. Added for amarok 1.4.3 which has a # header named scriptmanager.h. KDE also has a header named # scriptmanager. Order of -I flags forces amarok header to be # included. my @splitpaths = split(/=/, $dir); if (-d $splitpaths[1]) { foreach (@ARGV) { s/-I$splitpaths[0]$/-I$splitpaths[1]/g; } } } else { push @include, "-I$dir" if (-d $dir); } } } # Include the libuild include folder, and all folders inside that folder. if (opendir D, $appath) { foreach my $dir (readdir D) { if ($dir !~ /^\./ && -d "$appath/$dir") { push @include, "-I$appath/$dir"; } } closedir D; } if (!empty($ENV{LIBUILD_PROJECTNAME})) { push @linking, '-Wl,--rpath,${ORIGIN}/../lib/' . $ENV{LIBUILD_PROJECTNAME}; } our %capabilities = $gcc->capabilities; if ($capabilities{hash_style}) { # By default FC6 only generates a .gnu.hash section, not # .hash (which is the only thing that FC5 and most other # distros understand). # Force generation of both sections if the linker supports it # so that the binary will run on other systems. # See http://fcp.surfsite.org/modules/newbb/viewtopic.php?topic_id=29929&forum=10&post_id=128939 # for more details push @linking, '-Wl,--hash-style=both'; } if ($capabilities{stack_protector}) { # gcc-4.1 introduced stack protection to help check for # buffer overflows. This introduces a silent dependency on # glibc 2.4 (__stack_chk_fail@@GLIBC_2.4) # Not many people have glibc 2.4 yet, so disable it. push @include, "-fno-stack-protector"; } if ($capabilities{fortify_source}) { # Some distros (e.g. Ubuntu 8.10) activate a bufferoverflow protection # which is only available since glibc 2.3.4. LiBuild removes all symbols # newer then 2.3, so this can't be used. push @include, "-U_FORTIFY_SOURCE"; } our %capabilities_gxx2; %capabilities_gxx2 = $gxx2->capabilities if ($gxx2); push @linking, $libgcc if ($capabilities{libgcc}); ############# Detect compilation situation ############# our $situation = $gcc->situation(\@ARGV); if ($ENV{LIBUILD_CXX_MODE}) { debug "apg++ @ARGV\n"; } else { debug "ligcc @ARGV\n"; } debug "Situation: $situation\n"; # Handle each situation # Only situations that involve compiling or linking need to be treated specially if ($situation eq 'compile') { # Extract the parameters and files my (@files, @params); $gcc->splitParams(\@ARGV, \@files, \@params); # Compile each source file to an object file. # Force GCC to compile C/C++ source files with older glibc symbols. debug "\@files: is @files\n"; foreach my $file (@files) { if ($gxx2 && $gxx2->isCxxSource($file)) { # This is a C++ source file. Compile the file twice with different ABIs. my $src = $file; my $old_gcc; my %old_cap; compileSource($src, \@ARGV); $old_gcc = $gcc; %old_cap = %capabilities; $gcc = $gxx2; %capabilities = %capabilities_gxx2; beginDoubleCompiling(); compileSource($src, \@ARGV, '.GCCABI2'); endDoubleCompiling(); $gcc = $old_gcc; %capabilities = %old_cap; } else { compileSource($file, \@ARGV); } } exit; } elsif ($situation eq 'linking') { linkObjects(\@ARGV); if ($gxx2) { # Check whether there are .GCCABI2 objects. Link them if there are. my @options; my $doubleCompile; my $callback = sub { my $type = shift; if ($type eq 'param' && ($gxx2->isLibrary($_[0]) || $gxx2->isObject($_[0])) && !$gxx2->isStaticLib($_[0]) && -f "$_[0].GCCABI2") { push @options, "$_[0].GCCABI2"; $doubleCompile = 1; } else { push @options, @_; } }; $gcc = $gxx2; %capabilities = %capabilities_gxx2; $gcc->foreach(\@ARGV, $callback); if ($doubleCompile) { debug "Double compiling.\n"; beginDoubleCompiling(); linkObjects(\@options, ".GCCABI2"); endDoubleCompiling(); } } exit; } elsif ($situation eq 'precompiled header') { # Extract the parameters and files my (@files, @params); $gcc->splitParams(\@ARGV, \@files, \@params); # Compile each source file to an object file. # Force GCC to compile C/C++ source files with older glibc symbols. debug "\@files: is @files\n"; foreach my $file (@files) { compileSource($file, \@ARGV); } } elsif ($situation eq 'compile and link') { # Extract the parameters and files my (@params, @files, @linking2); my @command; my $status; # Seperate files and linker options. # @params are all options except linker options, and is used for compilation of each individual source file. # @files are the source files. $gcc->splitParams(\@ARGV, \@files, \@params); $gcc->stripLinkerParams(\@params, \@linking2); # Compile & link only one source file if (@files == 1) { my @options = modifyLinkerOptions(@params); push @options, @linking2; if ($gxx2 && $gxx2->isCxxSource($files[0])) { # This is a C++ file. Compile twice with different ABIs. compileSource($files[0], \@ARGV); manipulateDeps(@options); $gcc = $gxx2; %capabilities = %capabilities_gxx2; beginDoubleCompiling(); compileSource($files[0], \@ARGV, '.GCCABI2'); manipulateDeps(@options); endDoubleCompiling(); } else { compileSource($files[0], [@linking, @options], undef); manipulateDeps($files[0], @options); } exit; } # Compile individual files into objects my $cxx; debug "Multiple source files: @files\n"; foreach my $file (@files) { my $out = $file; $out =~ s/^(.*)\..*?$/$1.o/; if ($gxx2 && $gxx2->isCxxSource($file)) { # This is a C++ file. Compile twice with different ABIs. my $old_gcc; my %old_cap; $cxx = 1; compileSource($file, [@ARGV, '-c']); $old_gcc = $gcc; %old_cap = %capabilities; $gcc = $gxx2; %capabilities = %capabilities_gxx2; beginDoubleCompiling(); compileSource($file, [@ARGV, '-c'], '.GCCABI2'); endDoubleCompiling(); $gcc = $old_gcc; %capabilities = %old_cap; } else { compileSource($file, [@params, '-c'], undef); } $file = $out; } # Finally, link all objects together. my @options = (@params, @linking2); linkObjects([@files, @options]); if ($cxx) { $gcc = $gxx2; %capabilities = %capabilities_gxx2; # Also link the objects with ABI 2 together foreach (@files) { $_ .= ".GCCABI2"; } beginDoubleCompiling(); linkObjects([@files, @options], '.GCCABI2'); endDoubleCompiling(); } exit; } else { my $ret = run($gcc->command, @ARGV); if (defined $ARGV[0] && $ARGV[0] eq '--help') { print "\nlibuild environment variables:\n"; print " LIBUILD_PATH=path Specifies the include path for LI-XBuild\n" . " (like: /usr/local/include/libuild)\n" . " LIBUILD_DEBUG=1 Enable debugging messages\n" . " LIBUILD_BOGUS_DEPS=deps Specify a list of whitespace-seperated bogus\n" . " library dependancies (like: X11 ICE png). These\n" . " libraries will not be linked.\n" . " LIBUILD_STATIC=deps Specify a list of whitespace-seperated libraries\n" . " to statically link to (like: popt z). You can also\n" . " explicitly specify a filename to the static library.\n" . " Example: popt=/usr/lib/libpopt.a\n" . " LIBUILD_STATIC_X=1 Force static linking of some X extension libraries\n" . " Don't use this unless you know what you're doing.\n" . " LIBUILD_DISABLE_BOGUS_DETECTOR=1 Disable the automatic bogus dependancy\n" . " detector. This is useful when linking to libraries\n" . " don't have correct DT_NEEDED entries, like GTK 1.2.\n" . " LIBUILD_NOT_BOGUS=deps If you want to use the automatic bogus dependancy\n" . " dectector anyway, then you can specify a list of\n" . " dependancies here that are not bogus.\n" . " LIBUILD_STATIC_LIBGCC=1 Link all binaries with -static-libgcc. See the gcc\n" . " info page for more info about this option.\n" . " LIBUILD_PROJECTNAME If non-empty, libuild will add\n" . " \$ORIGIN/../lib/\$LIBUILD_PROJECTNAME to the library\n" . " search path.\n" . " LIBUILD_INCLUDE Prepend the specified directory to the compiler's\n" . " header search path. The compiler will search this\n" . " directory first, before searching any other\n" . " directory. This is useful in combination with the\n" . " older GTK headers package.\n" . " You can specify multiple directories,\n" . " seperated by a ':', just like the \$PATH environment\n" . " variable.\n" . " LIBUILD_NO_RPATH Do not add rpath entries during linking.\n" . " LIBUILD_CC Use the specified C compiler. Default value: gcc\n" . " LIBUILD_CXX1,LIBUILD_CXX2 Use the specified C++ compiler. Default value: g++\n" . " Set both variables to enable double compiling. The\n" . " first should be set to the g++ 3.2 compiler and the\n" . " second should be set to the g++ 3.4 (or newer)\n" . " compiler.\n" . " LIBUILD_RESOLVE_LIBPATH A whitespace-separated list of regular expressions which\n" . " specify the libraries whose path must be resolved into\n" . " an absolute path.\n" . " LIBUILD_MINIMUM_GLIBC Specifies the minimum glibc version your binaries will\n" . " be compatible with.\n"; } exit $ret; } ######## Functions ######## sub modifyLinkerOptions { my @argv = @_; # Remove manually specified bogus library dependancies my @bogusDeps; @bogusDeps = split / +/, $ENV{LIBUILD_BOGUS_DEPS} if (!empty($ENV{LIBUILD_BOGUS_DEPS})); # We call removeLibraries() twice because it may detect # some dependancies after we've resolved the library names @argv = removeLibraries(\@bogusDeps, @argv); @argv = translateLibNames(@argv); @argv = removeLibraries(\@bogusDeps, @argv); @argv = removeStaticGlibc(@argv); if ($capabilities{as_needed}) { @argv = rearrangeForAsNeeded(@argv); @argv = forceStatic(@argv); } return @argv; } sub removeLibraries { my $blacklist = shift; return @_ if (@{$blacklist} == 0); my @args; my $callback = sub { my $type = shift; if ($type ne "param") { push @args, @_; return; } my $lib; $_ = $_[0]; if (/^-l(.+)/) { $lib = $1 } elsif (/(.*)\/lib(.+)\.so/) { $gcc->addSearchPaths($1); $lib = $2; } else { push @args, @_; return; } # We now have a library parameter; remove this parameter # if the library's in the blacklist foreach my $dep (@{$blacklist}) { return if ($lib eq $dep); } push @args, @_; }; $gcc->foreach(\@_, $callback); return @args; } # This function translates library linker options to something saner. # - On my system, -lpng links to libpng.so. However, libpng.so is a symlink to libpng12.so. # This function translates -lpng to -lpng12 so that the automatic bogus dependancy stripper # can detect this as a bogus dependancy. # - Translate /usr/lib/libpng.so to /usr/lib/libpng12.so because the soname is different. # - Translates -pthread to -lpthread. # - When in C++ mode, removes libstdc++.so from the argument list. This causes trouble when # double compiling, unless the -nostdlib option is specified and we're not double compiling. # libtool can put us in this configuration. # TODO: correctly handle static libraries. # apg++ ... -L/usr/lib -Wl,-Bstatic -lphysfs -Wl,-Bdynamic # -> /usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/../../../../i686-pc-linux-gnu/bin/ld: cannot find -lphysfs-1.0 sub translateLibNames { my (@args, @searchPaths); # Get a list of search paths $gcc->getSearchPaths(\@_, \@searchPaths); my $staticMode = 0; my $callback = sub { my $type = shift; my $dontAdd; if ($type ne 'param') { push @args, @_; return; } $_ = $_[0]; if (/^-Wl,(.+)/) { # Detect whether the next library will be linked statically or dynamically foreach my $arg (split /,/, $1) { if ($arg eq '-Bdynamic') { $staticMode = 0; } elsif ($arg eq '-Bstatic') { $staticMode = 1; } } } elsif ($staticMode) { # Don't try to resolve library name if it's linked statically } elsif (/^-l(.+)/ || /--library=(.+)/) { my $libname = $1; # Resolve libname if explicitely asked to, through LIBUILD_RESOLVE_LIBPATH. my @libtosolve = split / +/, $ENV{LIBUILD_RESOLVE_LIBPATH} if (!empty($ENV{LIBUILD_RESOLVE_LIBPATH})); foreach (@libtosolve) { my $regexp = $_; if ($libname =~ /($regexp)/) { my $file = searchLib("lib$libname.a", \@searchPaths); if ($file && -f $file) { debug "resolved", $_[0], "as", $file; # Replace -lXXX with the absolute path for libXXX.a $_[0] = $file; last; } } } # Library is a symlink; check whether the sonames match my $lib = searchLib("lib$libname.so", \@searchPaths); if ($lib && -l $lib) { my ($soname1) = $lib =~ /.*\/lib(.+)\.so/; my $lib2 = soname($lib); my ($soname2) = $lib2 =~ /lib(.+)\.so/; if ($soname1 ne $soname2 && defined searchLib("lib$soname2.so", \@searchPaths)) { $_[0] = "-l$soname2"; } } } elsif ($_ eq '-pthread') { $_[0] = "-lpthread"; } elsif ($ENV{LIBUILD_CXX_MODE} && /\/?libstdc\+\+\.so(.[56])?/) { # drop this in double compile mode as it can cause issues # in single-compile mode leave it alone, otherwise, libtool can break # ^^^ That used to be true # Now drop it and add the compilers stdc++ # Works around libtool problems where the wrong libstdc++.so is # picked up from .la files of dependencies my @command = ($gcc->command, "--print-file-name=libstdc++.so"); chomp($_[0] = `@command`); } elsif (/(.*)\/?(lib.+\.so.*)/) { $gcc->addSearchPaths ($1); push @searchPaths, $1; my $lib = searchLib($2, \@searchPaths); if (defined $lib) { my $soname = soname($lib); $lib = searchLib($soname, \@searchPaths); $_[0] = $lib if (defined $lib); } } push @args, @_ if (!$dontAdd); }; $gcc->foreach(\@_, $callback); return @args; } # Replace -static with something else. We can't statically link to glibc! # So we statically link to everything but glibc. sub removeStaticGlibc { my $hasStatic = 0; foreach (@_) { if ($_ eq '-static') { $hasStatic = 1; last; } } return @_ if (!$hasStatic); my @argv; foreach (@_) { if ((/^-l(.+)/ || /^--library=(.+)/) && defined $1 && $1 ne 'c') { push @argv, '-Wl,-Bstatic'; push @argv, $_; push @argv, '-Wl,-Bdynamic'; } elsif ($_ ne "-static") { push @argv, $_; } } return @argv; } # 'gcc -Wl,--as-needed foo.o -lpng' breaks the binary. # 'gcc foo.o -Wl,--as-needed -lpng' doesn't. # Move object files to before the first library flag. # # Furthermore, -lbfd and -liberty must be the last arguments, or # an app won't link properly in some cases. XRender needs to be # after XCursor for some reason, so push it to the end too. sub rearrangeForAsNeeded { my @args; my @nonParams; my @last; my $callback = sub { my $type = shift; if ($type ne "param") { push @nonParams, @_; } elsif ($_[0] eq "-lbfd" || $_[0] eq "-liberty" || $_[0] eq "-lXrender") { push @last, @_; } elsif ($gcc->isLibrary($_[0])) { push @args, @_; } elsif ($gcc->isObject($_[0]) || $gcc->linkOrderIsImportant($_[0])) { push @nonParams, @_; } else { push @args, @_; } }; $gcc->foreach(\@_, $callback); unshift @args, "-Wl,--as-needed"; unshift @args, @nonParams; push @args, @last; return @args; } ################ Automatic bogus dependancy stripper ################ # Automatically detecting bogus dependancies & force static linking to certain X libraries sub manipulateDeps { return if ($capabilities{as_needed}); my @searchPaths; my $output = 'a.out'; my $i = 0; my @deps; my @argv; if ($ENV{LIBUILD_DISABLE_BOGUS_DETECTOR}) { @argv = @_; goto FINAL; } # Get a list of search paths and the output filename for ($i = 0; $i < @_; $i++) { if ($_[$i] eq "-L") { push (@searchPaths, $_[$i + 1]) if (defined $_[$i + 1]); $i++; } elsif ($_[$i] =~ /^-L(.+)/ || $_[$i] =~ /^--library-path=(.+)/) { push (@searchPaths, $1); } elsif ($_[$i] eq "-o") { $output = $_[$i + 1] if (defined $_[$i + 1]); $i++; } } # Find out what libraries the executable needs my ($r, $w); my $pid = open2 ($r, $w, 'objdump', '-p', $output); close ($w); foreach (<$r>) { next unless (/^ NEEDED/); s/^ NEEDED[ \t]+//; s/\n//; my $lib = searchLib ($_, \@searchPaths); push (@deps, $lib) if (defined $lib); } close ($r); waitpid ($pid, 0); # Some -l options have no effect. For example, when linking apollon, # -lXinerama is passed, yet the resulting executable doesn't have a # DT_NEEDED entry for libXinerama.so. Remove those options so that # they won't interfere with forceStatic(). foreach (@_) { if ((/^-l(.+)/ || /^--library=(.+)/) && !searchLib("lib$1.a", \@searchPaths) && !(/^-lpng$/) # Special case the libpng mess, bah ) { # "Xinerama" my $arg = $1; # Only add to @argv if $arg is in @deps foreach my $dep (@deps) { # "/usr/X11R6/lib/libXinerama.so.1" -> "Xinerama" my ($soname) = $dep =~ /.*\/lib(.+)\.so/; if ($arg eq $soname) { push (@argv, "-l$arg"); last; } } } else { push (@argv, $_); } } # Find out which symbols the executable needs, and which symbols are provided # by the libraries it's linked to. my %appsyms = extractSymbols ('UBV', $output); my @bogusDeps; foreach my $lib (@deps) { # Never remove libc, libgcc_s and libstdc++ next if ($lib =~ /^\/lib\/lib(c|gcc_s|stdc\+\+)\.so/); my %libsyms = extractSymbols ('TBVRDSWG', $lib); my $bogus = 1; foreach my $sym (keys %libsyms) { if (defined $appsyms{$sym}) { debug ("Real dependancy $lib: $sym (lib: $libsyms{$sym} - app: $appsyms{$sym})\n"); $bogus = 0; last; } } if ($bogus) { my ($soname) = $lib =~ /.*\/lib(.+)\.so/; push (@bogusDeps, $soname); } } FINAL: { # Don't strip dependancies that are explicitly marked as not bogus my %notBogus; if (!empty($ENV{LIBUILD_NOT_BOGUS})) { foreach (split / +/, $ENV{LIBUILD_NOT_BOGUS}) { $notBogus{$_} = 1; } } my @tmp; foreach (@bogusDeps) { push @tmp, $_ if (!$notBogus{$_}); } @bogusDeps = @tmp; my @options = removeLibraries(\@bogusDeps, @argv); @options = forceStatic(@options); if ("@options" ne "@argv") { my @command = ($gcc->command, @include, @linking, @options); debug("Bogus dependancies: @bogusDeps\n") if (@bogusDeps); debug("Relinking: @command\n"); my $status = run(@command); exit($status) if ($status != 0); } } } sub extractSymbols { my $types = shift; my %symbols = (); my ($r, $w); my $pid = open2 ($r, $w, 'nm', '-D', @_); close ($w); foreach (<$r>) { if (/^.{9}[$types]/) { s/\n//; s/^.{9}//; my ($type, $name) = split (/ /, $_, 2); $symbols{$name} = $type; } } close ($r); waitpid ($pid, 0); return %symbols; } # Force static linking against libraries in $LIBUILD_STATIC and certain X libraries. sub forceStatic { my (%xlibs, %staticList, $X11linked, $linkedToStaticX); my (@args, @searchPaths); # Create a list of libraries that we want to statically link $gcc->getSearchPaths(\@_, \@searchPaths); if (defined $ENV{'LIBUILD_STATIC_X'} && $ENV{'LIBUILD_STATIC_X'} eq "1") { foreach (qw(Xrender Xcursor Xfixes Xi Xinerama Xrandr Xv Xxf86dga Xxf86misc Xxf86vm)) { my $file = searchLib("lib$_.a", \@searchPaths); $staticList{$_} = $file if (defined $file); $xlibs{$_} = 1; } } my @static_deps; if (!empty($ENV{LIBUILD_STATIC})) { foreach (split / +/, $ENV{LIBUILD_STATIC}) { my ($lib, $file) = split /=/, $_, 2; $file = searchLib("lib$lib.a", \@searchPaths) if (!defined $file); $staticList{$lib} = $file if (defined $file); if (defined $file) { # find the DT_NEEDED entries that this library-to-be-made-static # has so that final linking works (the deps need to be added after the static lib so the bogus stripper doesn't remove them) my ($r, $w); my $abslib = searchLib("lib$lib.so", \@searchPaths); if (!defined $abslib) { warn "WARNING: Failed to find lib$lib.so in " . join(":", @searchPaths) . ".\n"; next; } my $pid = open2 ($r, $w, 'objdump', '-p', $abslib); close ($w); foreach (<$r>) { next unless (/^ NEEDED\s+lib(.+?)\.so/); s/^ NEEDED\s+lib(.+?)\.so(.*)/$1/; s/\n//; push(@static_deps, "-l$_"); } close ($r); waitpid ($pid, 0); } } } push (@_, @static_deps); # Modify linker options for static linking my $callback = sub { my $type = shift; my $libname; if ($type eq "param" && $gcc->isLibrary($_[0], \$libname)) { $X11linked = 1 if (!$X11linked && $libname eq 'X11'); if ($staticList{$libname}) { # This parameter is a library and is in the list of libraries # to statically link; replace parameter by a filename to the # static library push @args, $staticList{$libname}; $linkedToStaticX = 1 if ($xlibs{$libname}); if ($libname eq "Xcursor") { # With some versions of X11 (on Slack 11, # xorg 6.9.0, anyway), Xcursor links against Xfixes. # If we switch Xcursor to being linked statically, # force linking of Xfixes too so we don't get # undefined symbol errors from Xcursor. push @args, $staticList{"Xfixes"}; } } else { push @args, @_; } } else { push @args, @_; } }; $gcc->foreach(\@_, $callback); # The app must be linked to libX11 if it has statically linked any the static X libraries push @args, "-lX11" if ($linkedToStaticX && !$X11linked); return @args; } ## # compileSource(source, argss, extension, extra...) # source: the source filename. # args: the full GCC arguments (may include other source files) used for compilation. # extension: if not undef, $extension will be appended to the output object file's filename. # extra: extra parameters to pass to the compiler. sub compileSource { my ($source, $args, $ext) = @_; my (@command, @tmp, @params, @sourceParams, @otherParams); $gcc->splitParams($args, undef, \@tmp); push @tmp, $source; if (defined $ext) { # Change the output file's extension. $gcc->setOutputFile(\@tmp, $gcc->getOutputFile(\@tmp) . $ext); } $gcc->splitParams(\@tmp, undef, \@params); my $callback = sub { my $type = shift; if ($type eq 'param' && $gcc->sourceOrderIsImportant($_[0])) { push @sourceParams, @_; } else { push @otherParams, @_; } }; $gcc->foreach(\@params, $callback); if ($source =~ /\.($srcTypes)$/) { @command = ($gcc->command, @include, @sourceParams, $source, @otherParams); } else { @command = ($gcc->command, @sourceParams, $source, @otherParams); } debug "@command\n"; my $status = run(@command); exit($status) if ($status != 0); } # Checks whether there should be an ABI2 version of a certain static library. sub checkStaticLibrary { my ($lib, $ext) = @_; my ($pid, $r, $w, @objects, $doubleCompile); my (undef, $libdir, $libname) = File::Spec->splitpath($lib); my $newlib = "$lib$ext"; # Return the ABI2 version if already exists. return $newlib if (-f $newlib); # Check the content of the archive. Check whether # there are ABI2 versions of the object files inside. $pid = open2($r, $w, 'ar', 't', $lib); close($w); while ((my $file = <$r>)) { $file =~ s/\n//g; if (-f "$libdir/$file$ext") { push @objects, "$file$ext"; $doubleCompile = 1; } else { push @objects, $file; } } close($r); waitpid ($pid, 0); if ($doubleCompile) { my $oldDir = getcwd(); $newlib = "$libname$ext"; debug "Creating static library $newlib\n"; chdir($libdir); my @command = ("ar", "cru", $newlib, @objects); debug(@command); my $ret = run(@command); exit($ret) if ($ret != 0); @command = ("ranlib", $newlib); debug(@command); $ret = run(@command); exit($ret) if ($ret != 0); chdir($oldDir); return $newlib; } else { return undef; } } sub linkObjects { my ($args, $ext) = @_; my @options = modifyLinkerOptions(@{$args}); if (defined $ext) { $gcc->setOutputFile(\@options, $gcc->getOutputFile(\@options) . $ext); # Check whether this object links to any static libraries. # If it does, check whether there should be an ABI2 version of that # static library, and attempt to create it. my @options2; my $callback = sub { my $type = shift; if ($type eq 'param' && $gcc->isStaticLib($_[0])) { my $newlib = checkStaticLibrary($_[0], $ext); if (defined $newlib) { push @options2, $newlib; } else { push @options2, @_; } } else { push @options2, @_; } }; $gcc->foreach(\@options, $callback); @options = @options2; } my @command = ($gcc->command, @linking, @options); debug "@command\n"; my $status = run(@command); exit ($status) if ($status != 0); my (@files, @options2); $gcc->splitParams(\@options, \@files, \@options2); manipulateDeps(@files, @options2); } ## # beginDoubleCompiling() # # Prepare the environment for double compiling. sub beginDoubleCompiling { # Since g++ will be executed another time, we don't want it to # print output to stdout/stderr, because it can potentially # screw up some build systems such as libtool. # stderr will go to the console (/dev/tty), stdout will be # lost (/dev/null). our $stdout_fd = fileno(STDOUT); our $stderr_fd = fileno(STDERR); our $stdout_saved = POSIX::dup($stdout_fd); our $stderr_saved = POSIX::dup($stderr_fd); my $fd1 = POSIX::open("/dev/null", O_CREAT | O_WRONLY, 0644); my $fd2 = POSIX::open("/dev/tty", O_CREAT | O_WRONLY, 0644); POSIX::dup2($fd1, $stdout_fd); POSIX::dup2($fd2, $stderr_fd); POSIX::close($fd1); POSIX::close($fd2); } ## # endDoubleCompiling() # # Unprepare the environment for double compiling. sub endDoubleCompiling { our ($stdout_fd, $stderr_fd, $stdout_saved, $stderr_saved); POSIX::dup2($stdout_saved, $stdout_fd); POSIX::dup2($stderr_saved, $stderr_fd); POSIX::close($stdout_saved); POSIX::close($stderr_saved); } ./Listaller-0.5.8/contrib/libuild/relaytool0000775000175000017500000004677112176743563021105 0ustar matthiasmatthias#!/bin/bash # relaytool 1.2 # Copyright 2004-2005 Mike Hearn # Copyright 2005 Vincent Béron # Copyright 2006 Psyche # Copyright 2007 Taj Morton # ############################################################################# # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # ############################################################################# # # TODO: # - Figure out how to grab the GOT addr on PowerPC # - Port to more archs # - Figure out a way to check if we're on an ELF platform or not, # maybe check for _GLOBAL_OFFSET_TABLE_ ? using_partial_map=false using_minimal_list=false using_multilink=false outdir="." if [[ "$1" == "--version" ]]; then echo "Relaytool 1.11" echo "Copyright 2004 Mike Hearn" echo "Copyright 2005 Vincent Béron" echo echo "See $0 for license details." exit 1 fi if [[ "$@" == "" ]] || [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then echo "Relaytool will generate a file that can be used instead of linking" echo "directly against a library, which will dlopen the DSO at init time" echo echo "Usage: relaytool [OPTION]... [LINKER COMMAND]..." echo echo "Options:" echo " --relay LIB If a matching -lLIB is found, generate a file" echo " that can be used instead of linking directly to" echo " LIB. The name of the file is echoed on stdout." echo " Multiple --relay can be used together, a file will" echo " be generated for each matching ones." echo " --replace-all-libs Generate a file for every -lLIB parameter." echo " --minimal-list OBJ_LIST Will look in OBJ_LIST for undefined symbols, and" echo " generate a file creating only the needed symbols" echo " for each LIB." echo " --partial-map MAP_FILE Generate a file creating only the symbols contained" echo " in MAP_FILE. Will apply to all further -lLIB" echo " parameters, so in general is not suitable to" echo " multiple libs in the same invocation of relaytool." echo " --no-replace Echo -lLIB on stdout even if a --relay LIB is" echo " found, so it'll be linked in normally." echo " --multilink [SONAMES...] If a library has different SONAMES on different" echo " Linux distributions you can specify the various" echo " SONAMES that it's known by here. Relaytool will" echo " attempt to load them (in the order provided) until" echo " one if found. This cannot be used with multiple" echo " --relay options. The first SONAME in the list will" echo " be used as the name in the _is_present variable and" echo " _symbol_is_present function." echo " --out-dir DIRECTORY Write stub file to DIRECTORY instead of CWD." echo "Linker commands:" echo " -LPATH Add PATH to the list of paths to search for LIBs." echo " -lLIB If a matching --relay LIB is found (or if" echo " --replace-all-libs is specified), generate a file" echo " that can be used instead of linking directly to" echo " LIB. If there's no --relay LIB, echo -lLIB to" echo " stdout." echo " All other linker commands are passed as is to stdout." echo "Other commands:" echo " --help|-h Print this help." echo " --version Print version information." exit 1 fi function error() { echo $@ >/dev/stderr exit 1 } function readfinallink() { link_name="$1" while [ -L "$link_name" ]; do new_name=$( readlink "$link_name" ) if [ "${new_name:0:1}" == "/" ]; then link_name="$new_name" else link_name="`dirname "$link_name"`/$new_name" fi done if [ -f "$link_name" ]; then echo -n "$link_name" exit 0 else exit 1 fi } function relay() { lib="$1" if $using_multilink; then libname=$( echo $( basename ${multilinklist[0]} ) | sed 's/\.so.*//' | tr '-' '_' | tr '.' '_' ) else libname=$( echo $( basename "$lib" ) | sed 's/\.so.*//' | tr '-' '_' | tr '.' '_' ) fi soname=$( objdump -x "$lib" |grep SONAME | awk '{print $2}' ) outfile="$outdir/`basename "$soname"`.stub.c" echo -n "$outfile" if $using_partial_map; then functions=$( grep "^F " "$partial_map" | cut -d' ' -f2 ) variables=$( grep "^V " "$partial_map" | cut -d' ' -f2 ) else functions=$( nm --extern-only -D "$lib" | awk '{ if (($2 == "T") || ($2 == "W")) print $3; }' | LC_ALL=C grep -v '\(\<_init\>\|\<_fini\>\)' | LC_ALL=C sort -u ) variables=$( nm --extern-only -D "$lib" | awk '{ if (($2 == "D") || ($2 == "G") || ($2 == "B") || ($2 == "V")) print $3; }' | LC_ALL=C sort -u ) fi if $using_minimal_list; then functions="$functions $( nm `echo "$object_list"` | awk '{ if ($1 == "U") print $2; }' | LC_ALL=C sort -u )" functions=$( echo "$functions" | LC_ALL=C sort | LC_ALL=C uniq -d ) variables="$variables $( nm `echo "$object_list"` | awk '{ if ($1 == "U") print $2; }' | LC_ALL=C sort -u )" variables=$( echo "$variables" | LC_ALL=C sort | LC_ALL=C uniq -d ) fi if [ "$functions" == "" ] && [ "$variables" == "" ]; then # Nothing will be used, so do nothing for that lib exit 1 fi cat <"$outfile" /* automatically generated: `date` by `id -un`@`uname -n`, do not edit * * Built by relaytool, a program for building delay-load jumptables * relaytool is (C) 2004 Mike Hearn * See http://autopackage.org/ for details. */ #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif static void **ptrs; static char *functions[] = { EOF for s in $functions; do echo " \"$s\"," >>"$outfile" done echo " 0" >>"$outfile" cat <>"$outfile" }; static char *variables[] = { EOF for s in $variables; do echo " \"$s\"," >>"$outfile" done echo " 0" >>"$outfile" cat <>"$outfile" }; /* 1 if present, 0 if not */ int ${libname}_is_present = 0; static void *handle = 0; /* 1 if present, 0 if not, 0 with warning to stderr if lib not present or symbol not found */ int ${libname}_symbol_is_present(char *s) { int i; if( !${libname}_is_present ) { fprintf(stderr, "%s: relaytool: `basename "$lib"` not present so cannot check for symbol %s.\n", getenv("_"), s); fprintf(stderr, "%s: relaytool: This probably indicates a bug in the application, please report.\n", getenv("_")); return 0; } i = 0; while (functions[i++]) if (!strcmp( functions[i - 1], s )) return ptrs[i - 1] > 0 ? 1 : 0; i = 0; while (variables[i++]) if (!strcmp( variables[i - 1], s )) return dlsym( handle, s ) > 0 ? 1 : 0; fprintf( stderr, "%s: relaytool: %s is an unknown symbol in `basename "$lib"`.\n", getenv("_"), s ); fprintf( stderr, "%s: relaytool: If you are the developer of this program, please correct the symbol name or rerun relaytool.\n", getenv("_") ); return 0; } __attribute__((noreturn)) void _relaytool_stubcall_${libname}(int offset) { fprintf( stderr, "%s: relaytool: stub call to `basename "${lib}"`:%s, aborting.\n", getenv("_"), functions[offset / sizeof(void*)] ); exit( 1 ); } #if defined( __i386__ ) #define FIXUP_GOT_RELOC(sym, addr) \\ asm("\tmovl %0, %%eax\n" \\ "\tmovl %%eax, " sym "@GOT(%%ebx)\n" : : "r" (addr)); #elif defined( __powerpc__ ) /* The PowerPC ELF ABI is a twisted nightmare. Until I figure it out, for now we don't support GOT fixup on this architecture */ #error Variables are not currently supported on PowerPC #elif defined( __x86_64__ ) #define FIXUP_GOT_RELOC(sym, addr) \\ asm("\tmovq %0, %%rax\n" \\ "\tmovq %%rax, " sym "@GOT(%%rbx)\n" : : "r" (addr)); #else #error Please define FIXUP_GOT_RELOC for your architecture #endif void __attribute__((constructor)) _relaytool_init_${libname}() { int i = 0; ptrs = malloc( sizeof(functions) ); memset( ptrs, 0, sizeof(functions) ); EOF if $using_multilink; then echo -n "char *multilink_libs[${#multilinklist[@]}] = {" | cat >> "$outfile" for l in ${multilinklist[@]}; do echo -n "\"$l\"" | cat >> "$outfile"; if [[ "$l" != "${multilinklist[${#multilinklist[@]}-1]}" ]]; then echo -n ", " | cat >> "$outfile"; else echo "};" | cat >> "$outfile" fi done echo 'int multilink_count=0;' | cat >> "$outfile" echo 'while (!handle) { handle = dlopen(multilink_libs[multilink_count++], RTLD_LAZY );' | cat >> "$outfile" echo "if (multilink_count==${#multilinklist[@]}) break;}"| cat >> "$outfile" else echo "handle = dlopen( \"$soname\", RTLD_LAZY );" | cat >> "$outfile" fi cat <>"$outfile" if (!handle) return; ${libname}_is_present = 1; /* build function jumptable */ while (functions[i++]) ptrs[i - 1] = dlsym( handle, functions[i - 1] ); EOF if [ "$variables" != "" ]; then echo " /* now fixup the global offset table for variable imports */" >>"$outfile"; fi for s in $variables; do echo " FIXUP_GOT_RELOC( \"$s\", dlsym(handle, \"$s\") );" >>"$outfile" done cat <>"$outfile" } #if defined( __i386__ ) #define JUMP_SLOT(name, index) \\ asm(".section .text." name ", \"ax\", @progbits\n" \\ ".globl " name "\n" \\ ".hidden " name "\n" \\ " .type " name ", @function\n" \\ name ":\n" \\ " movl ptrs, %eax\n" \\ " movl " #index "(%eax), %eax\n" \\ " test %eax, %eax\n" \\ " jnz JS" #index "\n" \\ " push \$" #index "\n" \\ " call _relaytool_stubcall_${libname}\n" \\ "JS" #index ": jmp *%eax\n"); #elif defined( __x86_64__ ) #define JUMP_SLOT(name, index) \\ asm(".section .text." name ", \"ax\", @progbits\n" \\ ".globl " name "\n" \\ ".hidden " name "\n" \\ " .type " name ", @function\n" \\ name ":\n" \\ " movq ptrs, %r11\n" \\ " movq " #index "(%r11), %r11\n" \\ " test %r11, %r11\n" \\ " jnz JS" #index "\n" \\ " push $" #index "\n" \\ " call _relaytool_stubcall_${libname}\n" \\ "JS" #index ": jmp *%r11\n"); #elif defined( __powerpc__ ) #define JUMP_SLOT(name, index) \ \ asm(".section .text." name ", \"ax\", @progbits\n" \\ ".globl " name "\n" \\ ".hidden " name "\n" \\ " .type " name ", @function\n" \\ name ":\n" \\ " lis r11, ptrs@ha\n" \\ " lwz r11, " #index "(r11)\n" \\ " cmpi cr0,r11,0\n" \\ " beq- 1f\n" \\ " mtctr r11\n" \\ " bctr\n" \\ "1: li r3, " #index "\n" \\ " b _relaytool_stubcall_${libname}\n" \\ ); #else #error Please define JUMP_SLOT for your architecture #endif /* define placeholders for the variable imports: their type doesn't matter, however we must restrict ELF symbol scope to prevent the definition in the imported shared library being bound to this dummy symbol (not all libs are compiled -Bsymbolic) */ EOF for s in $variables; do echo "int $s __attribute__(( visibility(\"hidden\") )) = -1;" >>"$outfile" done cat <>"$outfile" /* define each jump slot in its own section. this increases generated code size, but it means unused slots can be deleted by the linker when --gc-sections is used. */ EOF # now generate the stubs c=0 for s in $functions; do echo "JUMP_SLOT(\"$s\", $[c * $arch_ptr_size]);" >>"$outfile" (( c++ )) done echo >>"$outfile" cat <>"$outfile" #ifdef __cplusplus } #endif EOF } function fakerelay() { lib="$1" libname=$( echo $( basename "$lib" ) | sed 's/\.so.*//' | tr '-' '_' | tr '.' '_' ) soname=$( objdump -x "$lib" |grep SONAME | awk '{print $2}' ) outfile="$outdir/`basename "$soname"`.stub.c" echo -n "$outfile" cat <"$outfile" /* automatically generated: `date` by `id -un`@`uname -n`, do not edit * * Built by relaytool, a program for building delay-load jumptables * relaytool is (C) 2004 Mike Hearn * See http://autopackage.org/ for details. */ #ifdef __cplusplus extern "C" { #endif /* 1 if present, 0 if not */ int ${libname}_is_present = 1; /* 1 if present, 0 if not, 0 with warning to stderr if lib not present or symbol not found */ int ${libname}_symbol_is_present(char * s) { return 1; } #ifdef __cplusplus } #endif EOF } no_replace=false replace_all=false arch_ok=false arch_ptr_size=0 case `uname -m` in i386 | i486 | i586 | i686 ) arch_ok=true arch_ptr_size=4 ;; x86_64) arch_ok=true arch_ptr_size=8 ;; esac searchpath=( "/usr/lib" "/usr/local/lib" "/lib" `pwd` ) multilinklist=( ) relaylist=( ) # process arguments i=1 while (( i <= $# )); do a="${!i}" if [ "${a:0:2}" == "-L" ]; then searchpath[${#searchpath}]="${a:2}" echo -n "$a " # copy to stdout elif [ "$a" == "--replace-all-libs" ]; then replace_all=true elif [ "$a" == "--partial-map" ]; then using_partial_map=true (( i++ )) partial_map="${!i}" elif [ "$a" == "--minimal-list" ]; then using_minimal_list=true (( i++ )) object_list="${!i}" elif [ "$a" == "--no-replace" ]; then no_replace=true elif [ "$a" == "--multilink" ]; then using_multilink=true (( i++ )) while [[ $i -lt $# && ${!i:0:2} != "--" ]]; do multilinklist[${#multilinklist[@]}]="${!i}" (( i++ )) done continue # $i has already been incremented, just continue with the loop elif [ "$a" == "--relay" ]; then (( i++ )) relaylist[${#relaylist[@]}]="${!i}" elif [ "$a" == "--out-dir" ]; then (( i++ )) outdir="${!i}" elif [ "$a" == "-ldl" ]; then # libdl won't ever be supported by relaytool, so just pass it to stdout echo -n "$a " elif [ "${a:0:2}" == "-l" ]; then lib="${a:2}" # is this lib meant to be relayed? if $replace_all; then found=true else found=false for b in ${relaylist[@]}; do if [ "$b" == "$lib" ]; then found=true fi done fi if $found && $arch_ok; then # yes, so let's find its absolute filename by checking in each search path directory spfound=false for d in ${searchpath[@]}; do if [ -e "$d/lib$lib.so" ]; then absname=$( readfinallink "$d/lib$lib.so" ) if [ $? != 0 ] || [ ! -f "$absname" ]; then error broken symlink "$absname" fi stubfile=$( relay "$absname" ) # now we have to compile the stub if [ $? == 0 ]; then stubobj=$( echo "$stubfile" | sed 's/\.c$/\.o/' ) # remove -include flags from CFLAGS, if any CFLAGS=$( echo $CFLAGS | sed 's/-include .*\.h//g' ) if [ -e /dev/tty ]; then ${CC:-gcc} ${CFLAGS} -fPIC -c -o "$stubobj" "$stubfile" 2>/dev/tty else ${CC:-gcc} ${CFLAGS} -fPIC -c -o "$stubobj" "$stubfile" fi echo -n "$stubobj " fi if $no_replace; then echo -n "-l$lib " fi spfound=true break; fi done if ! $spfound; then error could not find "$lib" in search path fi elif $found && ! $arch_ok; then # yes, so let's find its absolute filename by checking in each search path directory spfound=false for d in ${searchpath[@]}; do if [ -e "$d/lib$lib.so" ]; then absname=$( readfinallink "$d/lib$lib.so" ) if [ $? != 0 ] || [ ! -f "$absname" ]; then error broken symlink "$absname" fi # Create a stub C source that just contains dummy # libwhatever_... support functions stubfile=$( fakerelay "$absname" ) # now we have to compile the stub if [ $? == 0 ]; then stubobj=$( echo "$stubfile" | sed 's/\.c$/\.o/' ) # remove -include flags from CFLAGS, if any CFLAGS=$( echo $CFLAGS | sed 's/-include .*\.h//g' ) if [ -e /dev/tty ]; then ${CC:-gcc} ${CFLAGS} -fPIC -c -o "$stubobj" "$stubfile" 2>/dev/tty else ${CC:-gcc} ${CFLAGS} -fPIC -c -o "$stubobj" "$stubfile" fi echo -n "$stubobj " fi if $no_replace; then echo -n "-l$lib " fi spfound=true break; fi done if ! $spfound; then error could not find "$lib" in search path fi else echo -n "$a " fi else # just copy whatever we don't recognise echo -n "$a " fi (( i++ )) done echo ./Listaller-0.5.8/contrib/libuild/CMakeLists.txt0000664000175000017500000000207512176743563021672 0ustar matthiasmatthias# CMakeLists for LI-BuildTools find_package(Vala REQUIRED) include("${VALA_USE_FILE}") find_package(GLIB2 REQUIRED) pkg_check_modules(GEE REQUIRED gee-1.0) pkg_check_modules(GIO2 REQUIRED gio-2.0) ensure_vala_version("0.14" MINIMUM) set(BUILDLIST_SOURCES buildlist.vala ) link_libraries(${GLIB2_LIBRARIES} ${GEE_LIBRARIES} ${GIO2_LIBRARIES} ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${GLIB2_INCLUDE_DIR} ${GEE_INCLUDE_DIR} ${GIO2_INCLUDE_DIR} ) add_definitions(${GEE_CFLAGS} ${GEE_CFLAGS_OTHER}) vala_add_executable(buildlist ${BUILDLIST_SOURCES} PACKAGES posix glib-2.0 gio-2.0 gee-1.0 ) install(TARGETS buildlist DESTINATION lib/listaller COMPONENT buildtools) install(PROGRAMS ligcc lig++ relaytool DESTINATION bin COMPONENT buildtools ) install(FILES LiBuild/GCC.pm LiBuild/Utils.pm DESTINATION share/listaller/LiBuild COMPONENT buildtools ) install(FILES ctype.h DESTINATION include/libuild COMPONENT headers) install(FILES relaytool.m4 DESTINATION share/aclocal COMPONENT headers) ./Listaller-0.5.8/contrib/libuild/lig++0000775000175000017500000000026112176743563017754 0ustar matthiasmatthias#!/usr/bin/env perl # Simple C++ wrapper for ligcc. use strict; use FindBin; my $apgcc = "$FindBin::Bin/ligcc"; $ENV{LIBUILD_CXX_MODE} = 1; my $a = do $apgcc; die $@ if ($@); ./Listaller-0.5.8/contrib/libuild/relaytool.m40000664000175000017500000000245012176743563021403 0ustar matthiasmatthiasdnl Usage: RELAYTOOL(LIBRARY_NAME, LIBS, CFLAGS, ACTION-IF-WEAK-LINK-IS-POSSIBLE) dnl Example: dnl RELAYTOOL("gtkspell", GTKSPELL_LIBS, GTKSPELL_CFLAGS, gtkspell_weak=yes) dnl Will modify GTKSPELL_LIBS to include a call to relaytool if available dnl or if not, will modify GTKSPELL_CFLAGS to include -D switches to define dnl libgtkspell_is_present=1 and libgtkspell_symbol_is_present=1 AC_DEFUN([RELAYTOOL], [ if test -z "$RELAYTOOL_PROG"; then AC_PATH_PROG(RELAYTOOL_PROG, relaytool, no) fi AC_MSG_CHECKING(whether we can weak link $1) _RELAYTOOL_PROCESSED_NAME=`echo "$1" | sed 's/-/_/g;s/\./_/g;'` _RELAYTOOL_UPPER_NAME=`echo $_RELAYTOOL_PROCESSED_NAME | tr '[[:lower:]]' '[[:upper:]]'` if test "$RELAYTOOL_PROG" = "no"; then AC_MSG_RESULT(no) $3="-DRELAYTOOL_${_RELAYTOOL_UPPER_NAME}='static const int lib${_RELAYTOOL_PROCESSED_NAME}_is_present = 1; static int __attribute__((unused)) lib${_RELAYTOOL_PROCESSED_NAME}_symbol_is_present(char *m) { return 1; }' $$3" else AC_MSG_RESULT(yes) $2="-Wl,--gc-sections \`relaytool --relay $1 $$2\`" $3="-DRELAYTOOL_${_RELAYTOOL_UPPER_NAME}='extern int lib${_RELAYTOOL_PROCESSED_NAME}_is_present; extern int lib${_RELAYTOOL_PROCESSED_NAME}_symbol_is_present(char *s);' $$3" $4 fi ]) ./Listaller-0.5.8/contrib/libuild/BINARY-PORTABILITY-NOTES0000664000175000017500000000325512176743563022530 0ustar matthiasmatthias1) C++ ABI The C++ ABI generated by GCC version 2.95, 2.96, 3.0, and 3.1.1 are incompatible with each other. This means that, for examples, apps compiled with GCC 2.95 cannot link to libraries compiled with GCC 3.2. GCC 3.4 is the latest ABI at the moment (April 2005). But the most widely used ABI at the moment is the GCC 3.2 ABI. 2) Symbol collisions, be aware of what libraries are implicitly linked in. Imagine the following situation: - foo contains the symbol foobar (a function). - libbar contains a symbol with the same name, but is a totally different function. - foo is linked to libbar. When foo tries to call foobar(), it's undefined whether it will call the foobar() from it's own binary, or the one from libbar. Depending on what those functions do, foo may crash or do something it isn't supposed to do. Solution: rtld features, -Bgroup. However, at this moment these are not supported by glibc. Until they are, keep these in mind: - You should mark all functions that you do not want to export (or show up in the symbol table) as static. - If you're a library, you should namespace all functions. - Internal functions that are used within a library, but across multiple .c files, should be prefixed by a _ or __. 3) Linking against shared versions of X11 extension libs Some X libraries, such as libXrender, are originally not shared libraries. Distributions just created shared library versions to save memory. So some distributions don't ship the shared versions at all. Libuild automatically statically links some of those X libraries (you can turn this behavior off of course). This is disabled by default now. 4) Usage of sys_errlist 5) Don't use TLS (the __thread keyword). ./Listaller-0.5.8/contrib/libuild/buildlist.vala0000664000175000017500000001437312176743563021776 0ustar matthiasmatthias/* buildlist.vala -- Generate apsymbols.h file * * Copyright (C) 2009-2010 Jan Niklas Hasse * Copyright (C) 2010-2012 Matthias Klumpp * * Licensed under the GNU General Public License Version 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, either version 3 of the License, or * (at your option) any later version. * * 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 . */ using GLib; class VersionNumber : Object { private int major { get; set; } // x.0.0 private int minor { get; set; } // 0.x.0 private int revision { get; set; } // 0.0.x private string originalString; public VersionNumber(string version) { originalString = version; try { var regex = new Regex("([[:digit:]]*)\\.([[:digit:]]*)\\.*([[:digit:]]*)"); var split = regex.split(version); assert(split.length > 1); // TODO: Don't use assert, print a nice error message instead major = split[1].to_int(); if(split.length > 2) { minor = split[2].to_int(); } else { minor = 0; } if(split.length > 3) { revision = split[3].to_int(); } else { revision = 0; } } catch(GLib.RegexError e) { stdout.printf("Error compiling regular expression!"); Posix.exit(-1); } } public bool newerThan(VersionNumber other) { if(major > other.major) { return true; } else if(major == other.major) { if(minor > other.minor) { return true; } else if(minor == other.minor) { if(revision > other.revision) { return true; } } } return false; } public string getString() { return originalString; } } int main(string[] args) { try { if(args.length != 3) { stdout.printf("Usage: buildlist \n"); return 1; } var minimumVersion = new VersionNumber(args[2]); var filename = args[1] + "/apsymbols.h"; // We need to check if the buildlist executable changed. int fd = Posix.open(args[0], 0); Posix.Stat stat; Posix.fstat(fd, out stat); int modificationTime = (int)stat.st_mtime; Posix.close(fd); string firstLine = "/* minimum glibc %s; modification time of buildlist %d */".printf(minimumVersion.getString(), modificationTime); string content; try { if(FileUtils.get_contents(filename, out content)) // TODO: Don't open the whole file just to read the first line { // Is this already the correct file? if(content.split("\n")[0] == firstLine) { return 0; // Don't generate it again } } } catch(Error e) { // The file couldn't be opened, but we don't care } var headerFile = new StringBuilder(); headerFile.append(firstLine + "\n"); stdout.printf("Generating %s (glibc %s) .", filename, minimumVersion.getString()); stdout.flush(); string output, errorOutput; int returnCode; var libPath = File.new_for_path("/lib/"); var enumerator = libPath.enumerate_children(FileAttribute.STANDARD_NAME, 0, null); FileInfo fileinfo; var counter = 0; var symbolMap = new Gee.HashMap(GLib.str_hash, GLib.str_equal); // This map contains every symbol and the version as close to the minimum version as possible var symbolsNewerThanMinimum = new Gee.HashSet(GLib.str_hash, GLib.str_equal); // This set contains all symbols used by glibc versions newer than minimumVersion while((fileinfo = enumerator.next_file(null)) != null) { ++counter; if(counter % 50 == 0) { stdout.printf("."); stdout.flush(); } Process.spawn_command_line_sync("objdump -T /lib/" + fileinfo.get_name(), out output, out errorOutput, out returnCode); if(returnCode == 0) { foreach(var line in output.split("\n")) { var regex = new Regex("(.*)(GLIBC_)([[:digit:]]\\.([[:digit:]]\\.)*[[:digit:]])(\\)?)([ ]*)(.+)"); if(regex.match(line) && !("PRIVATE" in line)) { var version = new VersionNumber(regex.split(line)[3]); var symbolName = regex.split(line)[7]; var versionInMap = symbolMap.get(symbolName); if(symbolName == "2") { stdout.printf("%s\n", line); } if(versionInMap == null) { symbolMap.set(symbolName, version); } else { // Is this version older then the version in the map? if(versionInMap.newerThan(minimumVersion) && versionInMap.newerThan(version)) { symbolMap.set(symbolName, version); } // If the version in the map is already older then the minimum version, we should only add newer versions if(minimumVersion.newerThan(versionInMap) && version.newerThan(versionInMap) && minimumVersion.newerThan(version)) { symbolMap.set(symbolName, version); } } if(version.newerThan(minimumVersion)) { symbolsNewerThanMinimum.add(symbolName); } } } } } headerFile.append("""/* libuild embedded metadata */ #define LIBUILD_NOTE_METADATA(s) __asm__(".section .metadata, \"MS\", @note, 1\n\t.string \"" s "\"\n\t.previous\n\t") #ifdef LIBUILD_VERSION LIBUILD_NOTE_METADATA("libuild.version=" LIBUILD_VERSION); #endif /* libuild generated symbol exclusion list */ """); var it = symbolMap.keys.iterator (); while (it.next ()) { // Remove all symbols which aren't obsoleted by newer versions if(!symbolsNewerThanMinimum.contains (it.get ())) { continue; } var version = symbolMap.get (it.get ()); string versionToUse = version.getString (); if(version.newerThan (minimumVersion)) { versionToUse = "DONT_USE_THIS_VERSION_%s".printf(version.getString ()); } headerFile.append ("__asm__(\".symver %s, %s@GLIBC_%s\");\n".printf(it.get (), it.get (), versionToUse)); } FileUtils.set_contents (filename, headerFile.str); } catch(Error e) { warning ("%s", e.message); return 1; } stdout.printf (" OK\n"); return 0; } ./Listaller-0.5.8/contrib/libuild/LiBuild/0000775000175000017500000000000012176743563020452 5ustar matthiasmatthias./Listaller-0.5.8/contrib/libuild/LiBuild/Utils.pm0000664000175000017500000000773112176743563022120 0ustar matthiasmatthiaspackage LiBuild::Utils; use strict; use warnings; use Exporter; use base qw(Exporter); use IO::Handle; use IPC::Open2; use POSIX; use Cwd qw(abs_path); our @EXPORT = qw(debug error checkCommand empty homeDir searchLib searchStaticLib soname run parseDataFile writeDataFile); our $debugOpened = 0; ## # debug(message) # # If the environment variable $LIBUILD_DEBUG is set to 1, # then print a debugging message to /dev/tty (not stdout or stderr). sub debug { return if (empty($ENV{LIBUILD_DEBUG}) || !$ENV{LIBUILD_DEBUG}); if (!$debugOpened) { if (open DEBUG, '>/dev/tty') { $debugOpened = 1; } else { return; } } my @args = split /\n/, "@_"; foreach (@args) { $_ = '# ' . $_; $_ .= "\n"; } print DEBUG "\033[1;33m"; print DEBUG join '', @args; print DEBUG "\033[0m"; DEBUG->flush; } ## # error(message) # # Print an error message to stderr. It will be displayed in red. sub error { print STDERR "\033[1;31m"; print STDERR $_[0]; print STDERR "\033[0m"; STDERR->flush; } ## # checkCommand(file) # file: an command's filename. # Returns: the full path to $file, or undef if $file is not a valid command. # # Checks whether $file is an executable which is in $PATH or the working directory. # # Example: # checkCommand('gcc'); # Returns "/usr/bin/gcc" sub checkCommand { my ($file, $file2) = split / /, $_[0]; $file = $file2 if ($file =~ /ccache/); return abs_path($file) if (-x $file); foreach my $dir (split /:+/, $ENV{PATH}) { if (-x "$dir/$file") { return "$dir/$file"; } } return undef; } ## # empty(str) # # Checks whether $str is undefined or empty. sub empty { return !defined($_[0]) || $_[0] eq ''; } ## # homeDir() # # Returns the user's home folder. sub homeDir { if (!$ENV{HOME}) { my $user = getpwuid(POSIX::getuid()); $ENV{HOME} = (getpwnam($user))[7]; } return $ENV{HOME}; } ## # searchLib(basename, [extra_paths]) # basename: the base name of the library. # extra_paths: a reference to an array, which contains extra folders in which to look for the library. # Returns: the absolute path to the library, or undef if not found. # # Get the absolute path of a (static or shared) library. # # Example: # searchLib("libfoo.so.1"); # Returns "/usr/lib/libfoo.so.1" sub searchLib { my ($basename, $extra_paths) = @_; if ($extra_paths) { foreach my $path (reverse(@{$extra_paths})) { return "$path/$basename" if (-f "$path/$basename"); } } foreach my $path ('/usr/local/lib', '/lib', '/usr/lib') { return "$path/$basename" if (-f "$path/$basename"); } return undef; } ## # soname(lib) # lib: a filename to a shared library. # Returns: the soname. # # Get the soname of the specified shared library by reading # the SONAME section of the shared library file. sub soname { my ($lib) = @_; my ($r, $w); if (open2($r, $w, 'objdump', '-p', $lib)) { close $w; my @lines = <$r>; close $r; my ($soname) = grep {/SONAME/} @lines; $soname =~ s/.*?SONAME[ \t]+//; $soname =~ s/\n//gs; return $soname; } else { my ($soname) = $lib =~ /.*\/lib(.+)\.so/; return $soname; } } ## # run(args...) # Returns: the command's exit code. # # Run a command with system(). sub run { # split the first item in @_ into "words". The `printf ...` # takes care of respecting ' and " quotes so we don't split a # quoted string that contains whitespace. If $cmd itself # contains \n, this will still go wrong. my $cmd = shift @_; my @words = `printf '%s\n' $cmd`; chomp @words; my $status = system(@words, @_); return 127 if ($status == -1); return $status / 256 if ($status != 0); return 0; } sub parseDataFile { my ($file, $r_hash) = @_; %{$r_hash} = (); return if (!open FILE, "< $file"); foreach () { next if (/^#/); s/[\r\n]//g; next if (length($_) == 0); my ($key, $value) = split / /, $_, 2; $r_hash->{$key} = $value; } close FILE; } sub writeDataFile { my ($file, $r_hash) = @_; return if (!open FILE, "> $file"); foreach my $key (sort(keys %{$r_hash})) { print FILE "$key $r_hash->{$key}\n"; } close FILE; } 1; ./Listaller-0.5.8/contrib/libuild/LiBuild/GCC.pm0000664000175000017500000003042612176743563021411 0ustar matthiasmatthias# Various gcc-related functions package LiBuild::GCC; use strict; use LiBuild::Utils; use IPC::Open3; ######## Special constants; used for parsing GCC parameters ######## # Parameters that require an extra parameter our $extraTypes = 'o|u|Xlinker|b|V|MF|MT|MQ|I|L|R|Wl,-rpath|isystem|D|x'; # Linker parameters our $linkerTypes = 'L|Wl|o$|l|s|n|R'; # Files with these extensions are objects our $staticLibTypes = 'a|al'; our $objectTypes = "o|os|so(\\.\\d+)*|la|lo|$staticLibTypes"; our $headerTypes = 'h|hpp'; # Source file types our $cTypes = 'c|C'; our $cxxTypes = 'cpp|cxx|cc|c\+\+'; our $srcTypes = "$cTypes|$cxxTypes"; ######## Methods ######## ## # LiBuild::GCC->new(gcc_command) # gcc_command: The command for invoking GCC. # # Create a new LiBuild:GCC object. sub new { my ($class, $gcc) = @_; my %self; $self{gcc} = $gcc; $self{gcc_file} = checkCommand($gcc); if (!defined $self{gcc_file}) { error "$gcc: command not found\n"; exit 127; } # FIXME: should use gcc -print-search-paths. $self{searchPaths} = ["/usr/lib", "/usr/local/lib"]; foreach (reverse(split(/:/, $ENV{LIBRARY_PATH}))) { push @{$self{searchPaths}}, $_; } bless \%self, $class; return \%self; } ## # $gcc->capabilities() # Returns: a hash with capabilities for this compiler. # # Check GCC's capabilities. This function will return # a hash with the following keys: # libgcc : Is 1 if gcc supports the parameter -{shared,static}-libgcc. # as_needed: Is 1 if gcc's linker supports --as-needed. # abi2 : Is 1 if gcc supports -fabi-version=2. # # This function takes care of caching results. sub capabilities { my ($self) = @_; my (%capabilities, %cache); my $gcc = $self->{gcc}; my $gcc_file = $self->{gcc_file}; # First, check the cache my @stat = stat $gcc_file; my $gcc_mtime = $stat[9]; my $home = homeDir(); if (-f "$home/.libuild") { parseDataFile("$home/.libuild", \%cache); if ($cache{version} != 2) { # Cache file version incompatible; delete cache %cache = (); } else { if ($cache{"mtime_$gcc_file"} != $gcc_mtime) { # Cache out of date for this compiler; update cache delete $cache{"libgcc_$gcc_file"}; delete $cache{"abi2_$gcc_file"}; delete $cache{"as_needed_$gcc_file"}; delete $cache{"hash_style_$gcc_file"}; delete $cache{"stack_protector_$gcc_file"}; delete $cache{"fortify_source_$gcc_file"}; } } } my $lc_all = $ENV{LC_ALL}; $ENV{LC_ALL} = 'C'; if (exists $cache{"libgcc_$gcc_file"} && exists $cache{"abi2_$gcc_file"}) { $capabilities{libgcc} = $cache{"libgcc_$gcc_file"}; $capabilities{abi2} = $cache{"abi2_$gcc_file"}; } else { # Get output from 'gcc -v' my ($r, $w, $e); my $pid = open3($w, $r, $e, $gcc_file, '-v'); close $w if ($w); close $e if ($e); my @output = <$r>; waitpid $pid, 0; # Check whether gcc >= 3.0 my ($major, $minor) = $output[@output - 1] =~ /version ([0-9]+)\.([0-9]+)/; if ($major >= 3) { $capabilities{libgcc} = 1; $cache{"libgcc_$gcc_file"} = 1; } else { $capabilities{libgcc} = 0; $cache{"libgcc_$gcc_file"} = 0; } if ($major > 3 || ($major >= 3 && $minor >= 4)) { $capabilities{abi2} = 1; $cache{"abi2_$gcc_file"} = 1; } else { $capabilities{abi2} = 0; $cache{"abi2_$gcc_file"} = 0; } $cache{"mtime_$gcc_file"} = $gcc_mtime; } if (exists $cache{"as_needed_$gcc_file"}) { $capabilities{as_needed} = $cache{"as_needed_$gcc_file"}; } else { my ($r, $w, $e); my $pid = open3($w, $r, $e, $gcc_file, '-Wl,--help'); close $w if ($w); close $e if ($e); local($/); my $output = <$r>; waitpid $pid, 0; if ($output =~ /--as-needed/) { $capabilities{as_needed} = 1; $cache{"as_needed_$gcc_file"} = 1; } else { $capabilities{as_needed} = 0; $cache{"as_needed_$gcc_file"} = 0; } } if (exists $cache{"hash_style_$gcc_file"}) { $capabilities{hash_style} = $cache{"hash_style_$gcc_file"}; } else { my ($r, $w, $e); my $pid = open3($w, $r, $e, $gcc_file, '-Wl,--help'); close $w if ($w); close $e if ($e); local($/); my $output = <$r>; waitpid $pid, 0; if ($output =~ /--hash-style/) { $capabilities{hash_style} = 1; $cache{"hash_style_$gcc_file"} = 1; } else { $capabilities{hash_style} = 0; $cache{"hash_style_$gcc_file"} = 0; } } if (exists $cache{"stack_protector_$gcc_file"}) { $capabilities{stack_protector} = $cache{"stack_protector_$gcc_file"}; } else { # Get output from 'gcc -v' my ($r, $w, $e); my $pid = open3($w, $r, $e, $gcc_file, '-v'); close $w if ($w); close $e if ($e); my @output = <$r>; waitpid $pid, 0; # Check whether gcc >= 3.0 my ($major, $minor) = $output[@output - 1] =~ /version ([0-9]+)\.([0-9]+)/; if ($major >= 4 && $minor >= 1) { $capabilities{stack_protector} = 1; $cache{"stack_protector_$gcc_file"} = 1; } else { $capabilities{stack_protector} = 0; $cache{"stack_protector_$gcc_file"} = 0; } } if (exists $cache{"fortify_source_$gcc_file"}) { $capabilities{fortify_source} = $cache{"fortify_source_$gcc_file"}; } else { # Get output from 'gcc -v' my ($r, $w, $e); my $pid = open3($w, $r, $e, $gcc_file, '-v'); close $w if ($w); close $e if ($e); my @output = <$r>; waitpid $pid, 0; # Check whether gcc >= 4.1 my ($major, $minor) = $output[@output - 1] =~ /version ([0-9]+)\.([0-9]+)/; if ($major >= 4 && $minor >= 1) { $capabilities{fortify_source} = 1; $cache{"fortify_source_$gcc_file"} = 1; } else { $capabilities{fortify_source} = 0; $cache{"fortify_source_$gcc_file"} = 0; } } if (defined $lc_all) { $ENV{LC_ALL} = $lc_all; } else { delete $ENV{LC_ALL}; } $cache{version} = 2; writeDataFile("$home/.libuild", \%cache); return %capabilities; } ## # $gcc->command() # # Returns the GCC command associated with this LiBuild::GCC object. sub command { my ($self) = @_; return $self->{gcc}; } ## # $gcc->foreach(args, callback) # args: a reference to an array which contains GCC parameters. # callback: the callback function which will be called in every iteration of the loop. # # Iterate through each GCC parameter. $callback will be called as follows: # $callback->(type, args...); # $type is the current parameter's type, either "param" or "file" (source file). # args is an array of parameters. If this parameter is a parameter which excepts # another parameter (such as -o, it expects a filename), then the expected # parameter will also be passed to the callback function. sub foreach { my ($self, $args, $callback) = @_; for (my $i = 0; $i < @{$args}; $i++) { $_ = $args->[$i]; if (/^-/ || /\.($objectTypes|$headerTypes)$/ || /.*\.so\.?$/) { # Parameter if (/^-($extraTypes)$/) { # This parameter expects another parameter $callback->("param", $_, $args->[$i + 1]); $i++; } else { $callback->("param", $_); } } else { # File $callback->("file", $_); } } } ## # $gcc->splitParams(args, files, params) # args: a reference to an array which contains GCC parameters. # files: a reference to an array, or undef. # params: a reference to an array, or undef. # # Parse GCC's parameters. Seperate files and arguments. # A list of files will be stored in the array referenced to by $file, # a list of non-file parameters will be stored in the array referenced to by $params. sub splitParams { my ($self, $args, $files, $params) = @_; my $callback = sub { my $type = shift; if ($type eq "param") { push @{$params}, @_ if ($params); } elsif ($type eq "file") { push @{$files}, $_[0] if ($files); } }; $self->foreach($args, $callback); } sub stripLinkerParams { my ($self, $r_params, $linking) = @_; my @params; my $i = 0; my $callback = sub { my $type = shift; if ($type eq 'param' && $_[0] =~ /^-($linkerTypes)/) { push @{$linking}, @_; } else { push @params, @_; } }; $self->foreach($r_params, $callback); @{$r_params} = @params; } sub addSearchPaths { my ($self, $dir) = @_; push @{$self->{searchPaths}}, $dir; } # Parse $args and extract library search paths from it. # Those paths, along with paths added by addSearchPaths(), # will be appended to $paths. sub getSearchPaths { my ($self, $args, $paths) = @_; my $callback = sub { my $type = shift; return if ($type ne "param"); if ($_[0] eq "-L") { push @{$paths}, $_[1]; } elsif ($_[0] =~ /^-L(.+)/ || $_[0] =~ /^--library-path=(.+)/) { push @{$paths}, $1; } }; $self->foreach($args, $callback); push @{$paths}, @{$self->{searchPaths}}; } ## # $gcc->isLibrary(arg, libname) # # Check whether $arg is a (dynamic) library argument. # The base library name will be stored in $$libname. sub isLibrary { my ($self, $arg, $libname) = @_; if ($arg =~ /^-l(.+)/ || $arg =~ /^--library=(.+)/ || $arg =~ /^(?:.*\/)?lib([^\/]+)\.so/) { $$libname = $1 if ($libname); return 1; } else { return 0; } } ## # $gcc->isObject(arg) # # Check whether $arg is an object. This includes static libraries. sub isObject { my ($self, $arg) = @_; return $arg !~ /^-/ && $arg =~ /\.($objectTypes)$/; } sub isStaticLib { my ($self, $arg) = @_; return $arg !~ /^-/ && $arg =~ /\.($staticLibTypes)$/; } ## # $gcc->isSource(file) # # Checks whether $file is a source file. sub isSource { my ($self, $file) = @_; return $file =~ /\.($srcTypes)$/; } ## # $gcc->isCxxSource(file) # # Checks whether $file is a C++ source file. sub isCxxSource { my ($self, $file) = @_; return $file =~ /\.($cxxTypes)$/; } # I wish I know how to explain what these functions do, but I can't. :( # If you know a better way to name these, please do tell me. sub sourceOrderIsImportant { my ($self, $arg) = @_; return $arg =~ /^-(x)$/; } sub linkOrderIsImportant { my ($self, $arg) = @_; return $arg =~ /^-(Wl,--whole-archive|Wl,--no-whole-archive)$/; } ## # $gcc->getOutputFile(args) # args: a reference to an array which contains GCC parameters. # Returns: a filename. # # Parse the GCC arguments and detect the output filename. sub getOutputFile { my ($gcc, $args) = @_; my ($output, $compilingToObject, $source); my $callback = sub { my $type = shift; if ($type eq 'param' && $_[0] eq '-o') { $output = $_[1]; } elsif ($type eq 'param' && $_[0] eq '-c') { $compilingToObject = 1; } elsif ($type eq 'file' && $gcc->isSource($_[0])) { $source = $_[0]; } }; $gcc->foreach($args, $callback); if (defined $output) { return $output; } elsif ($compilingToObject) { $source =~ s/\.[^.]*?$/.o/; return $source; } else { return "a.out"; } } ## # $gcc->setOutputFile(args, new_output_file) # args: a reference to an array which contains GCC parameters. # new_output_file: the new output filename. # # Parse the GCC arguments and change the output filename. # The array referenced by $args will be modified. sub setOutputFile { my ($gcc, $args, $new_output_file) = @_; my (@newArgs, $changed); my $callback = sub { my $type = shift; if ($type eq 'param' && $_[0] eq '-o') { push @newArgs, "-o", $new_output_file; $changed = 1; } else { push @newArgs, @_; } }; $gcc->foreach($args, $callback); if (!$changed) { push @newArgs, "-o", $new_output_file if (!$changed); } @{$args} = @newArgs; } ## # $gcc->situation(args) # args: a reference to an array which contains GCC arguments. # Returns: 'compile', 'depcheck', 'compile and link', 'linking' or 'other'. # # Detect the situation in which the compiler is used. # Basically, there are 5 situations in which the compiler is used: # 1) Compilation (to an object file). # 2) Linking. # 3) Compilation and linking. # 4) Dependancy checking with -M* or -E. # 5) None of the above. Compiler is invoked with --help or something. # Note that source files may also contain non-C/C++ files. sub situation { my ($self, $args) = @_; my $files = 0; for (@{$args}) { $files++ if (!(/^-/)); } for (@{$args}) { if (/^-c$/) { # Situation 1 return 'compile'; } elsif (/^-M(|M|G)$/ || /^-E$/) { # Situation 4 return 'depcheck'; } } if ($files == 1) { my $i = 0; for (@{$args}) { if (!(/^-/) && (/\.($headerTypes)$/)) { print($args->[$i], "\n"); return 'precompiled header'; } $i++; } } my $i = 0; for (@{$args}) { if (!(/^-/) && !(/\.($objectTypes)$/)) { if ($i > 0 && $args->[$i - 1] =~ /^-($extraTypes)$/) { $i++; next; } else { # Situation 3 return 'compile and link'; } } $i++; } if ($files == 0) { # Situation 5 return 'other'; } else { # Situation 2 return 'linking'; } } 1; ./Listaller-0.5.8/contrib/libuild/ChangeLog0000664000175000017500000003746112176743563020713 0ustar matthiasmatthias2010-08-06 Jan Niklas Hasse * buildlist.vala: Using new libgee API for accessing keys of a HashMap. 2010-07-24 Jan Niklas Hasse * apgcc: Bumped minimal glibc version to 2.7.0. * buildlist.vala: Catch Glib.RegexError to avoid warning. 2009-06-18 Jan Niklas Hasse * buildlist.vala: Fixed a bug which caused more unusable symbols then needed. (e.g. pthread_cond_signal@GLIBC_DONT_USE_THIS_VERSION_2.3.2) 2009-06-13 Jan Niklas Hasse * buildlist: Removing since the replacement buildlist.vala * apsymbols.h: This file is now generated before compilation. * Makefile: Adding code to compile buildlist.vala * apgcc: Call buildlist before compiling * buildlist.vala: New program to create apsymbols.h. It's written in Vala and needs to be compilied. -------------------- 2.0.9 was released -------------------- 2009-03-13 Jan Niklas Hasse * apgcc: Use warn instead of print to display warnings. Thanks to Scott Pakin for the patch. -------------------- 2.0.8 was released -------------------- 2009-03-11 Jan Niklas Hasse * Apbuild/GCC.pm: Applied patch by Mike Lundy which fixes compiling of libpng where apgcc detected a symbol list as precompiled header rather than a depcheck. Fixes #118. * apsymbols.h: New symbol list created on a GLIBC_2.9 machine by Mike Lundy. Thanks! Fixes #117. 2009-03-11 Jan Niklas Hasse * apgcc: Applied patch by Scott Pakin which shows a warning message when a library in APBUILD_STATIC isn't found. * Apbuild/GCC.pm: getSearchPaths: Correctly add the content of the list not a reference. Also a patch by Scott Pakin, thanks! 2009-03-10 Jan Niklas Hasse * apgcc: Applied patch by Scott Pakin which fixes statically compiling of libuuid. -------------------- 2.0.7 was released -------------------- 2008-11-10 Jan Niklas Hasse * Apbuild/GCC.pm: Check if FORTIFY_SOURCE is available. I'm not sure if this really was introduced in gcc 4.1, but it should fix the the linker errors in Ubuntu 8.10 and other new distros using this feature. * apgcc: Add -U_FORTIFY_SOURCE to deactivate FORTIFY_SOURCE=2. 2008-09-11 Jan Niklas Hasse * buildlist: Bump minimum GLibc version to 2.3 (from 2.2) * apsymbols.h: update list to work with the new 2.3 glibc min version (Patch from Taj, me and Isak, should fix #20) * apgcc: Check if APBUILD_STATIC_X is definied to prevent warnings. 2008-08-03 Jan Niklas Hasse * relaytool: Check if /dev/tty exists. Fixes #63 2008-08-03 Jan Niklas Hasse * apgcc: Don't statically link X11 libs by default. Fixes #61 -------------------- 2.0.6 was released -------------------- Sun Dec 30 19:17:03 UTC 2007 Taj Morton * relaytool: Apply patch from res in ticket #52. Now, if a lib cannot be relaytooled for some reason, a stub that ensures libwhatever_is_present is defined will be generated. Sun Sep 30 00:29:13 UTC 2007 Taj Morton * relaytool: When multi-linking, use the first SONAME passed to --multilink as the name to use for the _is_present variable and _symbol_is_present function. Fixes #37. Sat Sep 22 02:39:11 UTC 2007 Taj Morton * relaytool: Add --out-dir feature by user 'res' in ticket #50. 2007-09-22 Isak Savo * relaytool (arch_ptr_size): Use 'uname -m' instead of 'arch' to get machine name. Patch from user 'res' in ticket #51 (ticket fixed by this commit) Tue Aug 14 17:04:32 UTC 2007 Taj Morton * apgcc: Apply patch from Unfleshed One for precompiled header support. Fixes #32. * Apbuild/GCC.pm: Apply patch from Unfleshed One from precompiled header and SCons/Qt4 integration. Fixes #32. Tue Aug 14 16:51:30 UTC 2007 Taj Morton * relaytool: When running on unsupported arch, give correct defines for lib_is_present and symbol_is_present. Mon Jul 9 23:22:21 UTC 2007 Curtis L. Knight * apgcc: Update for 2.0.6 release. * Makefile: Update for 2.0.6 release. -------------------- 2.0.5 was released -------------------- Mon Jun 4 02:03:06 UTC 2007 Taj Morton * apgcc: Append statically linked file's deps before adjusting link line so that you can statically link the deps of the libs you're statically linking (if that made any sense). Sat May 26 15:28:14 UTC 2007 Taj Morton * make-icons: Put icons into a directory called icons relative to where make-icons was run from. Ask user for type so that icons get put in correct subdirectory. Fri May 25 03:02:28 UTC 2007 Curtis L. Knight * apgcc: Update for 2.0.5 release. * Makefile: Update for 2.0.5 release. Wed May 23 00:45:48 UTC 2007 Taj Morton * apgcc: When statically linking, find the lib's DT_NEEDED entries and link against them so we don't get linking errors. Thu May 17 20:38:11 UTC 2007 Taj Morton * relaytool: Use /bin/bash instead of /bin/sh so we can work on Ubuntu (where sh -> dash). Thanks ACSpike. Add multilink support to relaytool (TODO: document it better). -------------------- 2.0.4 was released -------------------- Sun Apr 8 11:22:23 UTC 2007 Curtis L. Knight * apgcc: Update for 2.0.4 release. * Makefile: Update for 2.0.4 release. Sat Mar 31 21:09:45 UTC 2007 Taj Morton * Apbuild/GCC.pm: Check if gcc supports -fstack-protector, so it can be disabled. * apgcc: If gcc supports -fstack-protector, disable it (it adds a silent dependency on GLIBC 2.4). * apsymbols.h: Rebuilt with GLIBC 2.4. Thanks to Chris Guirl for rebuilding. Thu Mar 29 05:08:40 UTC 2007 Taj Morton * apgcc: Respect the $APBUILD_NO_STATIC_X variable (as documented on website). This doesn't mean it's a good idea to use this features. -------------------- 2.0.3 was released -------------------- Sun Dec 17 01:05:08 UTC 2006 Curtis L. Knight * apgcc: Update for 2.0.3 release. * Makefile: Update for 2.0.3 release. Sat Nov 25 23:20:07 UTC 2006 Taj Morton * Apbuild/GCC.pm: Detect if ld supports --hash-style so that we can force both .gnu.hash and .hash to be generated on FC6. * apgcc: If linker supports --hash-style, generate both .gnu.hash and .hash sections so that binary works with linkers with support for either type. By default, FC6 only generates .gnu.hash which makes its binaries only work on systems with .gnu.hash. See: http://fcp.surfsite.org/modules/newbb/viewtopic.php?topic_id=29929&forum=10&post_id=128939 -------------------- 2.0.2 was released -------------------- Thu Nov 2 22:53:33 UTC 2006 Taj Morton * apgcc: Allow people to replace -I flags passed to apgcc with ones from $APBUILD_INCLUDE. For example /opt/kde/include=/home/taj/kde-includes/3.3 replaces -I/opt/kde/include with -I/home/taj/kde-includes/3.3. This is only useful for apps where include path order is important (amarok 1.4.3, see comments for details). -------------------- 2.0.1 was released -------------------- Fri Oct 13 14:54:54 UTC 2006 Taj Morton * apgcc: Revert commit that "Just use[d] the multiple-file code for link and compile in 1 command." This broke compiling main/libexec. Post 1.2 this code will get better, I promise. :) Thu Oct 12 04:36:56 UTC 2006 Taj Morton * apgcc: [translateLibNames()]: Always find libstdc++ if compiling C++, force use of the compilers libstdc++, instead of what libtool provides (which is probably wrong when using your non-system g++). Mon Oct 9 00:57:48 UTC 2006 Taj Morton * apgcc: Remove special case with compiling and linking in 1 command with 1 file. This code never called linkObjects() and so X libs were never statically linked in. Just use the multiple-file code for link and compile in 1 command. [forceStatic()]: Link Xfixes if Xcursor is linked because sometimes Xcursor depends on Xfixes (on Slack 11, xorg 6.9.0, at least). Sun Sep 24 22:38:50 UTC 2006 Taj Morton * apgcc: [rearrangeForAsNeeded()]: Put -lXRender at the end of the link command. See http://lists.sunsite.dk/cgi-bin/ezmlm-cgi?21:mss:5187:200609:lkfnloheeaingojmnemi for details. 2006-09-13 Isak Savo * Makefile (PREFIX): Replaced bash specific '[[' testing with 'test' to work better with Ubuntu Edgy's 'dash' shell Thu Sep 7 19:10:53 UTC 2006 Taj Morton * apgcc: When compiling and linking in 1 command make sure bogus deps are stripped. Note: I did not update the double-compilation part of the code to have the fix because it's dead code. Tue May 30 01:04:05 2006 Mike Hearn * relaytool: Add x64 support based on patch by Psyche. Fix a couple of minor bugs and make the code flow better. Thu Apr 13 23:56:32 2006 Mike Hearn * apgcc (translateLibNames): Only drop libstdc++.so from the arguments list when double compiling. This fixes the case when libtool passes -nostdlib and then gives us a libstdc++ directly. However it's kind of a hack and will need to be changed to work properly with double compiling. 2006-03-04 Hongli Lai * apgcc: Apply patch by Francesco Montorsi. This adds a new option APBUILD_RESOLVE_LIBPATH, which is a space-seperated list of regular expressions which specify the libraries whose path must be resolved into absolute paths. This works around certain linking problems with static libraries, when the order of the linking arguments is changed. 2006-02-04 Peter Lund * APBuild/GCC.pm: Fix double linking of .moc.o files 2006-02-01 Peter Lund * apgcc: Add support gcc-2.9x. Minor comment/--help fixes. See http://comments.gmane.org/gmane.comp.autopackage.devel/4408 for more details * APBuild/GCC.pm, APBuild/Utils.pm: Make apgcc work with ccache. 2006-01-23 Peter Lund * Makefile: Use eager notation (`:=') instead of `=' for var assignment. Add $(PROGS)-variable to hold all binary names. 2005-12-02 Hongli Lai * apgcc (rearrangeForAsNeeded): Special case -lbfd and -liberty as they can cause link failures in some cases. 2005-11-30 Hongli Lai * apgcc: Do not link to incorrect libstdc++ version: remove /usr/lib/libstdc++.so.x from the arguments. 2005-11-08 Hongli Lai * apgcc, Apbuild/GCC.pm, Apbuild/Utils.pm: - Code cleanups. - Fix C++ double compiling bugs: correctly set output filename when -o is not given, surpress gcc output when double compiling. 2005-11-07 Hongli Lai * apgcc (linkObjects): remove duplicate system() call which does nothing good but breaks some libtool versions. 2005-10-30 Jan Nieuwenhuizen * Apbuild/GCC.pm (new): New member variable: searchPaths. Bugfix: add LIBRARY_PATH to initialization. (addSearchPaths): New function. (getSearchPaths): Use searchPaths. * Apbuild/Utils.pm (searchLib): Bugfix: correct order of search dirs. * apgcc (removeLibraries): Maintain searchPath for full .so name. October 16 2005 * apgcc: Correctly double compile C++ binaries during linking. September 28 2005 Hongli Lai * Support $APBUILD_NO_RPATH: don't add rpath entries. Feature request by Andreas. September 3 2005 Hongli Lai * relaytool: support W, V and G symbols (experimental C++ support) August 5 2005 Hongli Lai * apgcc and GCC.pm: fixed an argument reordering bug. * Makefile: add make-icons to distrbution. 2005-08-02 Mike Hearn * relaytool: Remove -include flags, if any. This makes relaytool precompiled-header safe. 2005-07-31 Mike Hearn * relaytool.m4, relaytool: Optimization: use -ffunction-sections and --gc-sections to eliminate unused jump slots * relaytool: Don't break when CFLAGS is set * relaytool: Optimization: only generate jump slots for exported symbols from the library. July 30 2005 Hongli Lai * Apbuild/GCC.pm: Commit Joseph's patch: fix $gcc->isLibrary() 2005-07-20 Mike Hearn * Makefile (dist): Ship relaytool.m4, make extra scripts +x * relaytool.m4: Big improvements to the way you integrate with C/C++ build systems. July 9 2005 Hongli Lai * apgcc, Apbuild/GCC.pm (rearrangeForAsNeeded): Fix rearrangement of objects: don't recognize parameters (-Wl,foo.so) as objects. Thu Jun 16 22:43:55 2005 Mike Hearn * make-icons: Add a script to generate icon theme dropins from an SVG file, a convenient utility for developers May 31 2005 Hongli Lai * apgcc: Automatically compile C++ source files with two different ABIs. By default, C++ files are compiled with ABI 1. Another file with ABI 2 is stored as output.o.GCCABI2 May 16th 2005 Vincent Béron * relaytool: Keep only one copy of a given symbol per lib. * relaytool: libdl won't ever be supported by relaytool, so skip it. * relaytool: Add a --version option, reorganize a bit the rest of --help. * relaytool: Allow generating a stub file for every library passed in args. * relaytool: Skip generating a stub for libraries for which no functions are called or no variables used. * relaytool: Use proper quoting. * relaytool: Support old nm versions May 15th 2005 Vincent Béron * relaytool: Allow relaytool to understand more than one --relay parameter. * relaytool: Enable (via --minimal-list) relaytool to only generate the minimum list of symbols by looking which ones are undefined in .o objects. * relaytool: Use CFLAGS (if available) while compiling the stub file. * relaytool: Use a shell function to do the same thing as readlink -f as the latter isn't always understood by readlink. * relaytool: Fix a typo in PPC C code. May 14th 2005 Vincent Béron * relaytool: Don't accidentally exclude all symbols with _init or _fini in their names. April 16 2005 Hongli Lai * Add new tool 'scandeps' which makes it easier for you to find your software's library dependancies. * Improve documentation. April 15 2005 Hongli Lai * apgcc: add support for $APBUILD_INCLUDE, which allows you to prepend any folder to the header search path. * Improve documentation. Fri Apr 15 22:47:06 2005 Mike Hearn * apsymbols.h: Update to glibc 2.3.5 * buildlist: Don't spew so many errors April 10 2005 Hongli Lai * What? We have a ChangeLog? I didn't know that! In the last 2 weeks I worked on these: - Support for GCC 3.4+'s --as-needed, for smarter automatic bogus dependancy stripping. - Improved our own dependancy stripper. - Big code cleanups. Tue Apr 5 02:14:49 2005 Mike Hearn * relaytool.m4: Add an autoconf check for relaytool Mon Feb 14 00:37:46 2005 Mike Hearn * relaytool: Add --no-replace option, fix misc bugs revealed by actually using relaytool in a real app Fri Feb 11 23:49:24 2005 Mike Hearn * relaytool: don't request PROT_EXEC permissions, they aren't needed 2004-06-06 Mike Hearn * relaytool: make relaytool jump thunks NX safe by using mmap rather than malloc. * relaytool: Fix ELF scoping of dummy symbols for variable imports, so the definitions in the imported lib don't get resolved to the dummies (not all libs are compiled -Bsymbolic) * relaytool: support partial maps ./Listaller-0.5.8/contrib/libuild/ctype.h0000664000175000017500000002240012176743563020421 0ustar matthiasmatthias/* Copyright (C) 1991,92,93,95,96,97,98,99,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The GNU C Library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ /* * ISO C99 Standard 7.4: Character handling */ #ifndef _CTYPE_H #define _CTYPE_H 1 #include #include __BEGIN_DECLS #ifndef _ISbit /* These are all the characteristics of characters. If there get to be more than 16 distinct characteristics, many things must be changed that use `unsigned short int's. The characteristics are stored always in network byte order (big endian). We define the bit value interpretations here dependent on the machine's byte order. */ # include # if __BYTE_ORDER == __BIG_ENDIAN # define _ISbit(bit) (1 << (bit)) # else /* __BYTE_ORDER == __LITTLE_ENDIAN */ # define _ISbit(bit) ((bit) < 8 ? ((1 << (bit)) << 8) : ((1 << (bit)) >> 8)) # endif enum { _ISupper = _ISbit (0), /* UPPERCASE. */ _ISlower = _ISbit (1), /* lowercase. */ _ISalpha = _ISbit (2), /* Alphabetic. */ _ISdigit = _ISbit (3), /* Numeric. */ _ISxdigit = _ISbit (4), /* Hexadecimal numeric. */ _ISspace = _ISbit (5), /* Whitespace. */ _ISprint = _ISbit (6), /* Printing. */ _ISgraph = _ISbit (7), /* Graphical. */ _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */ _IScntrl = _ISbit (9), /* Control character. */ _ISpunct = _ISbit (10), /* Punctuation. */ _ISalnum = _ISbit (11) /* Alphanumeric. */ }; #endif /* ! _ISbit */ /* These are defined in ctype-info.c. The declarations here must match those in localeinfo.h. These point into arrays of 384, so they can be indexed by any `unsigned char' value [0,255]; by EOF (-1); or by any `signed char' value [-128,-1). ISO C requires that the ctype functions work for `unsigned char' values and for EOF; we also support negative `signed char' values for broken old programs. The case conversion arrays are of `int's rather than `unsigned char's because tolower (EOF) must be EOF, which doesn't fit into an `unsigned char'. But today more important is that the arrays are also used for multi-byte character sets. */ extern __const unsigned short int *__ctype_b; /* Characteristics. */ extern __const __int32_t *__ctype_tolower; /* Case conversions. */ extern __const __int32_t *__ctype_toupper; /* Case conversions. */ __asm__(".symver __ctype_b,__ctype_b@GLIBC_2.0"); __asm__(".symver __ctype_tolower,__ctype_tolower@GLIBC_2.0"); __asm__(".symver __ctype_toupper,__ctype_toupper@GLIBC_2.0"); #define __isctype(c, type) \ (__ctype_b[(int) (c)] & (unsigned short int) type) #define __isascii(c) (((c) & ~0x7f) == 0) /* If C is a 7 bit value. */ #define __toascii(c) ((c) & 0x7f) /* Mask off high bits. */ #define __exctype(name) extern int name (int) __THROW /* The following names are all functions: int isCHARACTERISTIC(int c); which return nonzero iff C has CHARACTERISTIC. For the meaning of the characteristic names, see the `enum' above. */ __exctype (isalnum); __exctype (isalpha); __exctype (iscntrl); __exctype (isdigit); __exctype (islower); __exctype (isgraph); __exctype (isprint); __exctype (ispunct); __exctype (isspace); __exctype (isupper); __exctype (isxdigit); #ifdef __USE_ISOC99 __exctype (isblank); #endif /* Return the lowercase version of C. */ extern int tolower (int __c) __THROW; /* Return the uppercase version of C. */ extern int toupper (int __c) __THROW; #if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN /* Return nonzero iff C is in the ASCII set (i.e., is no more than 7 bits wide). */ extern int isascii (int __c) __THROW; /* Return the part of C that is in the ASCII set (i.e., the low-order 7 bits of C). */ extern int toascii (int __c) __THROW; /* These are the same as `toupper' and `tolower' except that they do not check the argument for being in the range of a `char'. */ __exctype (_toupper); __exctype (_tolower); #endif /* Use SVID or use misc. */ /* This code is needed for the optimized mapping functions. */ #define __tobody(c, f, a, args) \ (__extension__ \ ({ int __res; \ if (sizeof (c) > 1) \ { \ if (__builtin_constant_p (c)) \ { \ int __c = (c); \ __res = __c < -128 || __c > 255 ? __c : a[__c]; \ } \ else \ __res = f args; \ } \ else \ __res = a[(int) (c)]; \ __res; })) #ifndef __NO_CTYPE # define isalnum(c) __isctype((c), _ISalnum) # define isalpha(c) __isctype((c), _ISalpha) # define iscntrl(c) __isctype((c), _IScntrl) # define isdigit(c) __isctype((c), _ISdigit) # define islower(c) __isctype((c), _ISlower) # define isgraph(c) __isctype((c), _ISgraph) # define isprint(c) __isctype((c), _ISprint) # define ispunct(c) __isctype((c), _ISpunct) # define isspace(c) __isctype((c), _ISspace) # define isupper(c) __isctype((c), _ISupper) # define isxdigit(c) __isctype((c), _ISxdigit) # ifdef __USE_ISOC99 # define isblank(c) __isctype((c), _ISblank) # endif # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus # define tolower(c) __tobody (c, tolower, __ctype_tolower, (c)) # define toupper(c) __tobody (c, toupper, __ctype_toupper, (c)) # endif /* Optimizing gcc */ # if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN # define isascii(c) __isascii (c) # define toascii(c) __toascii (c) # define _tolower(c) ((int) __ctype_tolower[(int) (c)]) # define _toupper(c) ((int) __ctype_toupper[(int) (c)]) # endif #endif /* Not __NO_CTYPE. */ #ifdef __USE_GNU /* The concept of one static locale per category is not very well thought out. Many applications will need to process its data using information from several different locales. Another application is the implementation of the internationalization handling in the upcoming ISO C++ standard library. To support this another set of the functions using locale data exist which have an additional argument. Attention: all these functions are *not* standardized in any form. This is a proof-of-concept implementation. */ /* Structure for reentrant locale using functions. This is an (almost) opaque type for the user level programs. */ # include /* These definitions are similar to the ones above but all functions take as an argument a handle for the locale which shall be used. */ # define __isctype_l(c, type, locale) \ ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type) # define __exctype_l(name) extern int name (int, __locale_t) __THROW /* The following names are all functions: int isCHARACTERISTIC(int c, locale_t *locale); which return nonzero iff C has CHARACTERISTIC. For the meaning of the characteristic names, see the `enum' above. */ __exctype_l (__isalnum_l); __exctype_l (__isalpha_l); __exctype_l (__iscntrl_l); __exctype_l (__isdigit_l); __exctype_l (__islower_l); __exctype_l (__isgraph_l); __exctype_l (__isprint_l); __exctype_l (__ispunct_l); __exctype_l (__isspace_l); __exctype_l (__isupper_l); __exctype_l (__isxdigit_l); __exctype_l (__isblank_l); /* Return the lowercase version of C in locale L. */ extern int __tolower_l (int __c, __locale_t __l) __THROW; /* Return the uppercase version of C. */ extern int __toupper_l (int __c, __locale_t __l) __THROW; # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus # define __tolower_l(c, locale) \ __tobody (c, __tolower_l, (locale)->__ctype_tolower, (c, locale)) # define __toupper_l(c, locale) \ __tobody (c, __toupper_l, (locale)->__ctype_toupper, (c, locale)) # endif /* Optimizing gcc */ # ifndef __NO_CTYPE # define __isalnum_l(c,l) __isctype_l((c), _ISalnum, (l)) # define __isalpha_l(c,l) __isctype_l((c), _ISalpha, (l)) # define __iscntrl_l(c,l) __isctype_l((c), _IScntrl, (l)) # define __isdigit_l(c,l) __isctype_l((c), _ISdigit, (l)) # define __islower_l(c,l) __isctype_l((c), _ISlower, (l)) # define __isgraph_l(c,l) __isctype_l((c), _ISgraph, (l)) # define __isprint_l(c,l) __isctype_l((c), _ISprint, (l)) # define __ispunct_l(c,l) __isctype_l((c), _ISpunct, (l)) # define __isspace_l(c,l) __isctype_l((c), _ISspace, (l)) # define __isupper_l(c,l) __isctype_l((c), _ISupper, (l)) # define __isxdigit_l(c,l) __isctype_l((c), _ISxdigit, (l)) # define __isblank_l(c,l) __isctype_l((c), _ISblank, (l)) # if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN # define __isascii_l(c,l) __isascii(c) # define __toascii_l(c,l) __toascii(c) # endif # endif /* Not __NO_CTYPE. */ #endif /* Use GNU. */ __END_DECLS #endif /* ctype.h */ ./Listaller-0.5.8/contrib/visual-ldd/0000775000175000017500000000000012176743563017546 5ustar matthiasmatthias./Listaller-0.5.8/contrib/visual-ldd/visual-ldd.pro0000664000175000017500000000062712176743563022341 0ustar matthiasmatthias#------------------------------------------------- # # Project file for Visual-LDD # Created on D:2010-07-18 T:17:30:59 # #------------------------------------------------- QT += core gui TARGET = visual-ldd TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp \ treeitem.cpp \ treemodel.cpp HEADERS += mainwindow.h \ treemodel.h \ treeitem.h FORMS += mainwindow.ui RESOURCES += \ resources.qrc ./Listaller-0.5.8/contrib/visual-ldd/mainwindow.ui0000664000175000017500000000607112176743563022265 0ustar matthiasmatthias MainWindow 0 0 548 447 Visual LDD :/icons/AppIcon:/icons/AppIcon 0 0 548 18 File ? TopToolBarArea false Load binary Ctrl+O Close About actionLoad activated() MainWindow fileOpen() -1 -1 223 157 actionClose activated() MainWindow close() -1 -1 273 223 actionAbout activated() MainWindow showAboutBox() -1 -1 273 223 ./Listaller-0.5.8/contrib/visual-ldd/getopt.h0000664000175000017500000001161112176743563021221 0ustar matthiasmatthias/* Declarations for getopt. Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. 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; either version 3, or (at your option) any later version. 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, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ /* HAVE_DECL_* is a three-state macro: undefined, 0 or 1. If it is undefined, we haven't run the autoconf check so provide the declaration without arguments. If it is 0, we checked and failed to find the declaration so provide a fully prototyped one. If it is 1, we found it so don't provide any declaration at all. */ #if !HAVE_DECL_GETOPT #if defined (__GNU_LIBRARY__) || defined (HAVE_DECL_GETOPT) /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else extern int getopt (); #endif #endif /* !HAVE_DECL_GETOPT */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* getopt.h */ ./Listaller-0.5.8/contrib/visual-ldd/CMakeLists.txt0000664000175000017500000000007712176743563022312 0ustar matthiasmatthias# CMakeLists for Visual-LDD #TODO: Build & Install Visual-LDD ./Listaller-0.5.8/contrib/visual-ldd/treemodel.cpp0000664000175000017500000000611512176743563022235 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #include #include "treeitem.h" #include "treemodel.h" TreeModel::TreeModel(QObject *parent) : QAbstractItemModel(parent) { rootItem = new TreeItem("Name","Path"); } TreeModel::~TreeModel() { delete rootItem; } int TreeModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) return static_cast(parent.internalPointer())->columnCount(); else return rootItem->columnCount(); } QVariant TreeModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); TreeItem *item = static_cast(index.internalPointer()); if (role == Qt::BackgroundColorRole) { return QColor(item->getColor()); } if (role != Qt::DisplayRole) return QVariant(); return item->data(index.column()); } Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const { if (!index.isValid()) return 0; return Qt::ItemIsEnabled | Qt::ItemIsSelectable; } QVariant TreeModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) return rootItem->data(section); return QVariant(); } TreeItem *TreeModel::getRoot() const { return rootItem; } QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const { if (!hasIndex(row, column, parent)) return QModelIndex(); TreeItem *parentItem; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); TreeItem *childItem = parentItem->child(row); if (childItem) return createIndex(row, column, childItem); else return QModelIndex(); } QModelIndex TreeModel::parent(const QModelIndex &index) const { if (!index.isValid()) return QModelIndex(); TreeItem *childItem = static_cast(index.internalPointer()); TreeItem *parentItem = childItem->parent(); if (parentItem == rootItem) return QModelIndex(); return createIndex(parentItem->row(), 0, parentItem); } int TreeModel::rowCount(const QModelIndex &parent) const { TreeItem *parentItem; if (parent.column() > 0) return 0; if (!parent.isValid()) parentItem = rootItem; else parentItem = static_cast(parent.internalPointer()); return parentItem->childCount(); } ./Listaller-0.5.8/contrib/visual-ldd/visual-ldd.desktop0000664000175000017500000000047512176743563023213 0ustar matthiasmatthias[Desktop Entry] Exec=visual-ldd GenericName=Visual Dependency Walker Icon=visual-ldd.png Name=Visual Dependency Walker Comment=Graphically display executables' dependencies in a tree Terminal=false Type=Application Categories=Development;Utils; MimeType=application/x-executable StartupNotify=true X-AppVersion=0.4.0 ./Listaller-0.5.8/contrib/visual-ldd/resources.qrc0000664000175000017500000000016212176743563022266 0ustar matthiasmatthias visual-ldd.png ./Listaller-0.5.8/contrib/visual-ldd/treeitem.h0000664000175000017500000000250612176743563021540 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #ifndef TREEITEM_H #define TREEITEM_H #include #include #include //! [0] class TreeItem { public: TreeItem(const QString name, const QString dir, TreeItem *parent = 0); ~TreeItem(); void appendChild(TreeItem *child); TreeItem *child(int row); int childCount() const; int columnCount() const; QVariant data(int column) const; int row() const; TreeItem *parent(); void setParent(TreeItem *item); QString getData_Dir() const; QString getData_SOName() const; QColor getColor() const; private: QList childItems; QString d_soname; QString d_dir; QColor entryColor; TreeItem *parentItem; }; #endif ./Listaller-0.5.8/contrib/visual-ldd/visual-ldd.png0000664000175000017500000000565212176743563022330 0ustar matthiasmatthiasPNG  IHDR00WbKGD _IDATxՙ}l]g}?y7;qB$]a*QY?J  PJijҀI hZuZQkM2X6mMĎv6y='~|Mp|{5BlgN [Z}`|wvKV XPj'Zֱ55lҴ:Ul]ckjɏ{C\3  j [ma;42΍@Hqʃ#T@m[MA 0ev?7P\h ]!q ZVw#43VPڡc%]z!o+$ >fZD0L'l bv׻< --(BJnFIR! #zگ>5rr(.a OR6LMy)]Vjf{Zz̷{3}:omfgͬJz X;7FyD$dAʋ4'RPJ3sI^'5tt(Ov^}98¯nR\WLsu ]|X{?O3PسoO(znjR-+~vpQTPJ|p/dov 3uB@j"!BMZk\yBF!бDӧ>P=tyng@!;;vwҥ;Ϟ=.MܪʄTZ`hppϬw4>~毌1FgOu=]@ P[b>S$LNNRX.B ׈9"6 m;" $r"k}0zcw|ۺo馿+FG+x2dBHˬ`ii˜s]߬eF>tU(sN$I;n[r坑H*,_Z[[]wUX,ԅd %aTBO3}CCȦM %HJ[ߺ~ 7|T>FjL֐Z-azZJBKKɖJE˜I0P.:(Վ-H.e$bc>v=e_X\,H)!dZBR1M*Ȇ"!0##׎U>R4;_v<堤15)ZVXw4v&"*NEkE{1…Z7kSBJ)1&/pv!3@?apsfqgSsIQ},XR/:xa -qbKHBaBP)b:a84g-BI:ܔI$j`"BZ2ű*һ!c8Wrp.ιU-pkC"5,j_R}[ER0Q`ig-$I5! ,ikT=ضeW_d9<]mHNVᰜuCD1TĪU5$I<( U( $QKA*b-Qq u)n|+,U"B)d!f~h!*fJH]'SQ 6QՄ`|4)SCp@ )BM(I V>ʥ9SMsDurӇ>|] f1@9%+ OP !R)5D.hn@Z:q g9p73:~_ f ZH])j"#n-6ײg K Z;IQ;yybK(.¹yϷlO"eES"ɜGbI!DHTRIqa0D*(:=OprS.m3ytKx衞M_y MBei*E yHˋ ZgCjnM* G>!N\k n݇񀋦_4Yc^7fܳ-1Ă,"oׄ稾CT*,G_r?v&r]73$|B?PJ]H7Y%Nis9iz\VFaΡ%;kHӴ!57e|-XI4_Z 24 ?Gsy'sͣDDybK4M{4Y6sqot7Th@Ϻb%?B ~IENDB`./Listaller-0.5.8/contrib/visual-ldd/treemodel.h0000664000175000017500000000276412176743563021710 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #ifndef TREEMODEL_H #define TREEMODEL_H #include #include #include class TreeItem; class TreeModel : public QAbstractItemModel { Q_OBJECT public: TreeModel(QObject *parent = 0); ~TreeModel(); QVariant data(const QModelIndex &index, int role) const; Qt::ItemFlags flags(const QModelIndex &index) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex parent(const QModelIndex &index) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const; TreeItem *getRoot() const; private: TreeItem *rootItem; }; #endif ./Listaller-0.5.8/contrib/visual-ldd/mainwindow.h0000664000175000017500000000274412176743563022102 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Filippos Papadopoulos * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include #include #include #include #include "read_elf.h" #include "treeitem.h" using std::vector; using std::string; using std::cout; using std::cerr; using std::endl; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(const QString fname, QWidget *parent = 0); ~MainWindow(); QString findFullPath(QString soname); void loadFile(QString filename); public slots: void fileOpen(); void showAboutBox(); private: Ui::MainWindow *ui; vector vectorLdConfig; QString lastFileName; QLabel *statusLabel; void findLibs(const QString& dirname); void resolveItem(TreeItem* itemChild); }; #endif // MAINWINDOW_H ./Listaller-0.5.8/contrib/visual-ldd/treeitem.cpp0000664000175000017500000000406212176743563022072 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #include "treeitem.h" #include TreeItem::TreeItem(const QString name, const QString dir, TreeItem *parent) { parentItem = parent; d_soname = name; d_dir = dir; //Paint all items light blue... entryColor = QColor(152,245,255); //..except they're essential system libs if (name.indexOf(QRegExp("libc.*")) > -1) entryColor = QColor(209,238,238); if (name.indexOf(QRegExp("ld-linux*")) > -1) entryColor = QColor(188,210,238); } TreeItem::~TreeItem() { qDeleteAll(childItems); } void TreeItem::appendChild(TreeItem *item) { item->setParent(this); childItems.append(item); } TreeItem *TreeItem::child(int row) { return childItems.value(row); } void TreeItem::setParent(TreeItem *item) { parentItem = item; } int TreeItem::childCount() const { return childItems.count(); } int TreeItem::columnCount() const { return 2; } QColor TreeItem::getColor() const { return entryColor; } QVariant TreeItem::data(int column) const { switch (column) { case 0: return d_soname; case 1: return d_dir; default: return ""; } } QString TreeItem::getData_Dir() const { return d_dir; } QString TreeItem::getData_SOName() const { return d_soname; } TreeItem *TreeItem::parent() { return parentItem; } int TreeItem::row() const { if (parentItem) return parentItem->childItems.indexOf(const_cast(this)); return 0; } ./Listaller-0.5.8/contrib/visual-ldd/mainwindow.cpp0000664000175000017500000002166112176743563022434 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Filippos Papadopoulos * Matthias Klumpp * * This unit 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. * * This unit 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 v3 * along with this library. If not, see . */ #include "mainwindow.h" #include "ui_mainwindow.h" #include #include "treemodel.h" #include "treeitem.h" //this is declared and specified in read_elf.cpp. It checks if the given filename is a valid ELF extern int processFile(char *, QWidget*); extern vector displayError; //Needs to be global! vector neededLibVector; vector rpathVector; MainWindow::MainWindow(const QString fname, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { char* needed = (char*) calloc(512, 1); char* tmp = (char*) calloc(512, 1); char* buf = (char*) calloc(512, 1); neededLibVector.reserve(10); vectorLdConfig.reserve(1000); // We add to the vectorLdConfig the output of the '/sbin/ldconfig -p' command // That means we only add the ldconfig cache. Later on we add libraries that we may find in the current path. FILE* stream_ldconf = popen("/sbin/ldconfig -p", "r"); if(stream_ldconf==NULL) perror("popen_ldconf"); while(!feof(stream_ldconf)) { memset(tmp, 0, 512); fgets(tmp, 512, stream_ldconf); if(!feof(stream_ldconf)) { /* libqt-mt.so.3 (libc6) => /usr/lib/libqt-mt.so.3 */ /* libc.so.6 (libc6, OS ABI: Linux 2.4.0) => /lib/libc.so.6 */ // cout << "QString(tmp)==" << QString(tmp) << endl; vectorLdConfig.push_back(QString(tmp)); } } pclose(stream_ldconf); free(needed); free(tmp); free(buf); ui->setupUi(this); statusLabel = new QLabel("No file loaded", 0); statusBar()->addWidget(statusLabel); //If we have a binary parameter, load the file if it exists if(fname != 0) { QFile f(fname); if (f.exists()) loadFile(fname); } } MainWindow::~MainWindow() { delete ui; } /* Searches for *.so* in the current path (dirname) * and adds them to the vectorLdConfig */ void MainWindow::findLibs(const QString& dirname) { QDir dir(dirname, "*.so*"); dir.setFilter(QDir::Files); QFileInfoList fileinfolist = dir.entryInfoList(); QListIterator it(fileinfolist); QString string; while (it.hasNext()) { QFileInfo fi = it.next(); if(fi.fileName() == "." || fi.fileName() == "..") { continue; } if(fi.isDir() && fi.isReadable()) ; else { string = QString(fi.fileName()); vectorLdConfig.push_back((string.append(" => ")).append(fi.absoluteFilePath())); } } return; } QString MainWindow::findFullPath(QString soname) { QString txt; int index = 0; /* for each library name we must find the full path in vector ldconfig The 'soname' looks like libcrypto.so.0.9.6 */ for(unsigned int i=0; i < vectorLdConfig.size(); i++) { if(vectorLdConfig[i].indexOf(soname)!=-1) { index = vectorLdConfig[i].indexOf("/"); if(index != -1) { //finally we remove /n return vectorLdConfig[i].mid(index).remove(QChar('\n')); } else cerr << "INDEX = -1\n"; } } /* if the execution reaches here it means that the library with 'soname' as its name, was not found inside ld's cache. Thus we look for RPATH existance */ //if rpath is found then rpathVector will have at least one item //inside RPATH, directory names are separated with an ':' (Solaris only???) if(rpathVector.size() > 0) { return rpathVector[0] + "/" + soname; } // Have a look in the current directory for the library txt = lastFileName.left(lastFileName.lastIndexOf("/")) + "/" + soname; if (QFile::exists(txt)) { return txt; } // Maybe it exists with a slightly different name QDir dir(lastFileName.left(lastFileName.lastIndexOf("/"))); QStringList entries = dir.entryList(QDir::Files, QDir::Name); entries = entries.filter(QRegExp(soname + "*")); for ( QStringList::Iterator it = entries.begin(); it != entries.end(); ++it ) { return lastFileName.left(lastFileName.lastIndexOf("/")) + "/" + (*it); } cout << "Library " << qPrintable(soname) << " could not be found." << endl; // we could not find the required library... return QString::null; } void MainWindow::resolveItem(TreeItem* itemChild) { if(itemChild == NULL) { return; } int res = 1; QString fullPath = findFullPath(itemChild->getData_Dir()+"/"+itemChild->getData_SOName()); char* tmp; if (!fullPath.isEmpty()) { tmp = (char*) malloc(fullPath.length() + 1); strcpy(tmp, qPrintable(fullPath)); } else { tmp = (char*) malloc(1); tmp[0] = '\0'; } neededLibVector.clear(); res = processFile(tmp, this); if(res != 1 || neededLibVector.size() != 0) //the name was not found for(unsigned int i=0; i < neededLibVector.size(); i++) { QString dirname; QString soname(neededLibVector[i].toAscii()); fullPath = findFullPath (soname); dirname = fullPath.left(fullPath.lastIndexOf("/")); TreeItem *item = new TreeItem(soname, dirname); itemChild->appendChild(item); resolveItem(item); } free(tmp); } void MainWindow::loadFile(QString filename) { if(filename.isEmpty()) return; char *tmp = (char *) calloc(512, 1); int ret = filename.lastIndexOf("/"); QString currentPath = filename.left(ret); // Strip off the filename, so we get just a directory if(ret == -1) currentPath = "/"; lastFileName = filename; statusBar()->clearMessage(); neededLibVector.clear(); //we add items to the neededLibVector inside the process_file function int res = processFile(strcpy(tmp, filename.toAscii()), this); // we check if the given filename is a valid ELF if(res == 0) statusLabel->setText("File " + filename + " loaded"); else statusLabel->setText("File is no valid ELF!"); findLibs(currentPath); TreeModel *model = new TreeModel(this); ui->treeView->setModel(model); QHeaderView *header = new QHeaderView(Qt::Horizontal); header->setMovable(false); header->setResizeMode(QHeaderView::ResizeToContents); ui->treeView->setHeader(header); header->setVisible(true); //for each library on the 'first level' for(unsigned int i=0; i < neededLibVector.size(); i++) { QString fullPath, dirname; QString soname(neededLibVector[i].toAscii()); fullPath = findFullPath (soname); dirname = fullPath.left(fullPath.lastIndexOf("/")); //string soname contains only the name of the lib. dirname contains the lib's path model->getRoot()->appendChild(new TreeItem(soname, dirname)); } //the first root TreeItem *root = model->getRoot(); TreeItem *myChild = root; for (int i = 0; i < root->childCount(); i++) { myChild = root->child(i); //the resolver function called for each root resolveItem(myChild); } free(tmp); ui->treeView->expandToDepth(2); return; } void MainWindow::fileOpen() { QString startingPath = ""; if (!lastFileName.isEmpty()) { // Strip off the filename, so we get just a directory startingPath = lastFileName.left(lastFileName.lastIndexOf("/")); } QString filename = QFileDialog::getOpenFileName(this, tr("Select file to analyze..."), startingPath, QString::null); loadFile(filename); return; } void MainWindow::showAboutBox() { QMessageBox::about(this, "About visual-ldd", "Visual Dependency Walker is a tool that will show you a graphical tree of\n" "all the shared libraries that a given ELF binary links to. It can be used\n" "to figure out why your program is linked against a certain library, and to check\n" "for version conflicts.\n\n" "Version: 1.4\n\n" "Authors:\n" " Matthias Klumpp\n" " Filippos Papadopoulos\n" " David Sansome\n\n" "(c) 2010 Listaller Team\n" "(c) 2003-2005 by The Autopackage Crew"); return; } ./Listaller-0.5.8/contrib/visual-ldd/main.cpp0000664000175000017500000000172412176743563021202 0ustar matthiasmatthias/* * Copyright (C) 2010 Matthias Klumpp * * Authors: * Filippos Papadopoulos * Matthias Klumpp * * This application 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. * * This application 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 v3 * along with this library. If not, see . */ #include #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); if(argc > 2) { std::cerr << "Usage: " << argv[0] << " [ELFfilename]\n"; exit(-1); } MainWindow w(argv[1]); w.show(); return a.exec(); } ./Listaller-0.5.8/contrib/binreloc/0000775000175000017500000000000012176743563017277 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/normal.c0000664000175000017500000003141612176743563020740 0ustar matthiasmatthias#ifndef BINRELOC_RUNNING_DOXYGEN #undef NULL #define NULL ((char *) 0) /* typecasted as char* for C++ type safeness */ #endif static char *exe = (char *) NULL; /** Initialize the BinReloc library (for applications). * * This function must be called before using any other BinReloc functions. * It attempts to locate the application's canonical filename. * * @note If you want to use BinReloc for a library, then you should call * br_init_lib() instead. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if BinReloc failed to initialize. */ int br_init (BrInitError *error) { exe = _br_find_exe (error); return exe != NULL; } /** Initialize the BinReloc library (for libraries). * * This function must be called before using any other BinReloc functions. * It attempts to locate the calling library's canonical filename. * * @note The BinReloc source code MUST be included in your library, or this * function won't work correctly. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error code will * be stored in this variable. Set to NULL if you want to * ignore this. See #BrInitError for a list of error codes. * * @returns 1 on success, 0 if a filename cannot be found. */ int br_init_lib (BrInitError *error) { exe = _br_find_exe_for_symbol ((const void *) "", error); return exe != NULL; } /** Find the canonical filename of the current application. * * @param default_exe A default filename which will be used as fallback. * @returns A string containing the application's canonical filename, * which must be freed when no longer necessary. If BinReloc is * not initialized, or if br_init() failed, then a copy of * default_exe will be returned. If default_exe is NULL, then * NULL will be returned. */ char * br_find_exe (const char *default_exe) { if (exe == (char *) NULL) { /* BinReloc is not initialized. */ if (default_exe != (const char *) NULL) return strdup (default_exe); else return (char *) NULL; } return strdup (exe); } /** Locate the directory in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(exename) * \endcode * * @param default_dir A default directory which will used as fallback. * @return A string containing the directory, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_dir * will be returned. If default_dir is NULL, then NULL will be * returned. */ char * br_find_exe_dir (const char *default_dir) { if (exe == NULL) { /* BinReloc not initialized. */ if (default_dir != NULL) return strdup (default_dir); else return NULL; } return br_dirname (exe); } /** Locate the prefix in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(dirname(exename)) * \endcode * * @param default_prefix A default prefix which will used as fallback. * @return A string containing the prefix, which must be freed when no * longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_prefix * will be returned. If default_prefix is NULL, then NULL will be returned. */ char * br_find_prefix (const char *default_prefix) { char *dir1, *dir2; if (exe == (char *) NULL) { /* BinReloc not initialized. */ if (default_prefix != (const char *) NULL) return strdup (default_prefix); else return (char *) NULL; } dir1 = br_dirname (exe); dir2 = br_dirname (dir1); free (dir1); return dir2; } /** Locate the application's binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/bin" * \endcode * * @param default_bin_dir A default path which will used as fallback. * @return A string containing the bin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if * the initialization function failed, then a copy of default_bin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_bin_dir (const char *default_bin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_bin_dir != (const char *) NULL) return strdup (default_bin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "bin"); free (prefix); return dir; } /** Locate the application's superuser binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/sbin" * \endcode * * @param default_sbin_dir A default path which will used as fallback. * @return A string containing the sbin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_sbin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ char * br_find_sbin_dir (const char *default_sbin_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_sbin_dir != (const char *) NULL) return strdup (default_sbin_dir); else return (char *) NULL; } dir = br_build_path (prefix, "sbin"); free (prefix); return dir; } /** Locate the application's data folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share" * \endcode * * @param default_data_dir A default path which will used as fallback. * @return A string containing the data folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_data_dir * will be returned. If default_data_dir is NULL, then NULL will be * returned. */ char * br_find_data_dir (const char *default_data_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_data_dir != (const char *) NULL) return strdup (default_data_dir); else return (char *) NULL; } dir = br_build_path (prefix, "share"); free (prefix); return dir; } /** Locate the application's localization folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share/locale" * \endcode * * @param default_locale_dir A default path which will used as fallback. * @return A string containing the localization folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_locale_dir will be returned. * If default_locale_dir is NULL, then NULL will be returned. */ char * br_find_locale_dir (const char *default_locale_dir) { char *data_dir, *dir; data_dir = br_find_data_dir ((const char *) NULL); if (data_dir == (char *) NULL) { /* BinReloc not initialized. */ if (default_locale_dir != (const char *) NULL) return strdup (default_locale_dir); else return (char *) NULL; } dir = br_build_path (data_dir, "locale"); free (data_dir); return dir; } /** Locate the application's library folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/lib" * \endcode * * @param default_lib_dir A default path which will used as fallback. * @return A string containing the library folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_lib_dir will be returned. * If default_lib_dir is NULL, then NULL will be returned. */ char * br_find_lib_dir (const char *default_lib_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_lib_dir != (const char *) NULL) return strdup (default_lib_dir); else return (char *) NULL; } dir = br_build_path (prefix, "lib"); free (prefix); return dir; } /** Locate the application's libexec folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/libexec" * \endcode * * @param default_libexec_dir A default path which will used as fallback. * @return A string containing the libexec folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_libexec_dir will be returned. * If default_libexec_dir is NULL, then NULL will be returned. */ char * br_find_libexec_dir (const char *default_libexec_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_libexec_dir != (const char *) NULL) return strdup (default_libexec_dir); else return (char *) NULL; } dir = br_build_path (prefix, "libexec"); free (prefix); return dir; } /** Locate the application's configuration files folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/etc" * \endcode * * @param default_etc_dir A default path which will used as fallback. * @return A string containing the etc folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_etc_dir will be returned. * If default_etc_dir is NULL, then NULL will be returned. */ char * br_find_etc_dir (const char *default_etc_dir) { char *prefix, *dir; prefix = br_find_prefix ((const char *) NULL); if (prefix == (char *) NULL) { /* BinReloc not initialized. */ if (default_etc_dir != (const char *) NULL) return strdup (default_etc_dir); else return (char *) NULL; } dir = br_build_path (prefix, "etc"); free (prefix); return dir; } /*********************** * Utility functions ***********************/ /** Concatenate str1 and str2 to a newly allocated string. * * @param str1 A string. * @param str2 Another string. * @returns A newly-allocated string. This string should be freed when no longer needed. */ char * br_strcat (const char *str1, const char *str2) { char *result; size_t len1, len2; if (str1 == NULL) str1 = ""; if (str2 == NULL) str2 = ""; len1 = strlen (str1); len2 = strlen (str2); result = (char *) malloc (len1 + len2 + 1); /* Handle OOM (Tracker issue #35) */ if (result) { memcpy (result, str1, len1); memcpy (result + len1, str2, len2); result[len1 + len2] = '\0'; } return result; } char * br_build_path (const char *dir, const char *file) { char *dir2, *result; size_t len; int must_free = 0; len = strlen (dir); if (len > 0 && dir[len - 1] != '/') { dir2 = br_strcat (dir, "/"); must_free = 1; } else dir2 = (char *) dir; result = br_strcat (dir2, file); if (must_free) free (dir2); return result; } /* Emulates glibc's strndup() */ static char * br_strndup (const char *str, size_t size) { char *result = (char *) NULL; size_t len; if (str == (const char *) NULL) return (char *) NULL; len = strlen (str); if (len == 0) return strdup (""); if (size > len) size = len; result = (char *) malloc (len + 1); /* Handle OOM (Tracker issue #35) */ if (result) { memcpy (result, str, size); result[size] = '\0'; } return result; } /** Extracts the directory component of a path. * * Similar to g_dirname() or the dirname commandline application. * * Example: * \code * br_dirname ("/usr/local/foobar"); --> Returns: "/usr/local" * \endcode * * @param path A path. * @returns A directory name. This string should be freed when no longer needed. */ char * br_dirname (const char *path) { char *end, *result; if (path == (const char *) NULL) return (char *) NULL; end = strrchr (path, '/'); if (end == (const char *) NULL) return strdup ("."); while (end > path && *end == '/') end--; result = br_strndup (path, end - path + 1); if (result[0] == 0) { free (result); return strdup ("/"); } else return result; } ./Listaller-0.5.8/contrib/binreloc/tests/0000775000175000017500000000000012176743563020441 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/tests/Makefile0000775000175000017500000000141512176743563022105 0ustar matthiasmatthiasCC=gcc CFLAGS=-Wall -g CFLAGS+=-DENABLE_BINRELOC .PHONY: all all: normal-test glib-test normal-test: normal-test.c ../generate.pl ../*.c libshared.so ../generate.pl normal normal-binreloc.c normal-binreloc.h $(CC) $(CFLAGS) normal-test.c normal-binreloc.c -o normal-test -L. -Wl,-rpath,$${ORIGIN} -lshared glib-test: glib-test.c ../generate.pl ../*.c libshared.so ../generate.pl glib glib-binreloc.c glib-binreloc.h $(CC) $(CFLAGS) glib-test.c glib-binreloc.c -o glib-test `pkg-config --cflags --libs glib-2.0` -L. -Wl,-rpath,$${ORIGIN} -lshared libshared.so: lib.c ../generate.pl ../*.c ../generate.pl normal lib-binreloc.c lib-binreloc.h $(CC) -fPIC $(CFLAGS) lib.c lib-binreloc.c -shared -o libshared.so clean: rm -f *-binreloc.* normal-test glib-test libshared.so ./Listaller-0.5.8/contrib/binreloc/tests/glib-test.c0000664000175000017500000000336012176743563022501 0ustar matthiasmatthias#include #include #include "glib-binreloc.h" #include "lib.h" int main () { GError *error = NULL; gchar *exe, *exedir, *prefix, *bin, *sbin, *data, *locale, *lib, *libexec, *etc, *shared; if (!gbr_init (&error)) { g_print ("BinReloc failed to initialize:\n"); g_print ("Domain: %d (%s)\n", (int) error->domain, g_quark_to_string (error->domain)); g_print ("Code: %d\n", error->code); g_print ("Message: %s\n", error->message); g_error_free (error); g_print ("----------------\n"); } exe = gbr_find_exe ("default exe name"); exedir = gbr_find_exe_dir ("default exe dir name"); prefix = gbr_find_prefix ("default prefix dir"); bin = gbr_find_bin_dir ("default bin dir"); sbin = gbr_find_sbin_dir ("default sbin dir"); data = gbr_find_data_dir ("default data dir"); locale = gbr_find_locale_dir ("default locale dir"); lib = gbr_find_lib_dir ("default lib dir"); libexec = gbr_find_libexec_dir ("default libexec dir"); etc = gbr_find_etc_dir ("default etc dir"); shared = locate_libshared (); g_print ("Executable filename : %s\n", exe); g_print ("Executable directory: %s\n", exedir); g_print ("Prefix : %s\n", prefix); g_print ("Bin dir : %s\n", bin); g_print ("Sbin dir : %s\n", sbin); g_print ("Data dir : %s\n", data); g_print ("Locale dir : %s\n", locale); g_print ("Library dir: %s\n", lib); g_print ("Libexec dir: %s\n", libexec); g_print ("Etc dir : %s\n", etc); g_print ("libshared : %s\n", shared); g_free (exe); g_free (exedir); g_free (prefix); g_free (bin); g_free (sbin); g_free (data); g_free (locale); g_free (lib); g_free (libexec); g_free (etc); if (shared != NULL) free (shared); return 0; } ./Listaller-0.5.8/contrib/binreloc/tests/normal-test.c0000664000175000017500000000303512176743563023053 0ustar matthiasmatthias#include #include #include "normal-binreloc.h" #include "lib.h" #define my_free(x) if (x != (char *) 0) free (x) int main () { BrInitError error; char *exe, *exedir, *prefix, *bin, *sbin, *data, *locale, *lib, *libexec, *etc, *shared; if (!br_init (&error)) printf ("*** BinReloc failed to initialize. Error: %d\n", error); exe = br_find_exe ("default exe name"); exedir = br_find_exe_dir ("default exe dir name"); prefix = br_find_prefix ("default prefix"); bin = br_find_bin_dir ("default bin dir"); sbin = br_find_sbin_dir ("default sbin dir"); data = br_find_data_dir ("default data dir"); locale = br_find_locale_dir ("default locale dir"); lib = br_find_lib_dir ("default lib dir"); libexec = br_find_libexec_dir ("default libexec dir"); etc = br_find_etc_dir ("default etc dir"); shared = locate_libshared (); printf ("Executable filename : %s\n", exe); printf ("Executable directory: %s\n", exedir); printf ("Prefix : %s\n", prefix); printf ("Bin dir : %s\n", bin); printf ("Sbin dir : %s\n", sbin); printf ("Data dir : %s\n", data); printf ("Locale dir : %s\n", locale); printf ("Library dir: %s\n", lib); printf ("Libexec dir: %s\n", libexec); printf ("Etc dir : %s\n", etc); printf ("libshared : %s\n", shared); my_free (exe); my_free (exedir); my_free (prefix); my_free (bin); my_free (sbin); my_free (data); my_free (locale); my_free (lib); my_free (libexec); my_free (etc); my_free (shared); return 0; } ./Listaller-0.5.8/contrib/binreloc/tests/lib.c0000664000175000017500000000017612176743563021357 0ustar matthiasmatthias#include "lib-binreloc.h" char * locate_libshared () { br_init_lib ((BrInitError *) 0); return br_find_exe ((char *) 0); } ./Listaller-0.5.8/contrib/binreloc/tests/lib.h0000664000175000017500000000003312176743563021354 0ustar matthiasmatthiaschar *locate_libshared (); ./Listaller-0.5.8/contrib/binreloc/glib.c0000664000175000017500000002672012176743563020367 0ustar matthiasmatthiasstatic gchar *exe = NULL; static void set_gerror (GError **error, GbrInitError errcode); /** Initialize the BinReloc library (for applications). * * This function must be called before using any other BinReloc functions. * It attempts to locate the application's canonical filename. * * @note If you want to use BinReloc for a library, then you should call * gbr_init_lib() instead. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @param error If BinReloc failed to initialize, then the error report will * be stored in this variable. Set to NULL if you don't want an * error report. See the #GbrInitError for a list of error * codes. * * @returns TRUE on success, FALSE if BinReloc failed to initialize. */ gboolean gbr_init (GError **error) { GbrInitError errcode = 0; /* Shut up compiler warning about uninitialized variable. */ errcode = GBR_INIT_ERROR_NOMEM; /* Locate the application's filename. */ exe = _br_find_exe (&errcode); if (exe != NULL) /* Success! */ return TRUE; else { /* Failed :-( */ set_gerror (error, errcode); return FALSE; } } /** Initialize the BinReloc library (for libraries). * * This function must be called before using any other BinReloc functions. * It attempts to locate the calling library's canonical filename. * * @note The BinReloc source code MUST be included in your library, or this * function won't work correctly. * @note Initialization failure is not fatal. BinReloc functions will just * fallback to the supplied default path. * * @returns TRUE on success, FALSE if a filename cannot be found. */ gboolean gbr_init_lib (GError **error) { GbrInitError errcode = 0; /* Shut up compiler warning about uninitialized variable. */ errcode = GBR_INIT_ERROR_NOMEM; exe = _br_find_exe_for_symbol ((const void *) "", &errcode); if (exe != NULL) /* Success! */ return TRUE; else { /* Failed :-( */ set_gerror (error, errcode); return exe != NULL; } } static void set_gerror (GError **error, GbrInitError errcode) { gchar *error_message; if (error == NULL) return; switch (errcode) { case GBR_INIT_ERROR_NOMEM: error_message = "Cannot allocate memory."; break; case GBR_INIT_ERROR_OPEN_MAPS: error_message = "Unable to open /proc/self/maps for reading."; break; case GBR_INIT_ERROR_READ_MAPS: error_message = "Unable to read from /proc/self/maps."; break; case GBR_INIT_ERROR_INVALID_MAPS: error_message = "The file format of /proc/self/maps is invalid."; break; case GBR_INIT_ERROR_DISABLED: error_message = "Binary relocation support is disabled."; break; default: error_message = "Unknown error."; break; }; g_set_error (error, g_quark_from_static_string ("GBinReloc"), errcode, "%s", error_message); } /** Find the canonical filename of the current application. * * @param default_exe A default filename which will be used as fallback. * @returns A string containing the application's canonical filename, * which must be freed when no longer necessary. If BinReloc is * not initialized, or if the initialization function failed, * then a copy of default_exe will be returned. If default_exe * is NULL, then NULL will be returned. */ gchar * gbr_find_exe (const gchar *default_exe) { if (exe == NULL) { /* BinReloc is not initialized. */ if (default_exe != NULL) return g_strdup (default_exe); else return NULL; } return g_strdup (exe); } /** Locate the directory in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(exename) * \endcode * * @param default_dir A default directory which will used as fallback. * @return A string containing the directory, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_dir * will be returned. If default_dir is NULL, then NULL will be * returned. */ gchar * gbr_find_exe_dir (const gchar *default_dir) { if (exe == NULL) { /* BinReloc not initialized. */ if (default_dir != NULL) return g_strdup (default_dir); else return NULL; } return g_path_get_dirname (exe); } /** Locate the prefix in which the current application is installed. * * The prefix is generated by the following pseudo-code evaluation: * \code * dirname(dirname(exename)) * \endcode * * @param default_prefix A default prefix which will used as fallback. * @return A string containing the prefix, which must be freed when no * longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_prefix * will be returned. If default_prefix is NULL, then NULL will be * returned. */ gchar * gbr_find_prefix (const gchar *default_prefix) { gchar *dir1, *dir2; if (exe == NULL) { /* BinReloc not initialized. */ if (default_prefix != NULL) return g_strdup (default_prefix); else return NULL; } dir1 = g_path_get_dirname (exe); dir2 = g_path_get_dirname (dir1); g_free (dir1); return dir2; } /** Locate the application's binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/bin" * \endcode * * @param default_bin_dir A default path which will used as fallback. * @return A string containing the bin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_bin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ gchar * gbr_find_bin_dir (const gchar *default_bin_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_bin_dir != NULL) return g_strdup (default_bin_dir); else return NULL; } dir = g_build_filename (prefix, "bin", NULL); g_free (prefix); return dir; } /** Locate the application's superuser binary folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/sbin" * \endcode * * @param default_sbin_dir A default path which will used as fallback. * @return A string containing the sbin folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_sbin_dir will * be returned. If default_bin_dir is NULL, then NULL will be returned. */ gchar * gbr_find_sbin_dir (const gchar *default_sbin_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_sbin_dir != NULL) return g_strdup (default_sbin_dir); else return NULL; } dir = g_build_filename (prefix, "sbin", NULL); g_free (prefix); return dir; } /** Locate the application's data folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share" * \endcode * * @param default_data_dir A default path which will used as fallback. * @return A string containing the data folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_data_dir * will be returned. If default_data_dir is NULL, then NULL will be * returned. */ gchar * gbr_find_data_dir (const gchar *default_data_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_data_dir != NULL) return g_strdup (default_data_dir); else return NULL; } dir = g_build_filename (prefix, "share", NULL); g_free (prefix); return dir; } /** Locate the application's localization folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/share/locale" * \endcode * * @param default_locale_dir A default path which will used as fallback. * @return A string containing the localization folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_locale_dir will be returned. * If default_locale_dir is NULL, then NULL will be returned. */ gchar * gbr_find_locale_dir (const gchar *default_locale_dir) { gchar *data_dir, *dir; data_dir = gbr_find_data_dir (NULL); if (data_dir == NULL) { /* BinReloc not initialized. */ if (default_locale_dir != NULL) return g_strdup (default_locale_dir); else return NULL; } dir = g_build_filename (data_dir, "locale", NULL); g_free (data_dir); return dir; } /** Locate the application's library folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/lib" * \endcode * * @param default_lib_dir A default path which will used as fallback. * @return A string containing the library folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the * initialization function failed, then a copy of default_lib_dir will be returned. * If default_lib_dir is NULL, then NULL will be returned. */ gchar * gbr_find_lib_dir (const gchar *default_lib_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_lib_dir != NULL) return g_strdup (default_lib_dir); else return NULL; } dir = g_build_filename (prefix, "lib", NULL); g_free (prefix); return dir; } /** Locate the application's libexec folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/libexec" * \endcode * * @param default_libexec_dir A default path which will used as fallback. * @return A string containing the libexec folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_libexec_dir will be returned. * If default_libexec_dir is NULL, then NULL will be returned. */ gchar * gbr_find_libexec_dir (const gchar *default_libexec_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_libexec_dir != NULL) return g_strdup (default_libexec_dir); else return NULL; } dir = g_build_filename (prefix, "libexec", NULL); g_free (prefix); return dir; } /** Locate the application's configuration files folder. * * The path is generated by the following pseudo-code evaluation: * \code * prefix + "/etc" * \endcode * * @param default_etc_dir A default path which will used as fallback. * @return A string containing the etc folder's path, which must be freed when * no longer necessary. If BinReloc is not initialized, or if the initialization * function failed, then a copy of default_etc_dir will be returned. * If default_etc_dir is NULL, then NULL will be returned. */ gchar * gbr_find_etc_dir (const gchar *default_etc_dir) { gchar *prefix, *dir; prefix = gbr_find_prefix (NULL); if (prefix == NULL) { /* BinReloc not initialized. */ if (default_etc_dir != NULL) return g_strdup (default_etc_dir); else return NULL; } dir = g_build_filename (prefix, "etc", NULL); g_free (prefix); return dir; } ./Listaller-0.5.8/contrib/binreloc/Makefile0000775000175000017500000000176312176743563020751 0ustar matthiasmatthiasPACKAGE=binreloc VERSION=2.0 PREFIX=/usr .PHONY: all install install-man dist distdir clean all: @echo "There's no need to compile or install anything. Please read README." @echo "If you wish to install the man pages, type 'make install-man'" install: all install-man: make -C doc cp doc/man/man3/* $(PREFIX)/share/man/man3/ dist: distdir rm -f $(PACKAGE)-$(VERSION).tar.gz tar -cf $(PACKAGE)-$(VERSION).tar $(PACKAGE)-$(VERSION) gzip --best $(PACKAGE)-$(VERSION).tar rm -rf $(PACKAGE)-$(VERSION) distdir: rm -rf $(PACKAGE)-$(VERSION) mkdir $(PACKAGE)-$(VERSION) cp README ChangeLog Makefile \ generate.pl binreloc.m4 \ basic.c glib.c normal.c \ $(PACKAGE)-$(VERSION)/ mkdir $(PACKAGE)-$(VERSION)/doc cp doc/{Makefile,Doxyfile,TUTORIAL,binreloc-intro.txt,glib-binreloc-intro.txt} \ $(PACKAGE)-$(VERSION)/doc/ mkdir $(PACKAGE)-$(VERSION)/tests cp tests/{Makefile,glib-test.c,normal-test.c,lib.c,lib.h} \ $(PACKAGE)-$(VERSION)/tests/ clean: make -C tests clean make -C doc clean ./Listaller-0.5.8/contrib/binreloc/basic.c0000664000175000017500000002110012176743563020516 0ustar matthiasmatthias/* BinReloc - a library for creating relocatable executables * Written by: Hongli Lai * * This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ /* This file contains the basic BinReloc code. It is used to * generate more appropriate BinReloc source code, one which fits * your project's coding style and preffered API. Do not use this * file; run generate.pl instead. */ /*** INCLUDE BEGIN */ #ifdef ENABLE_BINRELOC #include #include #include #endif /* ENABLE_BINRELOC */ #include #include #include #include #if defined(__APPLE__) && defined(__MACH__) #include #include #endif /*** INCLUDE END */ /*** ERROR BEGIN */ /** These error codes can be returned by br_init(), br_init_lib(), gbr_init() or gbr_init_lib(). */ typedef enum { /** Cannot allocate memory. */ BR_INIT_ERROR_NOMEM, /** Unable to open /proc/self/maps; see errno for details. */ BR_INIT_ERROR_OPEN_MAPS, /** Unable to read from /proc/self/maps; see errno for details. */ BR_INIT_ERROR_READ_MAPS, /** The file format of /proc/self/maps is invalid; kernel bug? */ BR_INIT_ERROR_INVALID_MAPS, /** BinReloc is disabled (the ENABLE_BINRELOC macro is not defined). */ BR_INIT_ERROR_DISABLED } BrInitError; /*** ERROR END */ /*** FUNCTION BEGIN */ /** @internal * Find the canonical filename of the executable. Returns the filename * (which must be freed) or NULL on error. If the parameter 'error' is * not NULL, the error code will be stored there, if an error occured. */ static char * _br_find_exe (BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return NULL; #elif defined(sun) || defined(__sun) char *path; path = getexecname(); return strdup(path); #elif defined(__APPLE__) && defined(__MACH__) char path[MAXPATHLEN+1]; uint32_t path_len = MAXPATHLEN; // SPI first appeared in Mac OS X 10.2 _NSGetExecutablePath(path, &path_len); return strdup(path); #else char *path, *path2, *line, *result; size_t buf_size; ssize_t size; struct stat stat_buf; FILE *f; /* Read from /proc/self/exe (symlink) */ if (sizeof (path) > SSIZE_MAX) buf_size = SSIZE_MAX - 1; else buf_size = PATH_MAX - 1; path = (char *) malloc (buf_size); if (path == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } path2 = (char *) malloc (buf_size); if (path2 == NULL) { /* Cannot allocate memory. */ if (error) *error = BR_INIT_ERROR_NOMEM; free (path); return NULL; } #ifdef __FreeBSD__ strncpy (path2, "/proc/self/file", buf_size - 1); #else strncpy (path2, "/proc/self/exe", buf_size - 1); #endif while (1) { int i; size = readlink (path2, path, buf_size - 1); if (size == -1) { /* Error. */ free (path2); break; } /* readlink() success. */ path[size] = '\0'; /* Check whether the symlink's target is also a symlink. * We want to get the final target. */ i = stat (path, &stat_buf); if (i == -1) { /* Error. */ free (path2); break; } /* stat() success. */ if (!S_ISLNK (stat_buf.st_mode)) { /* path is not a symlink. Done. */ free (path2); return path; } /* path is a symlink. Continue loop and resolve this. */ strncpy (path, path2, buf_size - 1); } #if defined(__FreeBSD__) { char *name, *start, *end; char *buffer = NULL, *temp; struct stat finfo; name = (char*) getprogname(); start = end = getenv("PATH"); while (*end) { end = strchr (start, ':'); if (!end) end = strchr (start, '\0'); /* Resize `buffer' for path component, '/', name and a '\0' */ temp = realloc (buffer, end - start + 1 + strlen (name) + 1); if (temp) { buffer = temp; strncpy (buffer, start, end - start); *(buffer + (end - start)) = '/'; strcpy (buffer + (end - start) + 1, name); if ((stat(buffer, &finfo)==0) && (!S_ISDIR (finfo.st_mode))) { path = strdup(buffer); free (buffer); return path; } } /* else... ignore the failure; `buffer' is still valid anyway. */ start = end + 1; } /* Path search failed */ free (buffer); if (error) *error = BR_INIT_ERROR_DISABLED; return NULL; } #endif /* readlink() or stat() failed; this can happen when the program is * running in Valgrind 2.2. Read from /proc/self/maps as fallback. */ buf_size = PATH_MAX + 128; line = (char *) realloc (path, buf_size); if (line == NULL) { /* Cannot allocate memory. */ free (path); if (error) *error = BR_INIT_ERROR_NOMEM; return NULL; } f = fopen ("/proc/self/maps", "r"); if (f == NULL) { free (line); if (error) *error = BR_INIT_ERROR_OPEN_MAPS; return NULL; } /* The first entry should be the executable name. */ result = fgets (line, (int) buf_size, f); if (result == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_READ_MAPS; return NULL; } /* Get rid of newline character. */ buf_size = strlen (line); if (buf_size <= 0) { /* Huh? An empty string? */ fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } if (line[buf_size - 1] == 10) line[buf_size - 1] = 0; /* Extract the filename; it is always an absolute path. */ path = strchr (line, '/'); /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || path == NULL) { fclose (f); free (line); if (error) *error = BR_INIT_ERROR_INVALID_MAPS; return NULL; } path = strdup (path); free (line); fclose (f); return path; #endif /* ENABLE_BINRELOC */ } /** @internal * Find the canonical filename of the executable which owns symbol. * Returns a filename which must be freed, or NULL on error. */ static char * _br_find_exe_for_symbol (const void *symbol, BrInitError *error) { #ifndef ENABLE_BINRELOC if (error) *error = BR_INIT_ERROR_DISABLED; return (char *) NULL; #else #define SIZE PATH_MAX + 100 FILE *f; size_t address_string_len; char *address_string, line[SIZE], *found; if (symbol == NULL) return (char *) NULL; f = fopen ("/proc/self/maps", "r"); if (f == NULL) return (char *) NULL; address_string_len = 4; address_string = (char *) malloc (address_string_len); /* Handle OOM (Tracker issue #35) */ if (!address_string) { if (error) *error = BR_INIT_ERROR_NOMEM; return (char *) NULL; } found = (char *) NULL; while (!feof (f)) { char *start_addr, *end_addr, *end_addr_end, *file; void *start_addr_p, *end_addr_p; size_t len; if (fgets (line, SIZE, f) == NULL) break; /* Sanity check. */ if (strstr (line, " r-xp ") == NULL || strchr (line, '/') == NULL) continue; /* Parse line. */ start_addr = line; end_addr = strchr (line, '-'); file = strchr (line, '/'); /* More sanity check. */ if (!(file > end_addr && end_addr != NULL && end_addr[0] == '-')) continue; end_addr[0] = '\0'; end_addr++; end_addr_end = strchr (end_addr, ' '); if (end_addr_end == NULL) continue; end_addr_end[0] = '\0'; len = strlen (file); if (len == 0) continue; if (file[len - 1] == '\n') file[len - 1] = '\0'; /* Get rid of "(deleted)" from the filename. */ len = strlen (file); if (len > 10 && strcmp (file + len - 10, " (deleted)") == 0) file[len - 10] = '\0'; /* I don't know whether this can happen but better safe than sorry. */ len = strlen (start_addr); if (len != strlen (end_addr)) continue; /* Transform the addresses into a string in the form of 0xdeadbeef, * then transform that into a pointer. */ if (address_string_len < len + 3) { address_string_len = len + 3; address_string = (char *) realloc (address_string, address_string_len); /* Handle OOM (Tracker issue #35) */ if (!address_string) { if (error) *error = BR_INIT_ERROR_NOMEM; return (char *) NULL; } } memcpy (address_string, "0x", 2); memcpy (address_string + 2, start_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &start_addr_p); memcpy (address_string, "0x", 2); memcpy (address_string + 2, end_addr, len); address_string[2 + len] = '\0'; sscanf (address_string, "%p", &end_addr_p); if (symbol >= start_addr_p && symbol < end_addr_p) { found = file; break; } } free (address_string); fclose (f); if (found == NULL) return (char *) NULL; else return strdup (found); #endif /* ENABLE_BINRELOC */ } /*** FUNCTION END */ ./Listaller-0.5.8/contrib/binreloc/CMakeLists.txt0000664000175000017500000000135312176743563022041 0ustar matthiasmatthias# CMakeLists for BinReloc set(BINRELOC_FILES basic.c binreloc.m4 fdbr-test.c fdbr.c generate.pl glib.c normal.c README ) set(BINRELOC_JAVA java/BinReloc.java) set(BINRELOC_MONO mono/BinReloc.cs mono/Readme.txt ) set(BINRELOC_PYTHON python/reloc.py python/reloc.txt python/testreloc.py ) set(BINRELOC_DOC "") # TODO: Generate & install documentation install(FILES ${BINRELOC_FILES} DESTINATION share/listaller/binreloc COMPONENT binreloc) install(FILES ${BINRELOC_JAVA} DESTINATION share/listaller/binreloc/java COMPONENT binreloc) install(FILES ${BINRELOC_MONO} DESTINATION share/listaller/binreloc/mono COMPONENT binreloc) install(FILES ${BINRELOC_PYTHON} DESTINATION share/listaller/binreloc/python COMPONENT binreloc) ./Listaller-0.5.8/contrib/binreloc/COPYING.binreloc0000664000175000017500000000074312176743563022132 0ustar matthiasmatthias DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. ./Listaller-0.5.8/contrib/binreloc/README0000664000175000017500000000253112176743563020160 0ustar matthiasmatthiasShort description ----------------- BinReloc is a Linux library for creating relocatable applications and libraries. The problem ----------- The Listaller project (http://listaller.tenstral.net) supports relocation. This means that a package can be installed to any location, like how Win32 installers let you choose a directory. However, most applications are not relocatable. The paths where in they search for data files are usually hardcoded at compile time. On Win32, applications and libraries are easily relocatable because argv[0] is always a full path to the executable. For libraries, the DllMain() DLL initialization function provides a unique DLL handle. One can use that handle to obtain the DLL's full path. On Linux however, no easy mechanisms exist. argv[0] is not a full path, but equals what the user typed at the command prompt. For executables, you can still find your full location by resolving the symlink /proc/self/exe, but that won't work for libraries. The solution ------------ This is why BinReloc is created. BinReloc provides an easy-to-use API that uses all kinds of dynamic linker and kernel magic to find out the full path of your executable or library. BinReloc is meant to be included in your project and adds no dependancies that you don't want. Please go to http://listaller.tenstral.net/docs/binreloc/ for a complete guide. ./Listaller-0.5.8/contrib/binreloc/fdbr-test.c0000664000175000017500000000125012176743563021333 0ustar matthiasmatthias/* This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ #include #include #include #include int main() { int fd = open("/proc/self/fd/200/binreloc/fdbr.c", O_RDONLY); int num = 0; char buf[100]; memset(buf, 0, sizeof(buf)); while ((num = read(fd, buf, sizeof(buf) - 2)) > 0) { buf[num] = '\0'; printf("%s", buf); } } ./Listaller-0.5.8/contrib/binreloc/doc/0000775000175000017500000000000012176743563020044 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/doc/TUTORIAL0000664000175000017500000000020412176743563021226 0ustar matthiasmatthiasThis directory is only for generating the API reference. Please read http://autopackage.org/docs/binreloc/ for a BinReloc tutorial. ./Listaller-0.5.8/contrib/binreloc/doc/glib-binreloc-intro.txt0000664000175000017500000000012712176743563024446 0ustar matthiasmatthias/** @file glib-binreloc * @brief Binary relocation support (with glib-style API). */ ./Listaller-0.5.8/contrib/binreloc/doc/Makefile0000775000175000017500000000057212176743563021513 0ustar matthiasmatthias.PHONY: clean html/*: Makefile ../generate.pl ../basic.c ../normal.c ../glib.c ../generate.pl normal normal.c normal.h ../generate.pl glib glib.c glib.h cat binreloc-intro.txt normal.c normal.h > binreloc cat glib-binreloc-intro.txt glib.c glib.h > glib-binreloc rm -rf normal.c normal.h glib.c glib.h html man doxygen clean: rm -rf html man binreloc glib-binreloc ./Listaller-0.5.8/contrib/binreloc/doc/binreloc-intro.txt0000664000175000017500000000007412176743563023534 0ustar matthiasmatthias/** @file binreloc * @brief Binary relocation support. */ ./Listaller-0.5.8/contrib/binreloc/doc/Doxyfile0000664000175000017500000002112112176743563021547 0ustar matthiasmatthias# Doxyfile 1.4.4 #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- PROJECT_NAME = BinReloc PROJECT_NUMBER = 2.0 OUTPUT_DIRECTORY = . CREATE_SUBDIRS = NO OUTPUT_LANGUAGE = English USE_WINDOWS_ENCODING = NO BRIEF_MEMBER_DESC = YES REPEAT_BRIEF = YES ABBREVIATE_BRIEF = "The $name class" \ "The $name widget" \ "The $name file" \ is \ provides \ specifies \ contains \ represents \ a \ an \ the ALWAYS_DETAILED_SEC = NO INLINE_INHERITED_MEMB = NO FULL_PATH_NAMES = YES STRIP_FROM_PATH = /home/hongli/Projects/autopackage/binreloc/doc/ STRIP_FROM_INC_PATH = SHORT_NAMES = NO JAVADOC_AUTOBRIEF = NO MULTILINE_CPP_IS_BRIEF = NO DETAILS_AT_TOP = YES INHERIT_DOCS = YES DISTRIBUTE_GROUP_DOC = NO SEPARATE_MEMBER_PAGES = NO TAB_SIZE = 8 ALIASES = OPTIMIZE_OUTPUT_FOR_C = YES OPTIMIZE_OUTPUT_JAVA = NO SUBGROUPING = YES #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- EXTRACT_ALL = YES EXTRACT_PRIVATE = NO EXTRACT_STATIC = NO EXTRACT_LOCAL_CLASSES = NO EXTRACT_LOCAL_METHODS = NO HIDE_UNDOC_MEMBERS = NO HIDE_UNDOC_CLASSES = NO HIDE_FRIEND_COMPOUNDS = NO HIDE_IN_BODY_DOCS = NO INTERNAL_DOCS = NO CASE_SENSE_NAMES = YES HIDE_SCOPE_NAMES = NO SHOW_INCLUDE_FILES = YES INLINE_INFO = YES SORT_MEMBER_DOCS = YES SORT_BRIEF_DOCS = NO SORT_BY_SCOPE_NAME = NO GENERATE_TODOLIST = YES GENERATE_TESTLIST = YES GENERATE_BUGLIST = YES GENERATE_DEPRECATEDLIST= YES ENABLED_SECTIONS = MAX_INITIALIZER_LINES = 30 SHOW_USED_FILES = YES SHOW_DIRECTORIES = YES FILE_VERSION_FILTER = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- QUIET = YES WARNINGS = YES WARN_IF_UNDOCUMENTED = YES WARN_IF_DOC_ERROR = YES WARN_NO_PARAMDOC = NO WARN_FORMAT = "$file:$line: $text" WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- INPUT = binreloc glib-binreloc FILE_PATTERNS = RECURSIVE = NO EXCLUDE = EXCLUDE_SYMLINKS = NO EXCLUDE_PATTERNS = EXAMPLE_PATH = EXAMPLE_PATTERNS = * EXAMPLE_RECURSIVE = NO IMAGE_PATH = INPUT_FILTER = FILTER_PATTERNS = FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- SOURCE_BROWSER = NO INLINE_SOURCES = NO STRIP_CODE_COMMENTS = YES REFERENCED_BY_RELATION = NO REFERENCES_RELATION = NO USE_HTAGS = NO VERBATIM_HEADERS = NO #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- ALPHABETICAL_INDEX = NO COLS_IN_ALPHA_INDEX = 5 IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- GENERATE_HTML = YES HTML_OUTPUT = html HTML_FILE_EXTENSION = .html HTML_HEADER = HTML_FOOTER = HTML_STYLESHEET = HTML_ALIGN_MEMBERS = YES GENERATE_HTMLHELP = NO CHM_FILE = HHC_LOCATION = GENERATE_CHI = NO BINARY_TOC = NO TOC_EXPAND = NO DISABLE_INDEX = NO ENUM_VALUES_PER_LINE = 4 GENERATE_TREEVIEW = NO TREEVIEW_WIDTH = 250 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- GENERATE_LATEX = NO LATEX_OUTPUT = latex LATEX_CMD_NAME = latex MAKEINDEX_CMD_NAME = makeindex COMPACT_LATEX = NO PAPER_TYPE = a4wide EXTRA_PACKAGES = LATEX_HEADER = PDF_HYPERLINKS = NO USE_PDFLATEX = NO LATEX_BATCHMODE = NO LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- GENERATE_RTF = NO RTF_OUTPUT = rtf COMPACT_RTF = NO RTF_HYPERLINKS = NO RTF_STYLESHEET_FILE = RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- GENERATE_MAN = YES MAN_OUTPUT = man MAN_EXTENSION = .3 MAN_LINKS = YES #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- GENERATE_XML = NO XML_OUTPUT = xml XML_SCHEMA = XML_DTD = XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- GENERATE_PERLMOD = NO PERLMOD_LATEX = NO PERLMOD_PRETTY = YES PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- ENABLE_PREPROCESSING = YES MACRO_EXPANSION = NO EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = PREDEFINED = BINRELOC_RUNNING_DOXYGEN EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- TAGFILES = GENERATE_TAGFILE = ALLEXTERNALS = NO EXTERNAL_GROUPS = YES PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- CLASS_DIAGRAMS = NO HIDE_UNDOC_RELATIONS = YES HAVE_DOT = NO CLASS_GRAPH = YES COLLABORATION_GRAPH = YES GROUP_GRAPHS = YES UML_LOOK = NO TEMPLATE_RELATIONS = NO INCLUDE_GRAPH = YES INCLUDED_BY_GRAPH = YES CALL_GRAPH = NO GRAPHICAL_HIERARCHY = YES DIRECTORY_GRAPH = YES DOT_IMAGE_FORMAT = png DOT_PATH = DOTFILE_DIRS = MAX_DOT_GRAPH_WIDTH = 1024 MAX_DOT_GRAPH_HEIGHT = 1024 MAX_DOT_GRAPH_DEPTH = 1000 DOT_TRANSPARENT = NO DOT_MULTI_TARGETS = NO GENERATE_LEGEND = YES DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Configuration::additions related to the search engine #--------------------------------------------------------------------------- SEARCHENGINE = NO ./Listaller-0.5.8/contrib/binreloc/ChangeLog0000664000175000017500000001227612176743563021061 0ustar matthiasmatthias2010-05-14 Jan Niklas Hasse * java/BinReloc.java: Added version of BinReloc by Damjan Jovanovic. Thanks again! 2008-05-31 Isak Savo * mono/: Added C# version of binreloc (which is a modified version of the one on my blog: http://isak.livejournal.com/11225.html 2007-08-19 Isak Savo * basic.c (_br_find_exe_for_symbol, _br_find_exe_for_symbol): * normal.c (br_strcat, br_strndup): * fdbr.c (get_self_path): Check return code of malloc and friends to handle out of memory situations better. Fixes #35 2007-08-19 Jan Niklas Hasse * python/: Added python version of binreloc 2007-01-29 Christian Stimming * binreloc.m4: Fixed so that it doesn't break w/ autoconf 2.60 * glib.c: Remove uninitialized variable warning. 2005-07-21 Hongli Lai * binreloc.m4: remove redundant pthread detection code. 2005-07-21 Hongli Lai * Add a new function: br_find_exe_dir() 2005-07-21 Hongli Lai * Apply Gary Kramlich's patch for fixing the BinReloc macro. 2005-06-25 Hongli Lai * Lots of stuff changed. I'm too lazy to document them. * The normal version is now 100% completed. * Added a special initialization function for libraries. 2005-06-21 Hongli Lai * Glib version completed. More work on normal version. * Is this file even necessary? 2005-??-?? Hongli Lai * More work on BinReloc but I forgot to update ChangeLog. 2005-05-02 Hongli Lai * Oops, I totally forgot that we have a ChangeLog! Anyway, I rewrote BinReloc a few weeks ago. A script will now auto-generate a version of BinReloc that matches your project's style. This way people can't complain anymore about "Waah it sucks it does(n't) use glib!" ;) * The last version only had the bare minimum (no convenience macros for determining directories like datadir etc.). A part of such functionality has been re-added in the glib version. 2005-01-08 Hongli Lai * prefix.c: br_thread_local_store shows up in the symbol table even if ENABLE_BINRELOC is not defined. Fixed. 2004-11-24 Hongli Lai * Apparently Tim's patch broke some things. His new patch fixed the problems. 2004-11-23 Hongli Lai * Commit Tim Ringenbach his patch: "It allows the registration of a fallback function to call. This would allow gaim to use other methods, e.g. g_find_program_in_path() or a command line arg, to find its prefix, without having to modify prefix.c, to make upgrading it later easier." br_set_fallback_function() added. 2004-06-18 Chris Larson * Clean up of the autoconf macros, which consisted of switching to AC_CHECK_FILE to check for the maps file, and caching some of our test results. * Make the autoconf macros set BINRELOC_LIBS, which currently contains -lpthread. * Made enabling/disabling binreloc usage of pthread a configuration option, and made it use AC_CHECK_LIB for pthread when enabled (default). 2004-04-13 Hongli Lai * Guard prefix.[ch] with 'extern "C"'. 2004-04-?? Hongli Lai * Forgot what date I modified this stuff. :/ * Made it easier to add your own namespace to BinReloc functions. * Make the code C++ compliant. 2004-02-19 Mike Hearn * Makefile: bump version 2004-02-15 Mike Hearn * USAGE: Replace string manipulation with DATADIR() macro, much simpler 2004-02-10 Hongli Lai * Removed dladdr() dependancy. * Removed support for _DYNAMIC because it doesn't always return an absolute path. 2003-09-28 Mike Hearn * Bump version to 1.1, we can't release 0.9 after 1.0 2003-09-05 Hognli Lai * Rename *_BR macros to BR_*. * New function: br_extract_dir(). * Wrote fallback function that uses _DYNAMIC. * Updated README and USAGE about portability and API. 2003-09-04 Hongli Lai * Added 'dist' target to Makefile. * Added *_BR macros to prefix.h. * Restructured prefix.c. * Remove glibc check from test.c; doesn't work on newer glibc systems. 2003-08-31 Hongli Lai * Moved code from prefix.c to prefix.h and made them static. * Added libtest.c and made test.c link to libtest. * Add USAGE. * Move code from header back to source. * Add more macros. 2003-08-29 Hongli Lai * Further cleanup. Documentation updates. Removed some redundant functions. 2003-08-29 Hongli Lai * Rewritten README. * Big cleanup of prefix.c and prefix.h. Added inline documentation. * More tests in test.c. * Replace compile script with Makefile. 2003-08-29 Mike Hearn * prefix.c: removed bogus comments garbage, added LIBDIR macro as well as DATADIR * prefix.c: removed static declaration, created new _thread_local_store function based on pthreads. If pthreads are not used, the prefix macros will not be thread safe. * prefix.c: made functions static, removed _thread_local_store * CVS/: Initial import ./Listaller-0.5.8/contrib/binreloc/python/0000775000175000017500000000000012176743563020620 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/python/testreloc.py0000775000175000017500000000037112176743563023202 0ustar matthiasmatthias#!/usr/bin/env python import reloc print reloc.EXE print reloc.EXEDIR print reloc.PREFIX print reloc.BINDIR print reloc.SBINDIR print reloc.DATADIR print reloc.LIBDIR print reloc.LIBEXECDIR print reloc.ETCDIR print reloc.BINDIR print reloc.LOCALE ./Listaller-0.5.8/contrib/binreloc/python/reloc.py0000664000175000017500000000137012176743563022277 0ustar matthiasmatthias# PyReloc - a library for creating relocatable python applications # Written by: Jan Niklas Hasse # http://autopackage.org/ # # This source code is public domain. You can relicense this code # under whatever license you want. # # See http://autopackage.org/docs/pyreloc/ for # more information and how to use this. import os EXE = __file__ EXEDIR = os.path.dirname(EXE) PREFIX = os.path.normpath(os.path.join(EXEDIR, "..")) BINDIR = os.path.join(PREFIX, "bin") SBINDIR = os.path.join(PREFIX, "sbin") DATADIR = os.path.join(PREFIX, "share") LIBDIR = os.path.join(PREFIX, "lib") LIBEXECDIR = os.path.join(PREFIX, "libexec") ETCDIR = os.path.join(PREFIX, "etc") BINDIR = os.path.join(PREFIX, "bin") LOCALE = os.path.join(DATADIR, "locale") ./Listaller-0.5.8/contrib/binreloc/python/reloc.txt0000664000175000017500000000127312176743563022470 0ustar matthiasmatthiasBasic usage Place the reloc.py file somewhere, where your python script can import it and then import it: import reloc Now you can use reloc to replace your paths. For example replace glade = gtk.glade.XML('/usr/share/myproject/main.glade') with glade = gtk.glade.XML(os.path.join(reloc.DATADIR, 'myproject/main.glade')) Other Variables are: EXE Path to your main python script (__file__). EXEDIR The directory of your python script. PREFIX The prefix, e.g. "/usr". BINDIR PREFIX + "/bin" SBINDIR PREFIX + "/sbin" DATADIR PREFIX + "/share" LIBDIR PREFIX + "/lib" LIBEXECDIR PREFIX + "/libexec" ETCDIR PREFIX + "/etc" LOCALEDIR DATADIR + "/locale" ./Listaller-0.5.8/contrib/binreloc/fdbr.c0000664000175000017500000000737112176743563020370 0ustar matthiasmatthias/* This program is free software. It comes without any warranty, to * the extent permitted by applicable law. You can redistribute it * and/or modify it under the terms of the Do What The Fuck You Want * To Public License, Version 2, as published by Sam Hocevar. See * http://sam.zoy.org/wtfpl/COPYING for more details. */ /* File descriptor based binary relocatability * * Summary: open a file descriptor pointing to the runtime determined * prefix directory. Dup2 this to a reserved FD number like 200 or * so. Then compile prefix to be /proc/self/fd/200. Checks that we're * not suid+linked. */ #define _GNU_SOURCE #include #include #include #include #include #include static char *get_self_path() { char *exe = NULL; size_t size = 100; while (1) { exe = (char *) realloc(exe, size); /* Handle OOM (Tracker issue #35) */ if (!exe) return NULL; memset(exe, 0, size); int nchars = readlink("/proc/self/exe", exe, size); if (nchars < 0) { free(exe); return NULL; } if (nchars < size) return exe; size *= 2; } } static char *dirname (const char *path) { char *end, *result; if (!path) return NULL; end = strrchr (path, '/'); if (end == (const char *) NULL) return strdup ("."); while (end > path && *end == '/') end--; result = strndup (path, end - path + 1); if (result[0] == 0) { free (result); return strdup ("/"); } return result; } static int is_secure() { /* A suid relocatable program could be attacked via hard * links, forcing it to read a file that it did not expect. * * To prevent this we fall back to /usr and print a warning if * we are suid and link count is not 1. */ if (getuid() == geteuid()) return 1; struct stat buf; if (stat("/proc/self/exe", &buf) < 0) { perror("stat"); return 0; } if (buf.st_nlink > 1) return 0; return 1; } void __attribute__((visibility("hidden"))) __attribute__((constructor)) init_prefix_fd() { char *prefix; /* suid/link check */ if (!is_secure()) { fprintf(stderr, "init_prefix_fd(): I am suid and hard linked, relocatability security check failed\n"); fprintf(stderr, "init_prefix_fd(): Assuming installation prefix of /usr\n"); prefix = strdup("/usr"); } else { /* find the prefix path */ char *exepath = get_self_path(); char *exedir = dirname(exepath); prefix = dirname(exedir); printf("exepath=%s, exedir=%s, prefix=%s\n", exepath, exedir, prefix); if (exepath) free(exepath); if (exedir) free(exedir); if (!prefix) return; } int fd = -1; const int requested_fd = 200; /* open it */ if ((fd = open(prefix, O_RDONLY)) < 0) { perror("open"); free(prefix); return; } if (dup2(fd, requested_fd) < 0) { perror("dup2"); free(prefix); close(fd); return; } free(prefix); close(fd); /* And intentionally leak the fd so it can be used to look up files. * * Note that we deliberately allow it to survive exec(), because * the program may pass internal paths to other processes. If that * other process _also_ uses fd binreloc then dup2 will close the * previous fd so the path will no longer be valid. The numbers * can be changed to avoid that conflict, or alternatively the * path can be normalised using realpath() before passing it * across. Namespaces are process specific anyway so this obscure * gotcha is not limited to binreloc. */ } ./Listaller-0.5.8/contrib/binreloc/java/0000775000175000017500000000000012176743563020220 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/java/BinReloc.java0000664000175000017500000002657612176743563022600 0ustar matthiasmatthias// BinReloc - A class for creating relocatable applications // Written By: Damjan Jovanovic // http://www.autopackage.org/ // // This source code is public domain. You can relicense this code // under whatever license you want. // // See http://autopackage.org/docs/binreloc/ for // more information and how to use this. package org.autopackage; import java.io.File; import java.net.MalformedURLException; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.security.CodeSource; /** * BinReloc is a utility that allows your program to be "location independent", * locating its external files using paths relative to the program. * @author dacha */ public class BinReloc { private final Class klazz; /** * Constructs a new instance that will locate paths using the path of * the given class's .class or .jar file as the origin. * * @param klazz a class in your program that will be used as the origin */ public BinReloc(Class klazz) { this.klazz = klazz; } /** * Returns the URL from which the origin class was loaded. * @return the URL from which the origin class was loaded, or null on failure. * @throws SecurityException */ public URL getCodeSourceLocation() throws SecurityException { final CodeSource codeSource = klazz.getProtectionDomain().getCodeSource(); if (codeSource != null) { return codeSource.getLocation(); } return null; } private static String getPrefixPath(URI uri) { final String path = uri.getPath(); // file.class in /usr/bin will have the URL file:///usr/bin/ // file.jar in /usr/bin will have the URL file:///usr/bin/file.jar final int lastSlash = path.lastIndexOf('/'); if (lastSlash < 0) { return null; } final int secondLastSlash = path.lastIndexOf('/', lastSlash - 1); if (secondLastSlash < 0) { return null; } return path.substring(0, secondLastSlash + 1); } private static URL createURLWithPath(URI uri, String path) { try { return new URI( uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), path, uri.getQuery(), uri.getFragment()).toURL(); } catch (IllegalArgumentException illegalArgumentException) { } catch (MalformedURLException malformedURLException) { } catch (URISyntaxException uriSyntaxException) { } return null; } private static File createFileWithPath(URI uri, String path) { try { return new File(new URI( uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), path, uri.getQuery(), uri.getFragment())); } catch (IllegalArgumentException illegalArgumentException) { } catch (URISyntaxException uriSyntaxException) { } return null; } private URL relocURL(String path) throws SecurityException { final URL url = getCodeSourceLocation(); if (url != null) { try { final URI uri = url.toURI(); final String prefixPath = getPrefixPath(uri); if (prefixPath != null) { return createURLWithPath(uri, prefixPath + path); } } catch (URISyntaxException uriSyntaxException) { } } return null; } private File relocFile(String path) throws SecurityException { final URL url = getCodeSourceLocation(); if (url != null) { try { final URI uri = url.toURI(); final String prefixPath = getPrefixPath(uri); if (prefixPath != null) { return createFileWithPath(uri, prefixPath + path); } } catch (URISyntaxException uriSyntaxException) { } } return null; } /** * Returns the directory the origin class was loaded from, which is * /usr/bin if your class was loaded from /usr/bin/file.jar. * @return the startup directory as a URL, or null on failure. * @throws SecurityException */ public URL getStartupDirURL() throws SecurityException { final URL url = getCodeSourceLocation(); if (url != null) { try { final URI uri = url.toURI(); final String path = uri.getPath(); // file.class in /usr/bin will have the URL file:///usr/bin/ // file.jar in /usr/bin will have the URL file:///usr/bin/file.jar final int lastSlash = path.lastIndexOf('/'); if (lastSlash < 0) { return null; } return createURLWithPath(uri, path.substring(0, lastSlash + 1)); } catch (URISyntaxException uriSyntaxException) { } } return null; } /** * Returns the directory the origin class was loaded from, which is * /usr/bin if your class was loaded from /usr/bin/file.jar. * @return the startup directory as a File, or null on failure. * @throws SecurityException */ public File getStartupDirFile() throws SecurityException { final URL url = getCodeSourceLocation(); if (url != null) { try { final URI uri = url.toURI(); final String path = uri.getPath(); // file.class in /usr/bin will have the URL file:///usr/bin/ // file.jar in /usr/bin will have the URL file:///usr/bin/file.jar final int lastSlash = path.lastIndexOf('/'); if (lastSlash < 0) { return null; } return createFileWithPath(uri, path.substring(0, lastSlash + 1)); } catch (URISyntaxException uriSyntaxException) { } } return null; } /** * Returns the UNIX installation prefix, which is * /usr if your class was loaded from /usr/bin/file.jar. * @return the installation prefix as a URL, or null on failure. * @throws SecurityException */ public URL getPrefixURL() throws SecurityException { return relocURL(""); } /** * Returns the UNIX installation prefix, which is * /usr if your class was loaded from /usr/bin/file.jar. * @return the installation prefix as a File, or null on failure. * @throws SecurityException */ public File getPrefixFile() throws SecurityException { return relocFile(""); } /** * Returns the bin subdirectory under the UNIX installation prefix, * which is /usr/bin if your class was loaded from * /usr/bin/file.jar. * @return the bin directory as a URL, or null on failure. * @throws SecurityException */ public URL getBinDirURL() throws SecurityException { return relocURL("bin"); } /** * Returns the bin subdirectory under the UNIX installation prefix, * which is /usr/bin if your class was loaded from * /usr/bin/file.jar. * @return the bin directory as a File, or null on failure. * @throws SecurityException */ public File getBinDirFile() throws SecurityException { return relocFile("bin"); } /** * Returns the data subdirectory under the UNIX installation prefix, * which is /usr/share if your class was loaded from * /usr/bin/file.jar. * @return the data directory as a URL, or null on failure. * @throws SecurityException */ public URL getDataDirURL() throws SecurityException { return relocURL("share"); } /** * Returns the data subdirectory under the UNIX installation prefix, * which is /usr/share if your class was loaded from * /usr/bin/file.jar. * @return the data directory as a File, or null on failure. * @throws SecurityException */ public File getDataDirFile() throws SecurityException { return relocFile("share"); } /** * Returns the lib subdirectory under the UNIX installation prefix, * which is /usr/lib if your class was loaded from * /usr/bin/file.jar. * @return the lib directory as a URL, or null on failure. * @throws SecurityException */ public URL getLibDirURL() throws SecurityException { return relocURL("lib"); } /** * Returns the lib subdirectory under the UNIX installation prefix, * which is /usr/lib if your class was loaded from * /usr/bin/file.jar. * @return the lib directory as a File, or null on failure. * @throws SecurityException */ public File getLibDirFile() throws SecurityException { return relocFile("lib"); } /** * Returns the libexec subdirectory under the UNIX installation prefix, * which is /usr/libexec if your class was loaded from * /usr/bin/file.jar. * @return the libexec directory as a URL, or null on failure. * @throws SecurityException */ public URL getLibExecDirURL() throws SecurityException { return relocURL("libexec"); } /** * Returns the libexec subdirectory under the UNIX installation prefix, * which is /usr/libexec if your class was loaded from * /usr/bin/file.jar. * @return the libexec directory as a File, or null on failure. * @throws SecurityException */ public File getLibExecDirFile() throws SecurityException { return relocFile("libexec"); } /** * Returns the locale subdirectory under the UNIX installation prefix, * which is /usr/share/locale if your class was loaded from * /usr/bin/file.jar. * @return the locale directory as a URL, or null on failure. * @throws SecurityException */ public URL getLocaleDirURL() throws SecurityException { return relocURL("share/locale"); } /** * Returns the locale subdirectory under the UNIX installation prefix, * which is /usr/share/locale if your class was loaded from * /usr/bin/file.jar. * @return the locale directory as a File, or null on failure. * @throws SecurityException */ public File getLocaleDirFile() throws SecurityException { return relocFile("share/locale"); } /** * Returns the sbin subdirectory under the UNIX installation prefix, * which is /usr/sbin if your class was loaded from * /usr/bin/file.jar. * @return the sbin directory as a URL, or null on failure. * @throws SecurityException */ public URL getSbinDirURL() throws SecurityException { return relocURL("sbin"); } /** * Returns the sbin subdirectory under the UNIX installation prefix, * which is /usr/sbin if your class was loaded from * /usr/bin/file.jar. * @return the sbin directory as a File, or null on failure. * @throws SecurityException */ public File getSbinDirFile() throws SecurityException { return relocFile("sbin"); } } ./Listaller-0.5.8/contrib/binreloc/binreloc.m40000664000175000017500000000345012176743563021340 0ustar matthiasmatthias# Check for binary relocation support. # Written by Hongli Lai # http://autopackage.org/ AC_DEFUN([AM_BINRELOC], [ AC_ARG_ENABLE(binreloc, [ --enable-binreloc compile with binary relocation support (default=enable when available)], enable_binreloc=$enableval,enable_binreloc=auto) BINRELOC_CFLAGS= BINRELOC_LIBS= if test "x$enable_binreloc" = "xauto"; then AC_CHECK_FILE([/proc/self/maps]) AC_CACHE_CHECK([whether everything is installed to the same prefix], [br_cv_valid_prefixes], [ # datarootdir variables was introduced with autoconf-2.60 if test "$bindir" = '${exec_prefix}/bin' -a "$sbindir" = '${exec_prefix}/sbin' -a \ \( "$datadir" = '${prefix}/share' -o \( "$datadir" = '${datarootdir}' -a "$datarootdir" = '${prefix}/share' \) \) -a \ "$libdir" = '${exec_prefix}/lib' -a \ "$libexecdir" = '${exec_prefix}/libexec' -a "$sysconfdir" = '${prefix}/etc' then br_cv_valid_prefixes=yes else br_cv_valid_prefixes=no fi ]) fi AC_CACHE_CHECK([whether binary relocation support should be enabled], [br_cv_binreloc], [if test "x$enable_binreloc" = "xyes"; then br_cv_binreloc=yes elif test "x$enable_binreloc" = "xauto"; then if test "x$br_cv_valid_prefixes" = "xyes" -a \ "x$ac_cv_file__proc_self_maps" = "xyes"; then br_cv_binreloc=yes else br_cv_binreloc=no fi else br_cv_binreloc=no fi]) if test "x$br_cv_binreloc" = "xyes"; then BINRELOC_CFLAGS="-DENABLE_BINRELOC" AC_DEFINE(ENABLE_BINRELOC,,[Use binary relocation?]) fi AC_SUBST(BINRELOC_CFLAGS) AC_SUBST(BINRELOC_LIBS) ]) ./Listaller-0.5.8/contrib/binreloc/generate.pl0000775000175000017500000001555512176743563021444 0ustar matthiasmatthias#!/usr/bin/env perl use strict; use FindBin qw($RealBin); use File::Spec; srand(); if ((!$ARGV[0]) || ($ARGV[0] eq "--help") || $ARGV[0] eq "-h") { print "Usage: ./generate.pl [SRC] [HEADER]\n"; print "This script generates a version of BinReloc with a coding style/API that fits\n"; print "your project's coding style and prefferred API. The result will be written to\n"; print "the files SRC ('binreloc.c' by default) and HEADER ('binreloc.h' by default).\n\n"; print "TYPE is one of the following:\n"; print " normal Use normal (raw C) API, with no further dependancies.\n"; print " glib Use glib-style API.\n\n"; exit; } my $basic = getFile("basic.c"); my $br_license = getSection($basic, 'LICENSE'); my $br_include = getSection($basic, 'INCLUDE'); my $br_errors = getSection($basic, 'ERROR'); my $br_function = getSection($basic, 'FUNCTION'); my $br_c_guard1 = "#ifndef __BINRELOC_C__\n" . "#define __BINRELOC_C__\n"; my $br_c_guard2 = "#endif /* __BINRELOC_C__ */\n"; my $br_h_guard1 = $br_c_guard1; my $br_h_guard2 = $br_c_guard2; $br_h_guard1 =~ s/_C_/_H_/mg; $br_h_guard2 =~ s/_C_/_H_/; my $cppguard1 = "#ifdef __cplusplus\n" . "extern \"C\" {\n" . "#endif /* __cplusplus */\n"; my $cppguard2 = "#ifdef __cplusplus\n" . "}\n" . "#endif /* __cplusplus */\n"; my $mangle = ''; for (my $i = 0; $i < 4; $i++) { my @chars = qw(a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z); $mangle .= $chars[rand(scalar @chars)]; } $mangle .= int(rand(99999999999999)); my $srcfile = ($ARGV[1] || "binreloc.c"); my $headerfile = ($ARGV[2] || "binreloc.h"); my (undef, undef, $headerincludefile) = File::Spec->splitpath($headerfile); my $src = ''; my $header = ''; if ($ARGV[0] eq "normal") { my $normal = getFile("normal.c"); $src = "$br_license\n$br_c_guard1\n"; $src .= $br_include; $src .= "#include \"$headerincludefile\"\n\n"; $src .= "$cppguard1\n"; $src .= "\n\n$br_function\n\n"; $src .= "$normal\n\n"; $src .= "$cppguard2\n"; $src .= $br_c_guard2; $header = "$br_license\n$br_h_guard1\n$cppguard1\n\n"; $header .= "$br_errors\n\n"; $header .= "#ifndef BINRELOC_RUNNING_DOXYGEN\n"; $header .= mangle(qw/br_init br_init_lib br_find_exe br_find_exe_dir br_find_prefix br_find_bin_dir br_find_sbin_dir br_find_data_dir br_find_locale_dir br_find_lib_dir br_find_libexec_dir br_find_etc_dir br_strcat br_build_path br_dirname/); $header .= "#endif\n\n"; $header .= "int br_init (BrInitError *error);\n"; $header .= "int br_init_lib (BrInitError *error);\n\n"; $header .= "char *br_find_exe (const char *default_exe);\n"; $header .= "char *br_find_exe_dir (const char *default_dir);\n"; $header .= "char *br_find_prefix (const char *default_prefix);\n"; $header .= "char *br_find_bin_dir (const char *default_bin_dir);\n"; $header .= "char *br_find_sbin_dir (const char *default_sbin_dir);\n"; $header .= "char *br_find_data_dir (const char *default_data_dir);\n"; $header .= "char *br_find_locale_dir (const char *default_locale_dir);\n"; $header .= "char *br_find_lib_dir (const char *default_lib_dir);\n"; $header .= "char *br_find_libexec_dir (const char *default_libexec_dir);\n"; $header .= "char *br_find_etc_dir (const char *default_etc_dir);\n"; $header .= "\n/* Utility functions */\n"; $header .= "char *br_strcat (const char *str1, const char *str2);\n"; $header .= "char *br_build_path (const char *dir, const char *file);\n"; $header .= "char *br_dirname (const char *path);\n"; $header .= "\n\n"; $header .= "$cppguard2\n"; $header .= $br_h_guard2; } elsif ($ARGV[0] eq "glib") { my $glib = getFile("glib.c"); $cppguard1 = "G_BEGIN_DECLS\n"; $cppguard2 = "G_END_DECLS\n"; $src = "$br_license\n$br_c_guard1\n"; $src .= $br_include; $src .= "#include \"$headerincludefile\"\n\n"; $src .= "$cppguard1\n\n"; $br_function =~ s/BrInitError/GbrInitError/g; $br_function =~ s/BR_INIT_ERROR/GBR_INIT_ERROR/g; $br_function =~ s/ malloc \(/ g_try_malloc (/g; $br_function =~ s/ realloc \(/ g_try_realloc (/g; $br_function =~ s/ strdup \(/ g_strdup (/g; $br_function =~ s/free \(/g_free (/g; $src .= "$br_function\n\n"; $src .= "$glib\n\n"; $src .= "$cppguard2\n"; $src .= $br_c_guard2; $br_errors =~ s/BrInitError/GbrInitError/; $br_errors =~ s/BR_INIT_ERROR/GBR_INIT_ERROR/g; $header = "$br_license\n$br_h_guard1\n"; $header .= "#include \n\n"; $header .= "$cppguard1\n\n"; $header .= "$br_errors\n\n"; $header .= "#ifndef BINRELOC_RUNNING_DOXYGEN\n"; $header .= mangle(qw/gbr_find_exe gbr_find_exe_dir gbr_find_prefix gbr_find_bin_dir gbr_find_sbin_dir gbr_find_data_dir gbr_find_locale_dir gbr_find_lib_dir gbr_find_libexec_dir gbr_find_etc_dir/); $header .= "#endif\n\n"; $header .= "gboolean gbr_init (GError **error);\n"; $header .= "gboolean gbr_init_lib (GError **error);\n\n"; $header .= "gchar *gbr_find_exe (const gchar *default_exe);\n"; $header .= "gchar *gbr_find_exe_dir (const gchar *default_dir);\n"; $header .= "gchar *gbr_find_prefix (const gchar *default_prefix);\n"; $header .= "gchar *gbr_find_bin_dir (const gchar *default_bin_dir);\n"; $header .= "gchar *gbr_find_sbin_dir (const gchar *default_sbin_dir);\n"; $header .= "gchar *gbr_find_data_dir (const gchar *default_data_dir);\n"; $header .= "gchar *gbr_find_locale_dir (const gchar *default_locale_dir);\n"; $header .= "gchar *gbr_find_lib_dir (const gchar *default_lib_dir);\n"; $header .= "gchar *gbr_find_libexec_dir (const gchar *default_libexec_dir);\n"; $header .= "gchar *gbr_find_etc_dir (const gchar *default_etc_dir);\n"; $header .= "\n\n"; $header .= "$cppguard2\n"; $header .= $br_h_guard2; } else { print STDERR "Unknown type '$ARGV[0]'\n"; exit 1; } my $filename = $srcfile; if (!open(F, "> $filename")) { print STDERR "Cannot write to $filename\n"; exit 1; } print F $src; close F; print "Source code written to '$filename'\n"; $filename = $headerfile; if (!open(F, "> $filename")) { print STDERR "Cannot write to $filename\n"; exit 1; } print F $header; close F; print "Header written to '$filename'\n"; sub getSection { my ($code, $section) = @_; my ($result) = $code =~ /\/\*\*\* $section BEGIN \*\/\n(.*?)\/\*\*\* $section END \*\//s; return $result; } sub getFile { my ($file) = @_; my ($f, $content); if (!open($f, "< $RealBin/$file")) { print STDERR "Cannot open $file\n"; exit 1; } local($/); $content = <$f>; close $f; return $content; } sub mangle { my $result = " /* Mangle symbol names to avoid symbol\n" . " * collisions with other ELF objects.\n" . " */\n"; my $len = 0; foreach (@_) { $len = length($_) if (length($_) > $len); } foreach (@_) { $result .= sprintf(" #define %-${len}s %s_%s\n", $_, ${mangle}, $_); } return $result; } ./Listaller-0.5.8/contrib/binreloc/mono/0000775000175000017500000000000012176743563020247 5ustar matthiasmatthias./Listaller-0.5.8/contrib/binreloc/mono/BinReloc.cs0000664000175000017500000000404212176743563022273 0ustar matthiasmatthias// BinReloc - A class for creating relocatable applications // Written By: Isak Savo // http://www.autopackage.org/ // // This source code is public domain. You can relicense this code // under whatever license you want. // // See http://autopackage.org/docs/binreloc/ for // more information and how to use this. using System; namespace Autopackage { /// /// Inheriting from or instanciating this class will give you /// easy access to the directories where your data files are located. /// public sealed class BinReloc { /// /// Gets the directory where the assembly is located in /// private static string BaseDir { get { return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetCallingAssembly().Location); } } ///The prefix of your application. For instance "/usr" or "/usr/local" public static string Prefix { get { return BaseDir; } } /// The binary directory. (prefix + "/bin") public static string BinDir { get { return System.IO.Path.Combine (BaseDir, "bin"); } } /// The data directory. (prefix + "/share") public static string DataDir { get { return System.IO.Path.Combine (BaseDir, "share"); } } /// The library directory. (prefix + "/lib") public static string LibDir { get { return System.IO.Path.Combine (BaseDir, "lib"); } } /// The binary directory. (prefix + "/libexec") public static string LibExecDir { get { return System.IO.Path.Combine (BaseDir, "libexec"); } } /// The locale (contains translation databases) directory. (prefix + "/share/locale") public static string LocaleDir { get { return System.IO.Path.Combine (BaseDir, "share/locale"); } } /// The superuser binary directory. (prefix + "/sbin") public static string SbinDir { get { return System.IO.Path.Combine (BaseDir, "sbin"); } } } } ./Listaller-0.5.8/contrib/binreloc/mono/Readme.txt0000664000175000017500000000506112176743563022207 0ustar matthiasmatthiasBinReloc is a utility that allows your program to be "location independent". Traditionally, UNIX programs have hard coded paths to e.g. data files which are set during compilation which means that a program cannot be moved to a new folder after it has been compiled. With BinReloc, you can locate your external files using paths that are relative to your program. So if you have your program installed in /usr/bin/yourprogram and your data is in /usr/share/yourprogram/ you would, with binreloc, do: string myDataFolder = Autopackage.BinReloc.DataDir; instead of string myDataFolder = "/usr/share/yourprogram"; This means that the program can be put anywhere on the users system (including the $HOME directory) as long as the relative folder hierarchy is preserved. For more information about the problem and how we solve it, see http://www.autopackage.org/docs/binreloc/ == Difference between BinReloc C and C# versions == Note that BinReloc for .NET/Mono is not using the same technical solution as for c/c++ apps. .NET supports binary relocation in the framework so the c# version of BinReloc is just utilizing what is already available and putting it all inside an API that is similar to our C-version. == Usage == Just copy BinReloc.cs to your C# project and then use the static methods inside it to get folder information. If you have multiple projects (i.e. one .exe and several .dll's), you can put BinReloc.cs in just one of them and then have the other projects depend on this one project. Then you just call the static properties inside Autopackage.BinReloc whenever you need to locate a folder: Image myImage = new Bitmap(Path.Combine (BinReloc.DataDir, "myImage.png")); == Technical details / Troubleshooting == The technique used is to ask .NET where the calling assembly is located, and then build path information from that. If BinReloc.cs is inside your single project, you only access BinReloc members from your main program, or all DLLs that access BinReloc members are in the same folder then everything will work just fine. A problem could arise if you access BinReloc members from a third assembly, which is NOT in the same folder as the main program. The following setup would not work, if myprogram calls function in mylib.dll which in turn calls a BinReloc member inside myotherlib. /usr/libexec/myprogram/mylib.dll /usr/libexec/myprogram/myotherlib-with-binreloc.dll /usr/bin/myprogram The work around is to make myprogram call BinReloc directly, or to modify binreloc to use a custom assembly as reference instead of blindly getting the calling assembly../Listaller-0.5.8/contrib/listaller.spec.in0000664000175000017500000000440212176743563020756 0ustar matthiasmatthias%define alphatag #ALPHATAG# Summary: A cross-distribution application management tool Name: listaller Version: #VERSION# Release: 0.#BUILD#%{?alphatag}%{?dist} License: GPLv3+ and LGPLv3+ URL: http://listaller.tenstral.net/ Source0: http://launchpad.net/listaller/0.5/%{version}/+download/%{name}-%{version}.tar.gz BuildRequires: gpgme-devel BuildRequires: chrpath %description Listaller is a distro-agnostic 3rd-party application installer with close integration into PackageKit. The project uses GPG-signed software packages. Dependencies are resolved automatically using PackageKit. Listaller applications can be installed and removed using any PackageKit frontend available, without needing extra tools. %package devel Summary: GLib Libraries and headers for listaller Requires: %{name} = %{version}-%{release} %description devel GLib Libraries and headers for listaller. %prep %setup -q -n Listaller-%{version} %build mkdir build cd build %cmake -DTOOLS=ON -DLIBUILD=ON .. make %{?_smp_mflags} %install cd build make install DESTDIR=$RPM_BUILD_ROOT cd .. # old versions of cmake are broken chrpath --delete $RPM_BUILD_ROOT%{_libdir}/packagekit-plugins/libpk_plugin_listaller.so %find_lang listaller %post /sbin/ldconfig /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : %postun /sbin/ldconfig /usr/bin/update-mime-database %{_datadir}/mime &> /dev/null || : %files -f listaller.lang %defattr(-,root,root,-) %{_bindir}/appcompile %{_bindir}/depscan %{_bindir}/lipkgen %{_bindir}/runapp %{_datadir}/icons/hicolor/32x32/mimetypes/package-x-ipk.png %{_datadir}/listaller %{_datadir}/mime/packages/listaller-ipk.xml %{_datadir}/pixmaps/package-x-ipk.png %{_libdir}/liblistaller-glib.so.0 %{_libdir}/liblistaller-glib.so.0.5.5 %{_libdir}/packagekit-plugins/libpk_plugin_listaller.so %{_sysconfdir}/listaller %{_mandir}/man1/runapp.1.gz %{_mandir}/man1/lipa.1.gz %{_mandir}/man1/lipkgen.1.gz %{_mandir}/man1/appcompile.1.gz %{_mandir}/man1/depscan.1.gz %files devel %defattr(-,root,root,-) %{_datadir}/vala/vapi/listaller-0.5.vapi %{_includedir}/listaller-glib %{_libdir}/liblistaller-glib.so %{_libdir}/pkgconfig/listaller-glib.pc %changelog * #LONGDATE# Richard Hughes #VERSION#-0.#BUILD##ALPHATAG# - Update from git ./Listaller-0.5.8/contrib/patchelf/0000775000175000017500000000000012176743563017270 5ustar matthiasmatthias./Listaller-0.5.8/contrib/patchelf/tests/0000775000175000017500000000000012176743563020432 5ustar matthiasmatthias./Listaller-0.5.8/contrib/patchelf/tests/set-rpath.sh0000775000175000017500000000111612176743563022677 0ustar matthiasmatthias#! /bin/sh -e rm -rf scratch mkdir -p scratch mkdir -p scratch/libsA mkdir -p scratch/libsB cp main scratch/ cp libfoo.so scratch/libsA/ cp libbar.so scratch/libsB/ oldRPath=$(../src/patchelf --print-rpath scratch/main) if test -z "$oldRPath"; then oldRPath="/oops"; fi ../src/patchelf --force-rpath --set-rpath $oldRPath:$(pwd)/scratch/libsA:$(pwd)/scratch/libsB scratch/main if test "$(uname)" = FreeBSD; then export LD_LIBRARY_PATH=$(pwd)/scratch/libsB fi exitCode=0 (cd scratch && ./main) || exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/set-interpreter-long.sh0000775000175000017500000000151412176743563025063 0ustar matthiasmatthias#! /bin/sh -e ./simple oldInterpreter=$(../src/patchelf --print-interpreter ./simple) echo "current interpreter is $oldInterpreter" if test "$(uname)" = Linux; then echo "running with explicit interpreter..." "$oldInterpreter" ./simple fi rm -rf scratch mkdir -p scratch newInterpreter=$(pwd)/scratch/iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii cp simple scratch/ ../src/patchelf --set-interpreter "$newInterpreter" scratch/simple echo "running with missing interpreter..." if scratch/simple; then echo "simple works, but it shouldn't" exit 1 fi echo "running with new interpreter..." ln -s "$oldInterpreter" "$newInterpreter" scratch/simple if test "$(uname)" = Linux; then echo "running with explicit interpreter..." "$oldInterpreter" scratch/simple fi ./Listaller-0.5.8/contrib/patchelf/tests/no-rpath.sh0000775000175000017500000000107012176743563022517 0ustar matthiasmatthias#! /bin/sh -e rm -rf scratch mkdir -p scratch cp no-rpath scratch/ oldRPath=$(../src/patchelf --print-rpath scratch/no-rpath) if test -n "$oldRPath"; then exit 1; fi ../src/patchelf \ --set-interpreter "$(../src/patchelf --print-interpreter ../src/patchelf)" \ --set-rpath /foo:/bar:/xxxxxxxxxxxxxxx scratch/no-rpath newRPath=$(../src/patchelf --print-rpath scratch/no-rpath) if ! echo "$newRPath" | grep -q '/foo:/bar'; then echo "incomplete RPATH" exit 1 fi if [ "$(uname -m)" = i686 -a "$(uname -s)" = Linux ]; then cd scratch && ./no-rpath fi ./Listaller-0.5.8/contrib/patchelf/tests/plain-run.sh0000775000175000017500000000017012176743563022674 0ustar matthiasmatthias#! /bin/sh LD_LIBRARY_PATH=. ./main exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/set-interpreter-short.sh0000775000175000017500000000055612176743563025270 0ustar matthiasmatthias#! /bin/sh -e ./simple oldInterpreter=$(../src/patchelf --print-interpreter ./simple) echo "current interpreter is $oldInterpreter" rm -rf scratch mkdir -p scratch cp simple scratch/ ../src/patchelf --set-interpreter /oops scratch/simple echo "running with missing interpreter..." if scratch/simple; then echo "simple works, but it shouldn't" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/main.c0000664000175000017500000000031112176743563021515 0ustar matthiasmatthias#include char buf[16 * 1024 * 1024]; int foo(); int main(int argc, char * * argv) { int x; printf("Hello World\n"); x = foo(); printf("Result is %d\n", x); return x; } ./Listaller-0.5.8/contrib/patchelf/tests/big-dynstr.sh0000775000175000017500000000114412176743563023053 0ustar matthiasmatthias#! /bin/sh -e rm -rf scratch mkdir -p scratch mkdir -p scratch/libsA mkdir -p scratch/libsB cp big-dynstr scratch/ cp libfoo.so scratch/libsA/ cp libbar.so scratch/libsB/ oldRPath=$(../src/patchelf --print-rpath scratch/big-dynstr) if test -z "$oldRPath"; then oldRPath="/oops"; fi ../src/patchelf --force-rpath --set-rpath $oldRPath:$(pwd)/scratch/libsA:$(pwd)/scratch/libsB scratch/big-dynstr if test "$(uname)" = FreeBSD; then export LD_LIBRARY_PATH=$(pwd)/scratch/libsB fi exitCode=0 cd scratch && ./big-dynstr || exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/simple.c0000664000175000017500000000020212176743563022061 0ustar matthiasmatthias#include char buf[16 * 1024 * 1024]; int main(int argc, char * * argv) { printf("Hello World\n"); return 0; } ./Listaller-0.5.8/contrib/patchelf/tests/bar.c0000664000175000017500000000012112176743563021334 0ustar matthiasmatthias#include int bar() { printf("This is bar()!\n"); return 34; } ./Listaller-0.5.8/contrib/patchelf/tests/foo.c0000664000175000017500000000043212176743563021360 0ustar matthiasmatthias#include /* Include a bogus .interp section in libfoo.so (NIXPKGS-98). Borrowed from Glibc. */ const char __invoke_dynamic_linker__[] __attribute__ ((section (".interp"))) = "/foo/bar"; int bar(); int foo() { printf("This is foo()!\n"); return 12 + bar(); } ./Listaller-0.5.8/contrib/patchelf/tests/no-rpath0000775000175000017500000000544012176743563022113 0ustar matthiasmatthiasELF484 (444( /lib/ld-linux.so.2GNU!X h63 libc.so.6printf_IO_stdin_used__libc_start_main__gmon_start__GLIBC_2.0ii BUi5%%h%h1^PTRhЃhpQVh<US[RtX[ÐUPP=u.t&ҡuÉUQQtt h|ÐU)ă hÐU]u1})9sEאt&FE9r]u}]Ð&U]Ræ}u)pu]]u}]NuA]u}]Ë$ÐUSRppt ЋuX[]US[PVY[Hello World | 0 d(P L  ooo^nGCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux)GCC: (GNU) 3.3.1 (SuSE Linux).shstrtab.interp.note.ABI-tag.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.data.eh_frame.dynamic.ctors.dtors.jcr.got.bss.comment  !(((' PPP/L7o Do S \    e00`HH0kqddw ppxx  y./Listaller-0.5.8/contrib/patchelf/tests/shrink-rpath.sh0000775000175000017500000000116212176743563023403 0ustar matthiasmatthias#! /bin/sh -e rpath=$(../src/patchelf --print-rpath ./libbar.so) echo "RPATH before: $rpath" if ! echo "$rpath" | grep -q /no-such-path; then echo "incomplete RPATH" exit 1 fi rm -rf scratch mkdir -p scratch cp libbar.so scratch/ ../src/patchelf --shrink-rpath scratch/libbar.so rpath=$(../src/patchelf --print-rpath scratch/libbar.so) echo "RPATH after: $rpath" if echo "$rpath" | grep -q /no-such-path; then echo "RPATH not shrunk" exit 1 fi cp libfoo.so scratch/ exitCode=0 cd scratch && LD_LIBRARY_PATH=. ../main || exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/Makefile.am0000664000175000017500000000306312176743563022470 0ustar matthiasmatthiascheck_PROGRAMS = main main-scoped simple big-dynstr TESTS = plain-fail.sh plain-run.sh shrink-rpath.sh set-interpreter-short.sh \ set-interpreter-long.sh set-rpath.sh no-rpath.sh big-dynstr.sh \ set-rpath-library.sh TESTS_ENVIRONMENT = PATCHELF_DEBUG=1 simple_SOURCES = simple.c main_scoped_SOURCES = main: main.o libfoo.so LD_LIBRARY_PATH=. gcc -Wl,--disable-new-dtags -o main main.o -L . -lfoo main-scoped: main.o libfoo-scoped.so LD_LIBRARY_PATH=. gcc -Wl,--enable-new-dtags -o main-scoped main.o -L . -lfoo-scoped main.o: main.c $(CC) -fpic -o main.o -c main.c libfoo.so: foo.o libbar.so NIX_DONT_SET_RPATH=1 $(CC) -Wl,--disable-new-dtags -shared -o libfoo.so foo.o -L . -lbar libfoo-scoped.so: foo.o libbar-scoped.so NIX_DONT_SET_RPATH=1 $(CC) -Wl,--enable-new-dtags -shared -o libfoo-scoped.so foo.o -L . -lbar-scoped foo.o: foo.c $(CC) -fpic -o foo.o -c foo.c libbar.so: bar.o NIX_DONT_SET_RPATH=1 $(CC) -Wl,--disable-new-dtags -shared -o libbar.so bar.o -L . -Wl,-rpath,`pwd`/no-such-path libbar-scoped.so: bar.o NIX_DONT_SET_RPATH=1 $(CC) -Wl,--enable-new-dtags -shared -o libbar-scoped.so bar.o bar.o: bar.c $(CC) -fpic -o bar.o -c bar.c big_dynstr_SOURCES = big-dynstr.c big-dynstr: big-dynstr.o libfoo.so LD_LIBRARY_PATH=. gcc -Wl,--disable-new-dtags -o big-dynstr big-dynstr.o -L . -lfoo big-dynstr.c: main.c cat main.c > big-dynstr.c for i in $$(seq 1 2000); do echo "void f$$i(void) { };" >> big-dynstr.c; done clean-local: $(RM) *.o libfoo.so libbar.so main big-dynstr big-dynstr.c EXTRA_DIST = main.c foo.c bar.c no-rpath $(TESTS) ./Listaller-0.5.8/contrib/patchelf/tests/plain-fail.sh0000775000175000017500000000005112176743563023001 0ustar matthiasmatthias#! /bin/sh if ./main; then exit 1 fi ./Listaller-0.5.8/contrib/patchelf/tests/set-rpath-library.sh0000775000175000017500000000274412176743563024351 0ustar matthiasmatthias#! /bin/sh -e if test "$(uname)" = FreeBSD; then echo "skipping on FreeBSD" exit 0 fi rm -rf scratch mkdir -p scratch mkdir -p scratch/libsA mkdir -p scratch/libsB cp main-scoped scratch/ cp libfoo-scoped.so scratch/libsA/ cp libbar-scoped.so scratch/libsB/ oldRPath=$(../src/patchelf --print-rpath scratch/main-scoped) if test -z "$oldRPath"; then oldRPath="/oops"; fi ../src/patchelf --set-rpath $oldRPath:$(pwd)/scratch/libsA:$(pwd)/scratch/libsB scratch/main-scoped # "main" contains libbar in its RUNPATH, but that's ignored when # resolving libfoo. So libfoo won't find libbar and this will fail. exitCode=0 (cd scratch && ./main-scoped) || exitCode=$? if test "$exitCode" = 46; then echo "expected failure" exit 1 fi # So set an RUNPATH on libfoo as well. oldRPath=$(../src/patchelf --print-rpath scratch/libsA/libfoo-scoped.so) if test -z "$oldRPath"; then oldRPath="/oops"; fi ../src/patchelf --set-rpath $oldRPath:$(pwd)/scratch/libsB scratch/libsA/libfoo-scoped.so exitCode=0 (cd scratch && ./main-scoped) || exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi # Remove the libbar PATH from main using --shrink-rpath. ../src/patchelf --shrink-rpath scratch/main-scoped if ../src/patchelf --print-rpath scratch/main-scoped | grep /libsB; then echo "shrink failed" exit 1 fi # And it should still run. exitCode=0 (cd scratch && ./main-scoped) || exitCode=$? if test "$exitCode" != 46; then echo "bad exit code!" exit 1 fi ./Listaller-0.5.8/contrib/patchelf/CMakeLists.txt0000664000175000017500000000002712176743563022027 0ustar matthiasmatthias add_subdirectory(src) ./Listaller-0.5.8/contrib/patchelf/README0000664000175000017500000000565412176743563020162 0ustar matthiasmatthiasPatchELF is a simple utility for modifing existing ELF executables and libraries. In particular, it can do the following: * Change the dynamic loader ("ELF interpreter") of executables: $ patchelf --set-interpreter /lib/my-ld-linux.so.2 my-program * Change the RPATH of executables and libraries: $ patchelf --set-rpath /opt/my-libs/lib:/other-libs my-program * Shrink the RPATH of executables and libraries: $ patchelf --shrink-rpath my-program This removes from the RPATH all directories that do not contain a library referenced by DT_NEEDED fields of the executable or library. For instance, if an executable references one library libfoo.so, has an RPATH "/lib:/usr/lib:/foo/lib", and libfoo.so can only be found in /foo/lib, then the new RPATH will be "/foo/lib". AUTHOR Copyright 2004-2009 Eelco Dolstra . LICENSE 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, either version 3 of the License, or (at your option) any later version. 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 . HOMEPAGE http://nixos.org/patchelf.html BUGS The `strip' command from binutils generated broken executables when applied to the output of patchelf (if `--set-rpath' or `--set-interpreter' with a larger path than the original is used). This appears to be a bug in binutils (http://bugs.strategoxt.org/browse/NIXPKGS-85). RELEASE HISTORY 0.6 (TBA): * Support segments with an alignment of 0 (contributed by Zack Weinberg). * Added a manual page (contributed by Jeremy Sanders ). 0.5 (November 4, 2009): * Various bugfixes. * `--force-rpath' now deletes the DT_RUNPATH if it is present. 0.4 (June 4, 2008): * Support for growing the RPATH on dynamic libraries. * IA-64 support (not tested) and related 64-bit fixes. * FreeBSD support. * `--set-rpath', `--shrink-rpath' and `--print-rpath' now prefer DT_RUNPATH over DT_RPATH, which is obsolete. When updating, if both are present, both are updated. If only DT_RPATH is present, it is converted to DT_RUNPATH unless `--force-rpath' is specified. If neither is present, a DT_RUNPATH is added unless `--force-rpath' is specified, in which case a DT_RPATH is added. 0.3 (May 24, 2007): * Support for 64-bit ELF binaries (such as on x86_64-linux). * Support for big-endian ELF binaries (such as on powerpc-linux). * Various bugfixes. 0.2 (January 15, 2007): * Provides a hack to get certain programs (such as the Belastingaangifte 2005) to work. 0.1 (October 11, 2005): * Initial release. ./Listaller-0.5.8/contrib/patchelf/src/0000775000175000017500000000000012176743563020057 5ustar matthiasmatthias./Listaller-0.5.8/contrib/patchelf/src/patchelf.cc0000664000175000017500000010615512176743563022164 0ustar matthiasmatthias#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "elf.h" using namespace std; #ifdef MIPSEL /* The lemote fuloong 2f kernel defconfig sets a page size of 16KB */ const unsigned int pageSize = 4096*4; #else const unsigned int pageSize = 4096; #endif static bool debugMode = false; static bool forceRPath = false; static string fileName; off_t fileSize, maxSize; unsigned char * contents = 0; #define ElfFileParams class Elf_Ehdr, class Elf_Phdr, class Elf_Shdr, class Elf_Addr, class Elf_Off, class Elf_Dyn #define ElfFileParamNames Elf_Ehdr, Elf_Phdr, Elf_Shdr, Elf_Addr, Elf_Off, Elf_Dyn template class ElfFile { Elf_Ehdr * hdr; vector phdrs; vector shdrs; bool littleEndian; bool changed; typedef string SectionName; typedef map ReplacedSections; ReplacedSections replacedSections; string sectionNames; /* content of the .shstrtab section */ /* Align on 4 or 8 bytes boundaries on 32- or 64-bit platforms respectively. */ unsigned int sectionAlignment; public: ElfFile() { changed = false; sectionAlignment = sizeof(Elf_Off); } bool isChanged() { return changed; } void parse(); private: struct CompPhdr { ElfFile * elfFile; bool operator ()(const Elf_Phdr & x, const Elf_Phdr & y) { if (x.p_type == PT_PHDR) return true; if (y.p_type == PT_PHDR) return false; return elfFile->rdi(x.p_paddr) < elfFile->rdi(y.p_paddr); } }; friend struct CompPhdr; void sortPhdrs(); struct CompShdr { ElfFile * elfFile; bool operator ()(const Elf_Shdr & x, const Elf_Shdr & y) { return elfFile->rdi(x.sh_offset) < elfFile->rdi(y.sh_offset); } }; friend struct CompShdr; void sortShdrs(); void shiftFile(unsigned int extraPages, Elf_Addr startPage); string getSectionName(const Elf_Shdr & shdr); Elf_Shdr & findSection(const SectionName & sectionName); Elf_Shdr * findSection2(const SectionName & sectionName); unsigned int findSection3(const SectionName & sectionName); string & replaceSection(const SectionName & sectionName, unsigned int size); void writeReplacedSections(Elf_Off & curOff, Elf_Addr startAddr, Elf_Off startOffset); void rewriteHeaders(Elf_Addr phdrAddress); void rewriteSectionsLibrary(); void rewriteSectionsExecutable(); public: void rewriteSections(); string getInterpreter(); void setInterpreter(const string & newInterpreter); typedef enum { rpPrint, rpShrink, rpSet } RPathOp; void modifyRPath(RPathOp op, string newRPath); private: /* Convert an integer in big or little endian representation (as specified by the ELF header) to this platform's integer representation. */ template I rdi(I i); /* Convert back to the ELF representation. */ template I wri(I & t, unsigned long long i) { t = rdi((I) i); return i; } }; /* !!! G++ creates broken code if this function is inlined, don't know why... */ template template I ElfFile::rdi(I i) { I r = 0; if (littleEndian) { for (unsigned int n = 0; n < sizeof(I); ++n) { r |= ((I) *(((unsigned char *) &i) + n)) << (n * 8); } } else { for (unsigned int n = 0; n < sizeof(I); ++n) { r |= ((I) *(((unsigned char *) &i) + n)) << ((sizeof(I) - n - 1) * 8); } } return r; } /* Ugly: used to erase DT_RUNPATH when using --force-rpath. */ #define DT_IGNORE 0x00726e67 static void debug(const char * format, ...) { if (debugMode) { va_list ap; va_start(ap, format); vfprintf(stderr, format, ap); va_end(ap); } } static void error(string msg) { if (errno) perror(msg.c_str()); else fprintf(stderr, "%s\n", msg.c_str()); exit(1); } static void growFile(off_t newSize) { if (newSize > maxSize) error("maximum file size exceeded"); if (newSize <= fileSize) return; if (newSize > fileSize) memset(contents + fileSize, 0, newSize - fileSize); fileSize = newSize; } static void readFile(string fileName, mode_t * fileMode) { struct stat st; if (stat(fileName.c_str(), &st) != 0) error("stat"); fileSize = st.st_size; *fileMode = st.st_mode; maxSize = fileSize + 8 * 1024 * 1024; contents = (unsigned char *) malloc(fileSize + maxSize); if (!contents) abort(); int fd = open(fileName.c_str(), O_RDONLY); if (fd == -1) error("open"); if (read(fd, contents, fileSize) != fileSize) error("read"); close(fd); } static void checkPointer(void * p, unsigned int size) { unsigned char * q = (unsigned char *) p; assert(q >= contents && q + size <= contents + fileSize); } template void ElfFile::parse() { /* Check the ELF header for basic validity. */ if (fileSize < (off_t) sizeof(Elf_Ehdr)) error("missing ELF header"); hdr = (Elf_Ehdr *) contents; if (memcmp(hdr->e_ident, ELFMAG, SELFMAG) != 0) error("not an ELF executable"); littleEndian = contents[EI_DATA] == ELFDATA2LSB; if (rdi(hdr->e_type) != ET_EXEC && rdi(hdr->e_type) != ET_DYN) error("wrong ELF type"); if ((off_t) (rdi(hdr->e_phoff) + rdi(hdr->e_phnum) * rdi(hdr->e_phentsize)) > fileSize) error("missing program headers"); if ((off_t) (rdi(hdr->e_shoff) + rdi(hdr->e_shnum) * rdi(hdr->e_shentsize)) > fileSize) error("missing section headers"); if (rdi(hdr->e_phentsize) != sizeof(Elf_Phdr)) error("program headers have wrong size"); /* Copy the program and section headers. */ for (int i = 0; i < rdi(hdr->e_phnum); ++i) phdrs.push_back(* ((Elf_Phdr *) (contents + rdi(hdr->e_phoff)) + i)); for (int i = 0; i < rdi(hdr->e_shnum); ++i) shdrs.push_back(* ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i)); /* Get the section header string table section (".shstrtab"). Its index in the section header table is given by e_shstrndx field of the ELF header. */ unsigned int shstrtabIndex = rdi(hdr->e_shstrndx); assert(shstrtabIndex < shdrs.size()); unsigned int shstrtabSize = rdi(shdrs[shstrtabIndex].sh_size); char * shstrtab = (char * ) contents + rdi(shdrs[shstrtabIndex].sh_offset); checkPointer(shstrtab, shstrtabSize); assert(shstrtabSize > 0); assert(shstrtab[shstrtabSize - 1] == 0); sectionNames = string(shstrtab, shstrtabSize); } template void ElfFile::sortPhdrs() { /* Sort the segments by offset. */ CompPhdr comp; comp.elfFile = this; sort(phdrs.begin(), phdrs.end(), comp); } template void ElfFile::sortShdrs() { /* Translate sh_link mappings to section names, since sorting the sections will invalidate the sh_link fields. */ map linkage; for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) if (rdi(shdrs[i].sh_link) != 0) linkage[getSectionName(shdrs[i])] = getSectionName(shdrs[rdi(shdrs[i].sh_link)]); /* Idem for sh_info on certain sections. */ map info; for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) if (rdi(shdrs[i].sh_info) != 0 && (rdi(shdrs[i].sh_type) == SHT_REL || rdi(shdrs[i].sh_type) == SHT_RELA)) info[getSectionName(shdrs[i])] = getSectionName(shdrs[rdi(shdrs[i].sh_info)]); /* Idem for the index of the .shstrtab section in the ELF header. */ SectionName shstrtabName = getSectionName(shdrs[rdi(hdr->e_shstrndx)]); /* Sort the sections by offset. */ CompShdr comp; comp.elfFile = this; sort(shdrs.begin(), shdrs.end(), comp); /* Restore the sh_link mappings. */ for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) if (rdi(shdrs[i].sh_link) != 0) wri(shdrs[i].sh_link, findSection3(linkage[getSectionName(shdrs[i])])); /* And the st_info mappings. */ for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) if (rdi(shdrs[i].sh_info) != 0 && (rdi(shdrs[i].sh_type) == SHT_REL || rdi(shdrs[i].sh_type) == SHT_RELA)) wri(shdrs[i].sh_info, findSection3(info[getSectionName(shdrs[i])])); /* And the .shstrtab index. */ wri(hdr->e_shstrndx, findSection3(shstrtabName)); } static void writeFile(string fileName, mode_t fileMode) { string fileName2 = fileName + "_patchelf_tmp"; int fd = open(fileName2.c_str(), O_CREAT | O_TRUNC | O_WRONLY, 0700); if (fd == -1) error("open"); if (write(fd, contents, fileSize) != fileSize) error("write"); if (close(fd) != 0) error("close"); if (chmod(fileName2.c_str(), fileMode) != 0) error("chmod"); if (rename(fileName2.c_str(), fileName.c_str()) != 0) error("rename"); } static unsigned int roundUp(unsigned int n, unsigned int m) { return ((n - 1) / m + 1) * m; } template void ElfFile::shiftFile(unsigned int extraPages, Elf_Addr startPage) { /* Move the entire contents of the file `extraPages' pages further. */ unsigned int oldSize = fileSize; unsigned int shift = extraPages * pageSize; growFile(fileSize + extraPages * pageSize); memmove(contents + extraPages * pageSize, contents, oldSize); memset(contents + sizeof(Elf_Ehdr), 0, shift - sizeof(Elf_Ehdr)); /* Adjust the ELF header. */ wri(hdr->e_phoff, sizeof(Elf_Ehdr)); wri(hdr->e_shoff, rdi(hdr->e_shoff) + shift); /* Update the offsets in the section headers. */ for (int i = 1; i < rdi(hdr->e_shnum); ++i) wri(shdrs[i].sh_offset, rdi(shdrs[i].sh_offset) + shift); /* Update the offsets in the program headers. */ for (int i = 0; i < rdi(hdr->e_phnum); ++i) { wri(phdrs[i].p_offset, rdi(phdrs[i].p_offset) + shift); if (rdi(phdrs[i].p_align) != 0 && (rdi(phdrs[i].p_vaddr) - rdi(phdrs[i].p_offset)) % rdi(phdrs[i].p_align) != 0) { debug("changing alignment of program header %d from %d to %d\n", i, rdi(phdrs[i].p_align), pageSize); wri(phdrs[i].p_align, pageSize); } } /* Add a segment that maps the new program/section headers and PT_INTERP segment into memory. Otherwise glibc will choke. */ phdrs.resize(rdi(hdr->e_phnum) + 1); wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; wri(phdr.p_type, PT_LOAD); wri(phdr.p_offset, 0); wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage)); wri(phdr.p_filesz, wri(phdr.p_memsz, shift)); wri(phdr.p_flags, PF_R | PF_W); wri(phdr.p_align, pageSize); } template string ElfFile::getSectionName(const Elf_Shdr & shdr) { return string(sectionNames.c_str() + rdi(shdr.sh_name)); } template Elf_Shdr & ElfFile::findSection(const SectionName & sectionName) { Elf_Shdr * shdr = findSection2(sectionName); if (!shdr) error("cannot find section " + sectionName); return *shdr; } template Elf_Shdr * ElfFile::findSection2(const SectionName & sectionName) { unsigned int i = findSection3(sectionName); return i ? &shdrs[i] : 0; } template unsigned int ElfFile::findSection3(const SectionName & sectionName) { for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) if (getSectionName(shdrs[i]) == sectionName) return i; return 0; } template string & ElfFile::replaceSection(const SectionName & sectionName, unsigned int size) { ReplacedSections::iterator i = replacedSections.find(sectionName); string s; if (i != replacedSections.end()) { s = string(i->second); } else { Elf_Shdr & shdr = findSection(sectionName); s = string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size)); } s.resize(size); replacedSections[sectionName] = s; return replacedSections[sectionName]; } template void ElfFile::writeReplacedSections(Elf_Off & curOff, Elf_Addr startAddr, Elf_Off startOffset) { /* Overwrite the old section contents with 'X's. Do this *before* writing the new section contents (below) to prevent clobbering previously written new section contents. */ for (ReplacedSections::iterator i = replacedSections.begin(); i != replacedSections.end(); ++i) { string sectionName = i->first; Elf_Shdr & shdr = findSection(sectionName); memset(contents + rdi(shdr.sh_offset), 'X', rdi(shdr.sh_size)); } for (ReplacedSections::iterator i = replacedSections.begin(); i != replacedSections.end(); ++i) { string sectionName = i->first; Elf_Shdr & shdr = findSection(sectionName); debug("rewriting section `%s' from offset %d (size %d) to offset %d (size %d)\n", sectionName.c_str(), rdi(shdr.sh_offset), rdi(shdr.sh_size), curOff, i->second.size()); memcpy(contents + curOff, (unsigned char *) i->second.c_str(), i->second.size()); /* Update the section header for this section. */ wri(shdr.sh_offset, curOff); wri(shdr.sh_addr, startAddr + (curOff - startOffset)); wri(shdr.sh_size, i->second.size()); wri(shdr.sh_addralign, sectionAlignment); /* If this is the .interp section, then the PT_INTERP segment must be sync'ed with it. */ if (sectionName == ".interp") { for (unsigned int j = 0; j < phdrs.size(); ++j) if (rdi(phdrs[j].p_type) == PT_INTERP) { phdrs[j].p_offset = shdr.sh_offset; phdrs[j].p_vaddr = phdrs[j].p_paddr = shdr.sh_addr; phdrs[j].p_filesz = phdrs[j].p_memsz = shdr.sh_size; } } /* If this is the .dynamic section, then the PT_DYNAMIC segment must be sync'ed with it. */ if (sectionName == ".dynamic") { for (unsigned int j = 0; j < phdrs.size(); ++j) if (rdi(phdrs[j].p_type) == PT_DYNAMIC) { phdrs[j].p_offset = shdr.sh_offset; phdrs[j].p_vaddr = phdrs[j].p_paddr = shdr.sh_addr; phdrs[j].p_filesz = phdrs[j].p_memsz = shdr.sh_size; } } curOff += roundUp(i->second.size(), sectionAlignment); } replacedSections.clear(); } template void ElfFile::rewriteSectionsLibrary() { /* For dynamic libraries, we just place the replacement sections at the end of the file. They're mapped into memory by a PT_LOAD segment located directly after the last virtual address page of other segments. */ Elf_Addr startPage = 0; for (unsigned int i = 0; i < phdrs.size(); ++i) { Elf_Addr thisPage = roundUp(rdi(phdrs[i].p_vaddr) + rdi(phdrs[i].p_memsz), pageSize); if (thisPage > startPage) startPage = thisPage; } debug("last page is 0x%llx\n", (unsigned long long) startPage); /* Compute the total space needed for the replaced sections and the program headers. */ off_t neededSpace = (phdrs.size() + 1) * sizeof(Elf_Phdr); for (ReplacedSections::iterator i = replacedSections.begin(); i != replacedSections.end(); ++i) neededSpace += roundUp(i->second.size(), sectionAlignment); debug("needed space is %d\n", neededSpace); off_t startOffset = roundUp(fileSize, pageSize); growFile(startOffset + neededSpace); /* Add a segment that maps the replaced sections and program headers into memory. */ phdrs.resize(rdi(hdr->e_phnum) + 1); wri(hdr->e_phnum, rdi(hdr->e_phnum) + 1); Elf_Phdr & phdr = phdrs[rdi(hdr->e_phnum) - 1]; wri(phdr.p_type, PT_LOAD); wri(phdr.p_offset, startOffset); wri(phdr.p_vaddr, wri(phdr.p_paddr, startPage)); wri(phdr.p_filesz, wri(phdr.p_memsz, neededSpace)); wri(phdr.p_flags, PF_R | PF_W); wri(phdr.p_align, pageSize); /* Write out the replaced sections. */ Elf_Off curOff = startOffset + phdrs.size() * sizeof(Elf_Phdr); writeReplacedSections(curOff, startPage, startOffset); assert((off_t) curOff == startOffset + neededSpace); /* Move the program header to the start of the new area. */ wri(hdr->e_phoff, startOffset); rewriteHeaders(startPage); } template void ElfFile::rewriteSectionsExecutable() { /* Sort the sections by offset, otherwise we won't correctly find all the sections before the last replaced section. */ sortShdrs(); /* What is the index of the last replaced section? */ unsigned int lastReplaced = 0; for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) { string sectionName = getSectionName(shdrs[i]); if (replacedSections.find(sectionName) != replacedSections.end()) { debug("using replaced section `%s'\n", sectionName.c_str()); lastReplaced = i; } } assert(lastReplaced != 0); debug("last replaced is %d\n", lastReplaced); /* Try to replace all sections before that, as far as possible. Stop when we reach an irreplacable section (such as one of type SHT_PROGBITS). These cannot be moved in virtual address space since that would invalidate absolute references to them. */ assert(lastReplaced + 1 < shdrs.size()); /* !!! I'm lazy. */ off_t startOffset = rdi(shdrs[lastReplaced + 1].sh_offset); Elf_Addr startAddr = rdi(shdrs[lastReplaced + 1].sh_addr); string prevSection; for (unsigned int i = 1; i <= lastReplaced; ++i) { Elf_Shdr & shdr(shdrs[i]); string sectionName = getSectionName(shdr); debug("looking at section `%s'\n", sectionName.c_str()); /* !!! Why do we stop after a .dynstr section? I can't remember! */ if ((rdi(shdr.sh_type) == SHT_PROGBITS && sectionName != ".interp") || prevSection == ".dynstr") { startOffset = rdi(shdr.sh_offset); startAddr = rdi(shdr.sh_addr); lastReplaced = i - 1; break; } else { if (replacedSections.find(sectionName) == replacedSections.end()) { debug("replacing section `%s' which is in the way\n", sectionName.c_str()); replaceSection(sectionName, rdi(shdr.sh_size)); } } prevSection = sectionName; } debug("first reserved offset/addr is 0x%x/0x%llx\n", startOffset, (unsigned long long) startAddr); assert(startAddr % pageSize == startOffset % pageSize); Elf_Addr firstPage = startAddr - startOffset; debug("first page is 0x%llx\n", (unsigned long long) firstPage); /* Right now we assume that the section headers are somewhere near the end, which appears to be the case most of the time. Therefore they're not accidentally overwritten by the replaced sections. !!! Fix this. */ assert((off_t) rdi(hdr->e_shoff) >= startOffset); /* Compute the total space needed for the replaced sections, the ELF header, and the program headers. */ off_t neededSpace = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr); for (ReplacedSections::iterator i = replacedSections.begin(); i != replacedSections.end(); ++i) neededSpace += roundUp(i->second.size(), sectionAlignment); debug("needed space is %d\n", neededSpace); /* If we need more space at the start of the file, then grow the file by the minimum number of pages and adjust internal offsets. */ if (neededSpace > startOffset) { /* We also need an additional program header, so adjust for that. */ neededSpace += sizeof(Elf_Phdr); debug("needed space is %d\n", neededSpace); unsigned int neededPages = roundUp(neededSpace - startOffset, pageSize) / pageSize; debug("needed pages is %d\n", neededPages); if (neededPages * pageSize > firstPage) error("virtual address space underrun!"); firstPage -= neededPages * pageSize; startOffset += neededPages * pageSize; shiftFile(neededPages, firstPage); } /* Clear out the free space. */ Elf_Off curOff = sizeof(Elf_Ehdr) + phdrs.size() * sizeof(Elf_Phdr); debug("clearing first %d bytes\n", startOffset - curOff); memset(contents + curOff, 0, startOffset - curOff); /* Write out the replaced sections. */ writeReplacedSections(curOff, firstPage, 0); assert((off_t) curOff == neededSpace); rewriteHeaders(firstPage + rdi(hdr->e_phoff)); } template void ElfFile::rewriteSections() { if (replacedSections.empty()) return; for (ReplacedSections::iterator i = replacedSections.begin(); i != replacedSections.end(); ++i) debug("replacing section `%s' with size %d\n", i->first.c_str(), i->second.size()); if (rdi(hdr->e_type) == ET_DYN) { debug("this is a dynamic library\n"); rewriteSectionsLibrary(); } else if (rdi(hdr->e_type) == ET_EXEC) { debug("this is an executable\n"); rewriteSectionsExecutable(); } else error("unknown ELF type"); } template void ElfFile::rewriteHeaders(Elf_Addr phdrAddress) { /* Rewrite the program header table. */ /* If there is a segment for the program header table, update it. (According to the ELF spec, it must be the first entry.) */ if (rdi(phdrs[0].p_type) == PT_PHDR) { phdrs[0].p_offset = hdr->e_phoff; wri(phdrs[0].p_vaddr, wri(phdrs[0].p_paddr, phdrAddress)); wri(phdrs[0].p_filesz, wri(phdrs[0].p_memsz, phdrs.size() * sizeof(Elf_Phdr))); } sortPhdrs(); for (unsigned int i = 0; i < phdrs.size(); ++i) * ((Elf_Phdr *) (contents + rdi(hdr->e_phoff)) + i) = phdrs[i]; /* Rewrite the section header table. For neatness, keep the sections sorted. */ assert(rdi(hdr->e_shnum) == shdrs.size()); sortShdrs(); for (unsigned int i = 1; i < rdi(hdr->e_shnum); ++i) * ((Elf_Shdr *) (contents + rdi(hdr->e_shoff)) + i) = shdrs[i]; /* Update all those nasty virtual addresses in the .dynamic section. Note that not all executables have .dynamic sections (e.g., those produced by klibc's klcc). */ Elf_Shdr * shdrDynamic = findSection2(".dynamic"); if (shdrDynamic) { Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic->sh_offset)); unsigned int d_tag; for ( ; (d_tag = rdi(dyn->d_tag)) != DT_NULL; dyn++) if (d_tag == DT_STRTAB) dyn->d_un.d_ptr = findSection(".dynstr").sh_addr; else if (d_tag == DT_STRSZ) dyn->d_un.d_val = findSection(".dynstr").sh_size; else if (d_tag == DT_SYMTAB) dyn->d_un.d_ptr = findSection(".dynsym").sh_addr; else if (d_tag == DT_HASH) dyn->d_un.d_ptr = findSection(".hash").sh_addr; else if (d_tag == DT_GNU_HASH) dyn->d_un.d_ptr = findSection(".gnu.hash").sh_addr; else if (d_tag == DT_JMPREL) { Elf_Shdr * shdr = findSection2(".rel.plt"); if (!shdr) shdr = findSection2(".rela.plt"); /* 64-bit Linux, x86-64 */ if (!shdr) shdr = findSection2(".rela.IA_64.pltoff"); /* 64-bit Linux, IA-64 */ if (!shdr) error("cannot find section corresponding to DT_JMPREL"); dyn->d_un.d_ptr = shdr->sh_addr; } else if (d_tag == DT_REL) { /* !!! hack! */ Elf_Shdr * shdr = findSection2(".rel.dyn"); /* no idea if this makes sense, but it was needed for some program */ if (!shdr) shdr = findSection2(".rel.got"); if (!shdr) error("cannot find .rel.dyn or .rel.got"); dyn->d_un.d_ptr = shdr->sh_addr; } else if (d_tag == DT_RELA) dyn->d_un.d_ptr = findSection(".rela.dyn").sh_addr; /* PPC Linux */ else if (d_tag == DT_VERNEED) dyn->d_un.d_ptr = findSection(".gnu.version_r").sh_addr; else if (d_tag == DT_VERSYM) dyn->d_un.d_ptr = findSection(".gnu.version").sh_addr; } } static void setSubstr(string & s, unsigned int pos, const string & t) { assert(pos + t.size() <= s.size()); copy(t.begin(), t.end(), s.begin() + pos); } template string ElfFile::getInterpreter() { Elf_Shdr & shdr = findSection(".interp"); return string((char *) contents + rdi(shdr.sh_offset), rdi(shdr.sh_size)); } template void ElfFile::setInterpreter(const string & newInterpreter) { string & section = replaceSection(".interp", newInterpreter.size() + 1); setSubstr(section, 0, newInterpreter + '\0'); changed = true; } static void concatToRPath(string & rpath, const string & path) { if (!rpath.empty()) rpath += ":"; rpath += path; } template void ElfFile::modifyRPath(RPathOp op, string newRPath) { Elf_Shdr & shdrDynamic = findSection(".dynamic"); /* !!! We assume that the virtual address in the DT_STRTAB entry of the dynamic section corresponds to the .dynstr section. */ Elf_Shdr & shdrDynStr = findSection(".dynstr"); char * strTab = (char *) contents + rdi(shdrDynStr.sh_offset); /* Find the DT_STRTAB entry in the dynamic section. */ Elf_Dyn * dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); Elf_Addr strTabAddr = 0; for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) if (rdi(dyn->d_tag) == DT_STRTAB) strTabAddr = rdi(dyn->d_un.d_ptr); if (!strTabAddr) error("strange: no string table"); assert(strTabAddr == rdi(shdrDynStr.sh_addr)); /* Walk through the dynamic section, look for the RPATH/RUNPATH entry. According to the ld.so docs, DT_RPATH is obsolete, we should use DT_RUNPATH. DT_RUNPATH has two advantages: it can be overriden by LD_LIBRARY_PATH, and it's scoped (the DT_RUNPATH for an executable or library doesn't affect the search path for libraries used by it). DT_RPATH is ignored if DT_RUNPATH is present. The binutils `ld' still generates only DT_RPATH, unless you use its `--enable-new-dtag' option, in which case it generates a DT_RPATH and DT_RUNPATH pointing at the same string. */ static vector neededLibs; dyn = (Elf_Dyn *) (contents + rdi(shdrDynamic.sh_offset)); Elf_Dyn * dynRPath = 0, * dynRunPath = 0; char * rpath = 0; for ( ; rdi(dyn->d_tag) != DT_NULL; dyn++) { if (rdi(dyn->d_tag) == DT_RPATH) { dynRPath = dyn; /* Only use DT_RPATH if there is no DT_RUNPATH. */ if (!dynRunPath) rpath = strTab + rdi(dyn->d_un.d_val); } else if (rdi(dyn->d_tag) == DT_RUNPATH) { dynRunPath = dyn; rpath = strTab + rdi(dyn->d_un.d_val); } else if (rdi(dyn->d_tag) == DT_NEEDED) neededLibs.push_back(string(strTab + rdi(dyn->d_un.d_val))); } if (op == rpPrint) { printf("%s\n", rpath ? rpath : ""); return; } if (op == rpShrink && !rpath) { debug("no RPATH to shrink\n"); return; } /* For each directory in the RPATH, check if it contains any needed library. */ if (op == rpShrink) { static vector neededLibFound(neededLibs.size(), false); newRPath = ""; char * pos = rpath; while (*pos) { char * end = strchr(pos, ':'); if (!end) end = strchr(pos, 0); /* Get the name of the directory. */ string dirName(pos, end - pos); if (*end == ':') ++end; pos = end; /* Non-absolute entries are allowed (e.g., the special "$ORIGIN" hack). */ if (dirName[0] != '/') { concatToRPath(newRPath, dirName); continue; } /* For each library that we haven't found yet, see if it exists in this directory. */ bool libFound = false; for (unsigned int j = 0; j < neededLibs.size(); ++j) if (!neededLibFound[j]) { string libName = dirName + "/" + neededLibs[j]; struct stat st; if (stat(libName.c_str(), &st) == 0) { neededLibFound[j] = true; libFound = true; } } if (!libFound) debug("removing directory `%s' from RPATH\n", dirName.c_str()); else concatToRPath(newRPath, dirName); } } if (string(rpath ? rpath : "") == newRPath) return; changed = true; /* Zero out the previous rpath to prevent retained dependencies in Nix. */ unsigned int rpathSize = 0; if (rpath) { rpathSize = strlen(rpath); memset(rpath, 'X', rpathSize); } debug("new rpath is `%s'\n", newRPath.c_str()); if (!forceRPath && dynRPath && !dynRunPath) { /* convert DT_RPATH to DT_RUNPATH */ dynRPath->d_tag = DT_RUNPATH; dynRunPath = dynRPath; dynRPath = 0; } if (forceRPath && dynRPath && dynRunPath) { /* convert DT_RUNPATH to DT_RPATH */ dynRunPath->d_tag = DT_IGNORE; } if (newRPath.size() <= rpathSize) { strcpy(rpath, newRPath.c_str()); return; } /* Grow the .dynstr section to make room for the new RPATH. */ debug("rpath is too long, resizing...\n"); string & newDynStr = replaceSection(".dynstr", rdi(shdrDynStr.sh_size) + newRPath.size() + 1); setSubstr(newDynStr, rdi(shdrDynStr.sh_size), newRPath + '\0'); /* Update the DT_RUNPATH and DT_RPATH entries. */ if (dynRunPath || dynRPath) { if (dynRunPath) dynRunPath->d_un.d_val = shdrDynStr.sh_size; if (dynRPath) dynRPath->d_un.d_val = shdrDynStr.sh_size; } else { /* There is no DT_RUNPATH entry in the .dynamic section, so we have to grow the .dynamic section. */ string & newDynamic = replaceSection(".dynamic", rdi(shdrDynamic.sh_size) + sizeof(Elf_Dyn)); unsigned int idx = 0; for ( ; rdi(((Elf_Dyn *) newDynamic.c_str())[idx].d_tag) != DT_NULL; idx++) ; debug("DT_NULL index is %d\n", idx); /* Shift all entries down by one. */ setSubstr(newDynamic, sizeof(Elf_Dyn), string(newDynamic, 0, sizeof(Elf_Dyn) * (idx + 1))); /* Add the DT_RUNPATH entry at the top. */ Elf_Dyn newDyn; wri(newDyn.d_tag, forceRPath ? DT_RPATH : DT_RUNPATH); newDyn.d_un.d_val = shdrDynStr.sh_size; setSubstr(newDynamic, 0, string((char *) &newDyn, sizeof(Elf_Dyn))); } } static bool printInterpreter = false; static string newInterpreter; static bool shrinkRPath = false; static bool setRPath = false; static bool printRPath = false; static string newRPath; template static void patchElf2(ElfFile & elfFile, mode_t fileMode) { elfFile.parse(); if (printInterpreter) printf("%s\n", elfFile.getInterpreter().c_str()); if (newInterpreter != "") elfFile.setInterpreter(newInterpreter); if (printRPath) elfFile.modifyRPath(elfFile.rpPrint, ""); if (shrinkRPath) elfFile.modifyRPath(elfFile.rpShrink, ""); else if (setRPath) elfFile.modifyRPath(elfFile.rpSet, newRPath); if (elfFile.isChanged()){ elfFile.rewriteSections(); writeFile(fileName, fileMode); } } static void patchElf() { if (!printInterpreter && !printRPath) debug("patching ELF file `%s'\n", fileName.c_str()); mode_t fileMode; readFile(fileName, &fileMode); /* Check the ELF header for basic validity. */ if (fileSize < (off_t) sizeof(Elf32_Ehdr)) error("missing ELF header"); if (memcmp(contents, ELFMAG, SELFMAG) != 0) error("not an ELF executable"); if (contents[EI_CLASS] == ELFCLASS32 && contents[EI_VERSION] == EV_CURRENT) { ElfFile elfFile; patchElf2(elfFile, fileMode); } else if (contents[EI_CLASS] == ELFCLASS64 && contents[EI_VERSION] == EV_CURRENT) { ElfFile elfFile; patchElf2(elfFile, fileMode); } else { error("ELF executable is not 32/64-bit, little/big-endian, version 1"); } } void showHelp(const string & progName) { fprintf(stderr, "syntax: %s\n\ [--set-interpreter FILENAME]\n\ [--print-interpreter]\n\ [--set-rpath RPATH]\n\ [--shrink-rpath]\n\ [--print-rpath]\n\ [--force-rpath]\n\ [--debug]\n\ [--version]\n\ FILENAME\n", progName.c_str()); } int main(int argc, char * * argv) { if (argc <= 1) { showHelp(argv[0]); return 1; } if (getenv("PATCHELF_DEBUG") != 0) debugMode = true; int i; for (i = 1; i < argc; ++i) { string arg(argv[i]); if (arg == "--set-interpreter" || arg == "--interpreter") { if (++i == argc) error("missing argument"); newInterpreter = argv[i]; } else if (arg == "--print-interpreter") { printInterpreter = true; } else if (arg == "--shrink-rpath") { shrinkRPath = true; } else if (arg == "--set-rpath") { if (++i == argc) error("missing argument"); setRPath = true; newRPath = argv[i]; } else if (arg == "--print-rpath") { printRPath = true; } else if (arg == "--force-rpath") { /* Generally we prefer to emit DT_RUNPATH instead of DT_RPATH, as the latter is obsolete. However, there is a slight semantic difference: DT_RUNPATH is "scoped", it only affects the executable or library in question, not its recursive imports. So maybe you really want to force the use of DT_RPATH. That's what this option does. Without it, DT_RPATH (if encountered) is converted to DT_RUNPATH, and if neither is present, a DT_RUNPATH is added. With it, DT_RPATH isn't converted to DT_RUNPATH, and if neither is present, a DT_RPATH is added. */ forceRPath = true; } else if (arg == "--debug") { debugMode = true; } else if (arg == "--help") { showHelp(argv[0]); return 0; } else if (arg == "--version") { printf(PACKAGE_VERSION "\n"); return 0; } else break; } if (i == argc) error("missing filename"); fileName = argv[i]; patchElf(); return 0; } ./Listaller-0.5.8/contrib/patchelf/src/CMakeLists.txt0000664000175000017500000000040412176743563022615 0ustar matthiasmatthias# CMakeLists for Patchelf set(PATCHELF_SOURCES patchelf.cc ) include_directories(${CMAKE_BINARY_DIR} ${CMAKE_BINARY_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR} ) add_executable(patchelf ${PATCHELF_SOURCES}) install(TARGETS patchelf RUNTIME DESTINATION bin ) ./Listaller-0.5.8/contrib/patchelf/BUGS0000664000175000017500000000027712176743563017761 0ustar matthiasmatthiasBug in Linux kernel, in fs/binfmt_elf.c: NEW_AUX_ENT( 3, AT_PHDR, load_addr + exec->e_phoff); This is wrong since the actual virtual address of the program headers may be somewhere else. ./Listaller-0.5.8/MAINTAINERS0000664000175000017500000000005612176743563015540 0ustar matthiasmatthiasMatthias Klumpp E-mail: matthias@tenstral.net ./Listaller-0.5.8/po/0000775000175000017500000000000012176743564014461 5ustar matthiasmatthias./Listaller-0.5.8/po/nl.po0000664000175000017500000003645112176743563015442 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:47+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installtie compleet!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/fr.po0000664000175000017500000004047012176743563015434 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:38+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "Copie des fichiers vers leurs destinations en cours" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "Impossible de créer le fichier '%s' ! Le fichier existe déjà." msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "Impossible d'extraire le fichier ! Erreur : %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Impossible de trouver les fichiers source de IPK !" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Impossible de charger les valeurs du fichier de bureau : %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "Impossible d'ouvrir le fichier IPK ! Erreur : %s" msgid "Could not open desktop file: %s" msgstr "Impossible d'ouvrir le fichier de bureau : %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "Impossible d'écraser le fichier %s, ce fichier existe déjà !" msgid "Could not read IPK control information! Error: %s" msgstr "Impossible de lire l'information de contrôle de IPK ! Erreur : %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "Erreur de l'action de la base de données" msgid "Database action successful" msgstr "Réussite de l'action de la base de données" msgid "Database locked" msgstr "Base de données verrouillée" msgid "Database unlocked" msgstr "Base de données déverrouillée" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "ERREUR : %s" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Fichier %s introuvable ou accès refusé !" msgid "File '%s' doesn't exist." msgstr "Le fichier '%s' n'existe pas." msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installation achevée !" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "Rendre '%s' connu par votre système." msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "Résolution des dépendances de '%s'." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "L'installateur n'a pas été initialisé !" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "La base de données du logiciel est fermée" msgid "Software database message (%d)" msgstr "Message de la base de données du logiciel (%d)" msgid "Software database opened" msgstr "La base de données du logiciel est ouverte" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "Impossible de créer le fichier '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/Makevars0000664000175000017500000000111712176743563016154 0ustar matthiasmatthias# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = listaller # These two variables depend on the location of this directory. subdir = po top_builddir = ../ # These options get passed to xgettext. XGETTEXT_OPTIONS = -L C# -i -c: -s --keyword=_ --keyword=N_ --keyword=__ --no-wrap --no-location \ --package-name="listaller" \ --copyright-holder="Matthias Klumpp" COPYRIGHT_HOLDER = Copyright (c) 2008-2013 Matthias Klumpp MSGID_BUGS_ADDRESS = listaller@freelists.org EXTRA_LOCALE_CATEGORIES = ./Listaller-0.5.8/po/sv.po0000664000175000017500000004006712176743563015457 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2012-04-13 02:33+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "Kunde inte skapa fil '%s'! Filen finns redan." msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "Kunde inte extrahera fil %s! Fel: %s" msgid "Could not extract file! Error: %s" msgstr "Kunde inte extrahera fil! Fel: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "Kunde inte ta bort fil %s!" msgid "Could not uninstall application %s. It is not installed." msgstr "Kunde inte avinstallera applikation %s. Den är inte installerad." msgid "DIRECTORY" msgstr "KATALOG" msgid "Database action '%s' failed: %s" msgstr "Databasåtgärd '%s' misslyckades: %s" msgid "Database action failed" msgstr "Databasåtgärd misslyckades" msgid "Database action successful" msgstr "Databasåtgärd lyckad" msgid "Database locked" msgstr "Databas låst" msgid "Database unlocked" msgstr "Databas upplåst" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "FEL: %s" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "Fel: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Fil %s hittades inte eller åtkomst nekad!" msgid "File '%s' doesn't exist." msgstr "Fil '%s' finns inte." msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installation klar!" msgid "Installation failed!" msgstr "Installation misslyckades!" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Låg säkerhet." msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "1Ingen sökväg angiven!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "Sökväg till applikationens källkod" msgid "Please remove the existing version to continue!" msgstr "Ta bort befintlig version för att fortsätta!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "Borttagning av %s klar." msgid "Removal of %s started." msgstr "Borttagning av %s påbörjad." msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Kör \"%s --help\" för att se hela listan över tillgängliga " "kommandoradsflaggor.\n" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "Visa programmets versionsnummer" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "Kunde inte skapa fil '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/da.po0000664000175000017500000003651212176743563015413 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2009-06-26 00:13+0000\n" "Last-Translator: Jimmy Frydkær Dürr \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installation færdig!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/he.po0000664000175000017500000003647712176743563015435 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:39+0000\n" "Last-Translator: Yaron \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "ההתקנה הושלמה!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/nds.po0000664000175000017500000003651412176743563015615 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2009-12-07 22:05+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: German, Low \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installation komplett!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/id.po0000664000175000017500000003652712176743563015431 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: Lazarus LCL v1.x\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2009-05-06 13:37+0000\n" "Last-Translator: Zaenal Mutaqin \n" "Language-Team: Zaenal Mutaqin \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" "X-Poedit-Country: INDONESIA\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/sq.po0000664000175000017500000003644212176743563015454 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: 0.4.00b\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2011-02-22 22:07+0000\n" "Last-Translator: truri \n" "Language-Team: Albanian\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Instalimi u plotësua!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/POTFILES.skip0000664000175000017500000000000712176743563016572 0ustar matthiasmatthiasbuild/ ./Listaller-0.5.8/po/ru.po0000664000175000017500000006076512176743563015464 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: lazaruside\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:56+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "'%s' не имеет зарегистрированного списка файлов. Возможно, база данных " "программ повреждена." msgid "<<< Press ENTER to continue! >>>" msgstr "<<< Нажмите ВВОД для продолжения! >>>" msgid "A higher version '%s' of this application has already been installed." msgstr "Более высокая версия '%s' этого приложения была установлена." msgid "A lower version '%s' of this application has already been installed." msgstr "Более низкая версия '%s' этого приложения была установлена." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Задействовать подробный режим" msgid "Application ID %s is invalid!" msgstr "Неправильный идентификатор приложения %s!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Построение пакета IPK" msgid "Copying files to their destination" msgstr "Копирование файлов в места назначения" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Невозможно скопировать файл %s в место его назначения. Есть ли у вас права, " "необходимые для выполнения этого действия?\n" "Сообщение об ошибке было \"%s\"." msgid "Could not create file '%s'! File already exists." msgstr "Невозможно создать файл '%s'! Файл уже существует." msgid "Could not create software database!" msgstr "Невозможно создать базу данных программного обеспечения!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "Нет возможности распаковать IPK! Пакет может быть повреждён. Ошибка %s" msgid "Could not extract file %s! Error: %s" msgstr "Нет возможности распаковать файл %s! Ошибка %s" msgid "Could not extract file! Error: %s" msgstr "Невозможно извлечь файл! Ошибка: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Исходные файлы IPK не найдены!" msgid "Could not find application which matches '%s'!\n" msgstr "Невозможно найти приложение соответствующее '%s'!\n" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Нет возможности загрузить файл значений рабочего стола: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "Нет возможности открыть файл IPK! Ошибка %s" msgid "Could not open desktop file: %s" msgstr "Нет возможности открыть файл рабочего стола: %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Нет возможности открыть базу данных софта. Возможно, в данный момент она " "закрыта.\n" "Закройте прочие запущенные установщики, чтобы продолжить." msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" "Невозможно переопределить файл %s! Возможно база данных программ или этот " "пакет повреждены!" msgid "Could not override file %s, this file already exists!" msgstr "Нет возможности перезаписать файл %s: он уже существует!" msgid "Could not read IPK control information! Error: %s" msgstr "Нет возможности прочитать контрольную информацию IPK! Ошибка %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" "Нет возможности прочитать загруженный IPK контейнер! Пакет может быть " "повреждён. Ошибка %s" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" "Нет возможности прочитать архив зависимостей! Архив может быть повреждён. " "Сообщение: %s" msgid "Could not remove file %s!" msgstr "Невозможно удалить файл %s!" msgid "Could not uninstall application %s. It is not installed." msgstr "Невозможно деинсталлировать приложение %s. Оно не установлено." msgid "DIRECTORY" msgstr "КАТАЛОГ" msgid "Database action '%s' failed: %s" msgstr "Действие базы данных '%s' прервано: %s" msgid "Database action failed" msgstr "Действие базы данных прервано" msgid "Database action successful" msgstr "Действие базы данных выполнено удачно" msgid "Database locked" msgstr "База данных заблокирована" msgid "Database unlocked" msgstr "База данных разблокирована" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Описание:" msgid "Details from PackageKit: %s" msgstr "Сведения из PackageKit: %s" msgid "Do you accept these terms and conditions?" msgstr "Вы действительно принимаете условия?" msgid "Do you want to install %s now?" msgstr "Вы действительно хотите установить %s сейчас?" msgid "Do you want to remove %s (%s) now?" msgstr "Вы действительно хотите удалить %s (%s) сейчас?" msgid "ERROR: %s" msgstr "ОШИБКА: %s" msgid "Enable verbose mode" msgstr "Включить информативный режим" msgid "Error while finding files in directory %s: %s" msgstr "Ошибка во время поиска файлов в каталоге %s: %s" msgid "Error: %s\n" msgstr "Ошибка: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Файл %s не найден или у вас нет прав доступа к нему!" msgid "File '%s' doesn't exist." msgstr "Файл '%s' не существует." msgid "File does not exist!" msgstr "Файл не существует!" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "Пакет результатов подписки GPG" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "Пакет IPK не может быть найден!" msgid "IPK package output directory" msgstr "Каталог вывода пакета IPK" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "Установить пакет IPK" msgid "Installation completed!" msgstr "Установка завершена!" msgid "Installation failed!" msgstr "Установка не удалась!" msgid "Installation of %s" msgstr "Установка %s" msgid "Installation of native packages failed with message: %s" msgstr "Установка совместимого пакета не выполнена, с сообщением: %s" msgid "Installing" msgstr "Выполняется установка" msgid "Installing native packages: %s" msgstr "Установка совместимых пакетов: %s" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "Ключ отсутствует" msgid "Key not found!" msgstr "Ключ не найден!" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Лицензия:" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Низкая безопасность" msgid "Making '%s' known to your system." msgstr "Преобразование '%s' в формат, известный вашей системе." msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "Средняя безопасность" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Недоверенные." msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Не указан путь!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "Один ключ был отозван" msgid "One key has expired" msgstr "Истёк срок действия ключа" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "Путь к директории с исходниками Listaller" msgid "Path to the application's source code" msgstr "Путь к исходному коду приложения" msgid "Please remove the existing version to continue!" msgstr "Пожалуйста, удалите имеющуюся версию, чтобы продолжить!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "Показать распознаваемый машиной обычный текст" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "Обновить временные файлы приложений репозитория" msgid "Removal of %s completed successfully!" msgstr "Удаление %s выполнено!" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "Удаление %s завершено." msgid "Removal of %s started." msgstr "Начато удаление %s." msgid "Remove an application installed using Listaller" msgstr "Удалить приложение установленное с помощью Listaller" msgid "Removing" msgstr "Удаление" msgid "Resolving dependencies of '%s'." msgstr "Разрешение зависимостей '%s'." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Запустите '%s --help', чтобы увидеть полный список доступных опций командной " "строки.\n" msgid "Running installation of %s" msgstr "Запуск установки %s" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "Программа установки не инициализирована!" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "Показать версию приложения" msgid "Signature has expired" msgstr "Подпись истекла" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "Подпись полностью достоверна" msgid "Software database closed" msgstr "База данных программ закрыта" msgid "Software database message (%d)" msgstr "Сообщение базы данных программ (%d)" msgid "Software database opened" msgstr "База данных программ открыта" msgid "Software install prefix" msgstr "Префикс установки софта" msgid "Software installation package" msgstr "Пакет установки программ" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" "Некоторые файлы этого пакета не могут быть установлены потому что они не " "были найдены в загрузках.\n" "Этот пакет IPK может быть повреждён, приобретите новую копию!" msgid "Status of this signature is unknown or package is not signed." msgstr "Статус этой подписи неизвестен или пакет не подписан." msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "Это приложение уже было установлено." msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "Попытка совершить действие на недействительном пакете IPK." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Попытка выполнить действие на приватной базе данных ПО, но база данных не " "открыта! (этого не может быть)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" "Попытка совершить действие на общей базе данных софта, но база данных не " "открыта! (быть может, проблема с правами доступа?)" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" "При попытке удалить локальное приложение обнаружена ошибка: AppManager " "запущен в режиме суперпользователя!\n" "Настройте AppManager на режим локального пользователя." msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" "При попытке удалить общее приложение обнаружена ошибка: AppManager запущен " "не в режиме суперпользователя!\n" "Настройте AppManager на режим суперпользователя." msgid "Unable to add a dependency to database: %s" msgstr "Невозможно добавить зависимость в базу данных: %s" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "Невозможно добавить приложение в базу данных: %s" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "Нет возможности создать целевую директорию." msgid "Unable to create file '%s'!" msgstr "Невозможно создать файл '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "Нет возможности распаковать данные IPK!" msgid "Unable to extract IPK metadata!" msgstr "Нет возможности распаковать метаданные IPK!" msgid "Unable to extract data file %s. Message: %s" msgstr "Нет возможности распаковать файл данных %s. Сообщение: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" "Нет возможности распаковать файл данных %s. Этот пакет IPK может быть " "повреждён. Приобретите новую копию." msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "Нет возможности распаковать файл '%s' для зависимости '%s'!" msgid "Unable to extract file. %s" msgstr "Нет возможности распаковать файл. %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "Невозможно извлечь подпись! Возможно, пакет не подписан." msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" "Нет возможности найти соответствующий '%s' для вашей системы/архитектуры." msgid "Unable to find native package for '%s'!" msgstr "Нет возможности найти родные пакеты для '%s'!" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" "Нет возможности найти подходящий пакет для удовлетворения зависимости '%s'!" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "Невозможно открыть базу данных программ для чтения и записи!" msgid "Unable to open software database for reading only!" msgstr "Невозможно открыть базу данных программ только для чтения!" msgid "Unable to read package signature! Message: %s" msgstr "Невозможно прочитать подпись пакета! Сообщение: %s" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Использовать рекурсивный режим" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "ошибка: %s" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/pl.po0000664000175000017500000004620312176743563015440 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: lclstrconsts\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:49+0000\n" "Last-Translator: Antoni Kudelski \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" "X-Poedit-Country: POLAND\n" "X-Poedit-Language: Polish\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "Nowsza wersja '%s' tej aplikacji została już zainstalowana." msgid "A lower version '%s' of this application has already been installed." msgstr "Starsza wersja '%s' tej aplikacji została już zainstalowana." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Aktywuj więcej komunikatów" msgid "Application ID %s is invalid!" msgstr "ID Aplikacji %s jest nieważna!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Zbuduj pakiet IPK" msgid "Copying files to their destination" msgstr "Kopiowanie plików do miejsca przeznaczenia" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "Nie można utworzyć pliku '%s'! Plik już istnieje." msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "Nie można wypakować pliku %s! Błąd: %s" msgid "Could not extract file! Error: %s" msgstr "Nie można wypakować pliku! Błąd: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Nie można znaleźć plików źródłowych IPK!" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "Nie można otworzyć pliku IPK! Błąd %s" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Nie można otworzyć bazy danych oprogramowanie, może jest zablokowana na ten " "czas.\n" "Proszę zamknąć wszystkie inne działające instalacje, aby kontynuować!" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "Nie można nadpisać pliku %s, ten plik już istnieje!" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "Nie można usunąć pliku %s!" msgid "Could not uninstall application %s. It is not installed." msgstr "Nie można odinstalować %s aplikacji. Nie jest zainstalowana." msgid "DIRECTORY" msgstr "KATALOG" msgid "Database action '%s' failed: %s" msgstr "Działanie bazy danych '%s' nie powiodło się: %s" msgid "Database action failed" msgstr "Działanie bazy danych nie powiodło się" msgid "Database action successful" msgstr "Działanie bazy danych powiodło się" msgid "Database locked" msgstr "Baza danych zablokowana" msgid "Database unlocked" msgstr "Baza danych odblokowana" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "BŁĄD: %s" msgid "Enable verbose mode" msgstr "Wyświetla więcej komunikatów" msgid "Error while finding files in directory %s: %s" msgstr "Błąd podczas znajdowania plików w katalogu %s:%s" msgid "Error: %s\n" msgstr "Błąd: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Plik %s nie został znaleziony lub brak dostępu!" msgid "File '%s' doesn't exist." msgstr "Plik '%s' nie istnieje." msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "Nie można odszukać pakietu IPK." msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Instalacja zakończona!" msgid "Installation failed!" msgstr "Instalacja nie powiodła się!" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "Instalacja rodzimych pakietów nie powiodła się z komunikatem: %s" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "Instalacja rodzimych pakietów: %s" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Niski poziom zabezpieczeń." msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "Średni poziom zabezpieczeń." msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Nigdy nie ufaj." msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Nie podano ścieżki!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "Jeden klucz został unieważniony" msgid "One key has expired" msgstr "Jeden klucz wygasł" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "Ścieżka do kodu źródłowego aplikacji" msgid "Please remove the existing version to continue!" msgstr "Proszę usunąć istniejącą wersję, aby kontynuować!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "Zapytanie nie zwróciło wyników. Może nie zdefiniowano wersji?" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "Zapytanie nie zwróciło wyników. Może to dane DOAP są uszkodzone?" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "Usuwanie %s zakończone." msgid "Removal of %s started." msgstr "Usuwanie %s uruchomione." msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "Rozwiązywanie zależności z '%s'." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "Uruchom \"%s --help\" aby wyświetlić pełną listę dostępnych opcji.\n" msgid "Running installation of %s" msgstr "Uruchomienie instalacji %s" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "Ustawienia nie zostały zainicjowane!" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "Wyświetl wersję programu" msgid "Signature has expired" msgstr "Podpis wygasł" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "Podpis jest ważny i akutalny" msgid "Software database closed" msgstr "Baza danych oprogramowania zamknięta" msgid "Software database message (%d)" msgstr "Komunikat bazy danych oprogramowania (%d)" msgid "Software database opened" msgstr "Baza danych oprogramowania otwarta" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "Pakiet instalacyjny oprogramowania" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "Status tego podpisu jest nieznany lub pakiet nie jest podpisany." msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "Ta aplikacja została już zainstalowana." msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "Próba wykonania działania na nieprawidłowym pakiecie IPK." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Próba wykonania działania na prywatnej bazie danych oprogramowania, lecz " "baza danych nie jest otwarta! (to nie powinno się nigdy wydarzyć!)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" "Próba wykonania działania na udostępnionej bazie danych oprogramowania, lecz " "baza danych nie jest otwarta! (może to problem z pozwoleniem?)" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "Zaufanie jest marginalne" msgid "Trust is ultimate." msgstr "Zaufanie jest najwyższe." msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "Nie można dodać zależność do bazy danych: %s" msgid "Unable to add application file list to database: %s" msgstr "Nie można dodać listy plików aplikacji do bazy danych: %s" msgid "Unable to add application to database: %s" msgstr "Nie można dodać aplikacji do bazy danych: %s" msgid "Unable to build package: %s" msgstr "Nie można zbudować pakietu: % s" msgid "Unable to count applications: %s" msgstr "Nie można policzyć aplikacji: %s" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "Nie można utworzyć katalogu docelowego." msgid "Unable to create file '%s'!" msgstr "Nie można utworzyć pliku '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "Nie można wypakować danych IPK!" msgid "Unable to extract IPK metadata!" msgstr "Nie można wypakować metadanych IPK!" msgid "Unable to extract data file %s. Message: %s" msgstr "Nie można wypakować danych pliku %s. Wiadomość: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "Nie można wypakować pliku '%s' dla zależności '%s'!" msgid "Unable to extract file. %s" msgstr "Nie można wypakować pliku. %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "Nie można wypakować podpisu. Być może pakiet nie został podpisany." msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" "Nie można znaleźć poprawnego kandydata do zaspokojenia zależności '%s'!" msgid "Unable to get meta-information list: %s" msgstr "Nie można uzyskać listy meta-informacji: %s" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "Nie można otworzyć bazy danych do zapisu: %s" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "Nie można otworzyć bazy danych oprogramowania dla odczytu & zapisu!" msgid "Unable to open software database for reading only!" msgstr "Nie można otworzyć bazy danych oprogramowania tylko dla odczytu!" msgid "Unable to read package signature! Message: %s" msgstr "Nie można odczytać podpisu paczki! Wiadomość: %s" msgid "Unable to remove application from database: %s" msgstr "Nie można usunąć aplikacji z bazy danych: %s" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "Nie można przeszukać bazy danych aplikacji: %s" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "Nie można zapisać meta informacji! Wiadomość: %s" msgid "Unable to write signature file! Message: %s" msgstr "Nie można zapisać podpisu pliku ! Wiadomość: %s" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "Ważność jest niezdefiniowana" msgid "We don't know a desktop-file for application '%s'!" msgstr "Nie znamy pliku-desktop dla aplikacji '%s'!" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "Plik ZI XML '%s' jest uszkodzony." msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "błąd: %s" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/POTFILES.in0000664000175000017500000000307412176743563016241 0ustar matthiasmatthias[encoding: UTF-8] # List of source files containing translatable strings. # # Listaller library sources src/logging.vala src/config-global.vala src/setup-settings.vala src/status.vala src/utils.vala src/application.vala src/database-internal.vala src/software-db.vala src/software-cache.vala src/key-manager.vala src/gpgex.vala src/signature.vala src/security-info.vala src/doap.vala src/ipk-changelog.vala src/ipk-metafile.vala src/ipk-control.vala src/ipk-filelist.vala src/ipk-package.vala src/ipk-repo.vala src/repo-data.vala src/repo-list.vala src/repo-manager.vala src/varsolver.vala src/varsetter.vala src/manager.vala src/installer.vala src/updater.vala src/components.vala src/component-factory.vala src/dep-manager.vala src/dep-installer.vala src/pkit-tasks.vala src/solvers/abstract-solver.vala src/solvers/basic-solver.vala src/solvers/feed-installer.vala src/solvers/pkit-solver.vala src/solvers/python-solver.vala src/solvers/zfeed-solver.vala src/solvers/zfeed.vala # Listaller tools tools/toolshared.vala tools/reporting.vala tools/console-progress-bar.vala tools/runapp/runapp.vala tools/lipa/lipa.vala tools/lipa/lipa-module.vala tools/lipa/lipa-installer.vala tools/lipa/lipa-manager.vala tools/lipkgen/lipkgen.vala tools/lipkgen/ipkbuilder.vala tools/lipkgen/gpgsign.vala tools/lipkgen/depfind.vala tools/lipkgen/prepare.vala tools/lipkgen/lpkgutils.vala tools/appcompile/appcompile.vala tools/appcompile/autocompiler.vala tools/depscan/depscan-tool.vala tools/depscan/depscan.vala tools/depscan/scan_ldd.vala tools/likey/likey.vala # Mimetypes data/mime/listaller-ipk.xml.in ./Listaller-0.5.8/po/oc.po0000664000175000017500000003653512176743563015435 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2010-04-05 21:23+0000\n" "Last-Translator: Cédric VALMARY (Tot en òc) \n" "Language-Team: Occitan (post 1500) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Installacion acabada !" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/CMakeLists.txt0000664000175000017500000000140712176743563017222 0ustar matthiasmatthias# CMakeLists for Listaller localisation find_program (LC_INTLTOOL_UPDATE intltool-update) mark_as_advanced (LC_INTLTOOL_UPDATE) find_package (Gettext REQUIRED) if (LC_INTLTOOL_UPDATE STREQUAL "") message (FATAL_ERROR "Intltool was not found! Please install it to continue!") endif (LC_INTLTOOL_UPDATE STREQUAL "") set(LPKNAME "listaller") add_custom_target (l10n-update ${LC_INTLTOOL_UPDATE} -p -g "${LPKNAME}" DEPENDS POTFILES.in WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) add_custom_target (l10n-maintain ${LC_INTLTOOL_UPDATE} -m "${LPKNAME}" DEPENDS POTFILES.in WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) file (GLOB _translations ${CMAKE_CURRENT_SOURCE_DIR}/*.po) gettext_create_translations (${LPKNAME}.pot ALL ${_translations} ) ./Listaller-0.5.8/po/cs.po0000664000175000017500000005517712176743563015444 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:30+0000\n" "Last-Translator: Konki \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "'%s' nemá registrován žádný seznam souborů. Databáze softwaru může být " "poškozena." msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "Vyšší verze '%s' této aplikace je již nainstalována." msgid "A lower version '%s' of this application has already been installed." msgstr "Nižší verze '%s' této aplikace je již nainstalována." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Aktivovat podrobný režim" msgid "Application ID %s is invalid!" msgstr "ID aplikace %s je neplatné!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Sestavit balíček IPK" msgid "Copying files to their destination" msgstr "Kopírování souborů do jejich cíle" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Nelze zkopírovat soubor %s do jeho cíle. Máte dostatečná oprávnění k " "provedení této činnosti?\n" "Chybová zpráva byla \"%s\"." msgid "Could not create file '%s'! File already exists." msgstr "Nelze vytvořit soubor '%s'! Již existuje." msgid "Could not create software database!" msgstr "Nelze vytvořit databázi softwaru!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "Nelze extrahovat obsah IPK! Balíček může být poškozen. Chyba: %s" msgid "Could not extract file %s! Error: %s" msgstr "Nelze extrahovat soubor %s! Chyba: %s" msgid "Could not extract file! Error: %s" msgstr "Nelze extrahovat soubor! Chyba: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Nelze najít zdrojové soubory IPK!" msgid "Could not find application which matches '%s'!\n" msgstr "Nelze najít aplikaci odpovídající '%s'!\n" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Nelze načíst hodnoty souboru plochy: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" "Nelze získat instanci PkBackendProxy. Možná, že Listaller-PkPlugin není " "nainstalován nebo je poškozen?" msgid "Could not open IPK file! Error: %s" msgstr "Nelze otevřít soubor IPK! Chyba: %s" msgid "Could not open desktop file: %s" msgstr "Nelze otevřít soubor plochy: %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Nelze otevřít databázi softwaru, možná, že je nyní uzamčena.\n" "Prosím uzavřete všechny ostatní spuštěné instalace pro pokračování!" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" "Nelze přepsat soubor %s! Možná, že je tento balíček nebo databáze softwaru " "poškozena!" msgid "Could not override file %s, this file already exists!" msgstr "Nelze přepsat soubor %s, tento soubor již existuje!" msgid "Could not read IPK control information! Error: %s" msgstr "Nelze přečíst kontrolní informace IPK! Chyba: %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" "Nelze přečíst kontejner obsahu IPK! Balíček může být poškozen. Chyba: %s" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "Nelze přečíst archiv závislostí! Archiv může být poškozen. Zpráva: %s" msgid "Could not remove file %s!" msgstr "Nelze odstranit soubor %s!" msgid "Could not uninstall application %s. It is not installed." msgstr "Nelze odinstalovat aplikaci %s. Není nainstalována." msgid "DIRECTORY" msgstr "ADRESÁŘ" msgid "Database action '%s' failed: %s" msgstr "Činnost databáze '%s' selhala: %s" msgid "Database action failed" msgstr "Činnost databáze selhala" msgid "Database action successful" msgstr "Činnost databáze byla úspěšná" msgid "Database locked" msgstr "Databáze uzamčena" msgid "Database unlocked" msgstr "Databáze odemčena" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Popis:" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "Přijímate tyto podmínky?" msgid "Do you want to install %s now?" msgstr "Chcete nyní %s nainstalovat?" msgid "Do you want to remove %s (%s) now?" msgstr "Chcete nyní %s (%s) odstranit?" msgid "ERROR: %s" msgstr "CHYBA: %s" msgid "Enable verbose mode" msgstr "Povolit podrobný režim" msgid "Error while finding files in directory %s: %s" msgstr "Chyba při hledání souborů v adresáři %s: %s" msgid "Error: %s\n" msgstr "Chyba: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Soubor %s nenalezen, nebo přístup zamítnut!" msgid "File '%s' doesn't exist." msgstr "Soubor %s neexistuje." msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "Podepsat výsledný baliček pomocí GPG" msgid "INSTALLED" msgstr "NAINSTALOVÁNO" msgid "IPK package could not be found!" msgstr "Balíček IPK nemohl být nenalezen!" msgid "IPK package output directory" msgstr "Výstupní adresář balíčku IPK" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "Instalovat balíček IPK" msgid "Installation completed!" msgstr "Instalace dokončena!" msgid "Installation failed!" msgstr "Instalace selhala!" msgid "Installation of %s" msgstr "Instalace %s" msgid "Installation of native packages failed with message: %s" msgstr "Instalace nativních balíčků selhala se zprávou: %s" msgid "Installing" msgstr "Instalace" msgid "Installing native packages: %s" msgstr "Instalování nativních balíčků: %s" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Licence:" msgid "List all installed applications" msgstr "Vypsat všechny nainstalované aplikace" msgid "List installed Listaller applications" msgstr "Vypsat všechny nainstalované aplikace Listaller" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" "Listaller nástroj příkazového řádku: Nezadán žádný příkaz.\n" "Spusťte '%s --help' pro výpis všech dostupných příkazů." msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Nízká bezpečnost." msgid "Making '%s' known to your system." msgstr "Seznamování '%s' s vaším systémem." msgid "Malformed line in file listing: %s" msgstr "Poškozený řádek ve výpisu souborů: %s" msgid "Medium security." msgstr "Střední zabezpečení." msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "Chybějící parametr pro činnost 'install': Nezadán žádný balíček IPK.\n" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" "Chybějící parametr pro činnost 'remove': Nezadáno žádné id aplikace nebo " "název.\n" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Nikdy nevěřit." msgid "No application specified!" msgstr "Nezadána žádná aplikace!" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Nezadána žádná cesta!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" "Nebyla zaregistrována žádná data obsahu archivu! To může být chyba v " "aplikaci. prosím nahlaste tuto chybu!" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" "V adresáři %s nenalezena žádná data DOAP - Nelze otevřít kontrolní soubory." msgid "One key has been revoked" msgstr "Jeden klíč byl zrušen" msgid "One key has expired" msgstr "Jeden klíč vypršel" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" "Přenos PackageKit selhal!\n" "Návratový kód byl: %s" msgid "Path to Listaller package source directory" msgstr "Cesta ke zdrojovému adresáři balíčku Listaller" msgid "Path to the application's source code" msgstr "Cesta ke zdrojovému kódu aplikace" msgid "Please remove the existing version to continue!" msgstr "Pro pokračování prosím odstraňte současnou verzi!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "Vytisknout jednoduchý text čitelný strojem" msgid "Pubkey is missing" msgstr "Pubkey chybí" msgid "Query returned no results. Maybe there's no release defined?" msgstr "Dotaz nevrátil žádné výsledky. Možná není zadána žádná verze?" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "Dotaz nevrátil žádné výsledky. Možná jsou tyto data DOAP poškozená?" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "Odstranění %s úspěšně dokončeno!" msgid "Removal of %s failed!" msgstr "Odstranění %s selhalo!" msgid "Removal of %s finished." msgstr "Odstranění %s dokončneo." msgid "Removal of %s started." msgstr "Odstranění %s spuštěno." msgid "Remove an application installed using Listaller" msgstr "Odstranit nainstalovanou aplikaci pomocí Listaller" msgid "Removing" msgstr "Odstraňování" msgid "Resolving dependencies of '%s'." msgstr "Řešení závislostí '%s'." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Spusťte '%s --help' pro získání úplného přehledu dostupných parametrů " "příkazové řádky.\n" msgid "Running installation of %s" msgstr "Spouštění instalace %s" msgid "Security is:" msgstr "Bezpečnost je:" msgid "Setup has not been initialized!" msgstr "Instalace nebyla zavedena!" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "Zobrazit verzi aplikace" msgid "Signature has expired" msgstr "Podpis vypršel" msgid "Signature is bad" msgstr "Podpis je špatný" msgid "Signature is fully valid" msgstr "Podpis je zcela platný" msgid "Software database closed" msgstr "Databáze softwaru uzavřena" msgid "Software database message (%d)" msgstr "Zpráva databáze softwaru (%d)" msgid "Software database opened" msgstr "Databáze softwaru otevřena" msgid "Software install prefix" msgstr "Místo instalace softwaru" msgid "Software installation package" msgstr "Instalační balíček softwaru" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" "Některé soubory v tomto balíčku nemohly být nainstalovány, protože nebyly " "nalezeny v datech obsahu.\n" "Tento balíček IPK může být poškozen, prosím obstarejte si novou kopii!" msgid "Status of this signature is unknown or package is not signed." msgstr "Stav tohoto podpisu je neznámý nebo balíček není podepsán." msgid "Strip debug infos from files in install-target" msgstr "Odebrat informace pro ladění ze souborů v cíli instalce" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" "Instalátor funguje pouze v operačním systému %s, ale vy používáte '%s'.\n" "Instalace nemůže pokračovat, je nám líto." msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "Tato aplikace již je nainstalována." msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" "Tento balíček nelze nainstalovat na vaší architektuře systému (%s)!\n" "Prosím pořiďte si balíček, který byl sestaven pro váš stroj." msgid "This package could be dangerous!" msgstr "Tento balíček by mohl být nebezpečný!" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "Pokus o přistup k uzamčené databázi! To by se nemělo stát." msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "Pokus o přístup k uzamčené databázi! To by se nemělo dít. Zpráva: %s" msgid "Tried to perform action on invalid IPK package." msgstr "Pokus o provedení činnosti v neplatném balíčku IPK." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Pokus o provedení činnosti na soukromé databázi softwaru, ale databáze není " "otevřena! (to by se nikdy nemělo stát!)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" "Pokus o provedení činnosti na sdílené databázi softwaru, ale databáze není " "otevřena! (možná problém s oprávněním?)" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" "Pokus o zápis do databáze pouze pro čtení! (To by se nikdy nemělo stát)" msgid "Trust is full" msgstr "Důvěra je plná" msgid "Trust is marginal" msgstr "Důvěra je okrajová" msgid "Trust is ultimate." msgstr "Důvěra je konečná." msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" "Pokus o odstranění místní aplikace, ale správce aplikací je v režimu\n" "superuživatele! Nastavování správce do místního režimu." msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" "Pokus o odstranění sdílené aplikace, ale správce aplikací není v režimu " "superuživatele!\n" "Nastavování správce do režimu superuživatele." msgid "Unable to add a dependency to database: %s" msgstr "Nelze přidat závislost do databáze: %s" msgid "Unable to add application file list to database: %s" msgstr "Nelze přidat seznam souborů aplikace do databáze: %s" msgid "Unable to add application to database: %s" msgstr "Nelze přidat aplikaci do databáze: %s" msgid "Unable to build package: %s" msgstr "Nelze sestavit balíček: %s" msgid "Unable to count applications: %s" msgstr "Nelze spočítat aplikace: %s" msgid "Unable to create database config table: %s" msgstr "Nelze vytvořit tabulku nastavení databáze: %s" msgid "Unable to create database tables: %s" msgstr "Nelze vytvořit tabulky databáze: %s" msgid "Unable to create destination directory." msgstr "Nelze vytvořit cílový adresář." msgid "Unable to create file '%s'!" msgstr "Nelze vytvořit soubor '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "Nelze stáhnout kanál %s. Zpráva: %s" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "Nelze extrahovat data IPK!" msgid "Unable to extract IPK metadata!" msgstr "Nelze extrahovat metadata IPK!" msgid "Unable to extract data file %s. Message: %s" msgstr "Nelze extrahovat datový soubor %s. Zpráva: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" "Nelze extrahovat datový soubor %s. Tento balíček IPK mže být poškozen, " "prosím pořiďte si novou kopii." msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "Nelze extrahovat soubor %s pro závislost '%s'!" msgid "Unable to extract file. %s" msgstr "Nelze extrahovat soubor. %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "Nelze extrahovat podpis! Balíček možná není podepsán." msgid "Unable to fetch application by id: %s" msgstr "Nelze získat aplikaci podle id: %s" msgid "Unable to fetch application by name: %s" msgstr "Nelze získat aplikaci podle názvu: %s" msgid "Unable to fetch application file list: %s" msgstr "Nelze získat soubor seznamu aplikaci: %s" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" "Nelze získat shodující se implementaci '%s' pro váš systém/architekturu." msgid "Unable to find native package for '%s'!" msgstr "Nelze najít nativní balíček pro '%s'!" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "Nelze najít platného kandidáta k uspokojení závislosti '%s'!" msgid "Unable to get meta-information list: %s" msgstr "Nelze získat seznam metainformací: %s" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "Nelze otevřít databázi pro zápis: %s" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "Nelze otevřít databáze softwaru pro čtení a zápis!" msgid "Unable to open software database for reading only!" msgstr "Nelze otevřít databáze softwaru pouze pro čtení!" msgid "Unable to read package signature! Message: %s" msgstr "Nelze přečíst podpis balíčku! Zpráva: %s" msgid "Unable to remove application from database: %s" msgstr "Nelze odstranit aplikaci z databáze: %s" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "Nelze hledat v databázi aplikace: %s" msgid "Unable to write application file list! Message: %s" msgstr "Nelze zapsat soubor seznam aplikace! Zpráva: %s" msgid "Unable to write meta information! Message: %s" msgstr "Nelze zapsat meta informace! Zpráva: %s" msgid "Unable to write signature file! Message: %s" msgstr "Nelze zapsat soubor podpisu! Zpráva: %s" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Použít rekurzivní režim" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" "Ověření souboru %s selhalo! Tento soubor IPK mohl být po vytvoření změněn.\n" "Prosím obstarejte si novou kopii a zkuste to znovu." msgid "Validity is undefined" msgstr "Platnost není určena" msgid "We don't know a desktop-file for application '%s'!" msgstr "Pro aplikaci '%s' není známý soubor plochy!" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "Soubor ZI XML '%s' je poškozený." msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "chyba: %s" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "osobní" msgid "shared" msgstr "sdílené" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/listaller.pot0000664000175000017500000004017012176743563017201 0ustar matthiasmatthias# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Matthias Klumpp # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:21+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" msgid "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "Could not copy file %s to its destination. Do you have the necessary rights to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "Could not override file %s! Maybe the software database is damaged or this package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "Framework %s is only available in version %s, while a version %s %s is required. This software can not be installed, please notify the original author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "Module %s is only available in version %s, while a version %s %s is required. This software can not be installed, please notify the original author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "No payload data archive has been registered! This might be a bug in this application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "Package uses custom variable: '%s' - usually this is not intentional, please contact the package author!" msgstr "" msgid "PackageKit backend does not support finding packages by stuff they provide - Installer was unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "PackageKit backend does not support searching for files - Installer was unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "Some files of this package could not be installed, because they were not found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "The installer will only work with the %s operating system, but you use '%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "This package is a delta-package, containing software patches. It is usually distributed via update-services, you can't install it using this tool. Please obtain a non-delta version of this application!" msgstr "" msgid "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "This package was built using spec version '%s', but we need at least '%s' or higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "Tried to perform action on private software database, but the database is not opened! (this should never happen!)" msgstr "" msgid "Tried to perform action on shared software database, but the database is not opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "Trying to remove shared application, but AppManager is not in superuser mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "Unable to extract data file %s. This IPK package might be damaged, please obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "Unable to find a matching implementation of '%s' for your system/architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "Update of application '%s' failed. Maybe the update information is out of date. Please refresh it and try again." msgstr "" msgid "Update of application '%s' failed. Something bad happened. Please install the application again!" msgstr "" msgid "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "Validation of file %s failed! This IPK file might have been modified after creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "You are not allowed to install this package, because it's security level is '%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and try again!" msgstr "" msgid "You are not allowed to update the application '%s'! The security level of the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not compromised!" msgstr "" msgid "You need to agree with the license to install & use the application. Exiting setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/pt_BR.po0000664000175000017500000003735112176743563016037 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2012-05-12 02:02+0000\n" "Last-Translator: Thaynã Moretti \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Gerar pacote IPK" msgid "Copying files to their destination" msgstr "Copiando arquivos para o seu destino" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "Não foi possível criar o arquivo '%s\"! O arquivo já existe." msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" "Não foi possível extrair o IPK. O pacote deve estar corrompido. Erro: %s" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "Não foi possível extrair o arquivo! Erro: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Não foi possível achar os arquivos de origem do IPK!" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "Não foi possível abrir o IPK! Erro: %s" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "Não foi possível sobrescrever o arquivo %s, o arquivo já existe!" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "DIRETÓRIO" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Instalação concluída!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/de.po0000664000175000017500000005505312176743563015420 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:36+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "Für '%s' ist keine Dateiliste registriert. Die Software-Datenbank ist " "eventuell beschädigt." msgid "<<< Press ENTER to continue! >>>" msgstr "<<< EINGABE drücken zum Fortfahren! >>>" msgid "A higher version '%s' of this application has already been installed." msgstr "Die neuere Version '%s' dieser Anwendung ist bereits installiert." msgid "A lower version '%s' of this application has already been installed." msgstr "Die ältere Version '%s' dieser Anwendung ist bereits installiert." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Detailierten Modus einschalten" msgid "Application ID %s is invalid!" msgstr "Anwendungs-ID %s ist ungültig!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "IPK Paket bauen" msgid "Copying files to their destination" msgstr "Kopiere Dateien an ihren Zielort." msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Konnte Datei %s nicht an ihren Zielort kopieren. Besitzen Sie die nötigen " "Rechte, um diese Aktion auszuführen?\n" "Fehlermeldung war \"%s\"." msgid "Could not create file '%s'! File already exists." msgstr "Konnte Datei '%s' nicht erstellen! Datei existiert bereits." msgid "Could not create software database!" msgstr "Konnte keine Software-Datenbank erstellen!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" "Konnte Inhalt des IPK Paketes nicht extrahieren! Das Paket könnte beschädigt " "sein. Fehler: %s" msgid "Could not extract file %s! Error: %s" msgstr "Konnte Datei %s nicht entpacken! Fehler: %s" msgid "Could not extract file! Error: %s" msgstr "Konnte Datei nicht extrahieren! Fehler: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Konnte IPK Quelldateien nicht finden!" msgid "Could not find application which matches '%s'!\n" msgstr "Konnte keine Anwendung finden, zu welcher '%s' passt!\n" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Konnte Werte aus Desktop-Datei nicht laden: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" "Konnte keine PkBackendProxy-Instanz bekommen. Vielleicht ist das Listaller-" "PkPlugin nicht installiert oder defekt?" msgid "Could not open IPK file! Error: %s" msgstr "Konnte IPK-Datei nicht öffnen! Fehler: %s" msgid "Could not open desktop file: %s" msgstr "Konnte Desktop-Datei nicht öffnen: %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Kontte Software-Datenbank nicht öffnen, sie ist eventuell gesperrt.\n" "Bitte schließen Sie alle anderen laufenden Installationen, um fortzufahren." msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" "Konnte Datei %s nicht überschreiben! Vielleicht ist die Softwaredatenbank " "oder dieses Paket defekt." msgid "Could not override file %s, this file already exists!" msgstr "Konnte Datei %s nicht überschreiben, da sie bereits existiert!" msgid "Could not read IPK control information! Error: %s" msgstr "Konnte IPK Kontrollinformation nicht lesen! Fehler: %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" "Konnte IPK Inhalt-Container nicht laden! Das Paket könnte beschädigt sein. " "Fehler: %s" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" "Konnte Archiv mit Abhängigkeit nicht entpackagen. Das Archiv könnte " "beschädigt sein. Nachricht: %s" msgid "Could not remove file %s!" msgstr "Konnte Datei '%s' nicht entfernen." msgid "Could not uninstall application %s. It is not installed." msgstr "Konnte die Anwendung %s nicht entfernen: Sie ist nicht installiert." msgid "DIRECTORY" msgstr "VERZEICHNIS" msgid "Database action '%s' failed: %s" msgstr "Datenbankaktion '%s' ist fehlgeschlagen: %s" msgid "Database action failed" msgstr "Datenbankaktion fehlgeschlagen." msgid "Database action successful" msgstr "Datenbankaktion erfolgreich." msgid "Database locked" msgstr "Datenbank gesperrt" msgid "Database unlocked" msgstr "Datenbank entsperrt" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Beschreibung:" msgid "Details from PackageKit: %s" msgstr "Details von PackageKit: %s" msgid "Do you accept these terms and conditions?" msgstr "Akzeptieren Sie diese Bedingungen?" msgid "Do you want to install %s now?" msgstr "Möchsten Sie %s jetzt installieren?" msgid "Do you want to remove %s (%s) now?" msgstr "Möchten Sie %s (%s) jetzt entfernen?" msgid "ERROR: %s" msgstr "FEHLER: %s" msgid "Enable verbose mode" msgstr "Ausführliche Meldungen aktivieren" msgid "Error while finding files in directory %s: %s" msgstr "Fehler beim Suchen von Dateien im Ordner %s: %s" msgid "Error: %s\n" msgstr "Fehler: %s\n" msgid "FPR" msgstr "FPR" msgid "Failed to import key with fingerprint '%s'." msgstr "Import von Schlüssel mit Fingerabdruck '%s' fehlgeschlagen." msgid "File %s not found or permission denied!" msgstr "Datei %s nicht gefunden oder Zugriff verweigert!" msgid "File '%s' doesn't exist." msgstr "Datei '%s' existiert nicht." msgid "File does not exist!" msgstr "Datei ist nicht vorhanden!" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "Das fertige Paket mit GPG signieren." msgid "INSTALLED" msgstr "INSTALLIERT" msgid "IPK package could not be found!" msgstr "IPK Paket konnte nicht gefunden werden" msgid "IPK package output directory" msgstr "IPK Paket Ausgabeverzeichnis" msgid "Import key with fingerprint FPR" msgstr "Schlüssel mit Fingerabdruck FPR importieren" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "Installiere ein IPK-Paket" msgid "Installation completed!" msgstr "Installation abgeschlossen!" msgid "Installation failed!" msgstr "Installation fehlgeschlagen!" msgid "Installation of %s" msgstr "Installation von %s" msgid "Installation of native packages failed with message: %s" msgstr "" "Installation eines nativen Paketes ist mit folgender Nachricht " "fehlgeschlagen: %s" msgid "Installing" msgstr "Installieren..." msgid "Installing native packages: %s" msgstr "Installiere native Pakete: %s" msgid "Key '%s' imported successfully!" msgstr "Schlüssel '%s' erfolgreich importiert!" msgid "Key is missing" msgstr "Schlüssel fehlt" msgid "Key not found!" msgstr "Schlüssel nicht gefunden!" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Lizenz:" msgid "List all installed applications" msgstr "Alle installierten Anwendungen auflisten" msgid "List installed Listaller applications" msgstr "Alle installierten Listaller-Anwendungen auflisten" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" "Listaller Kommandozeilenwekzeug: Kein Kommando angegeben!\n" "Führen Sie '%s --help' aus, um eine Liste verfügbarer Kommandos anzuzeigen." msgid "Lookup key which matches PATTERN" msgstr "Schlüssel nachschlagen, der auf MUSTER passt." msgid "Low security." msgstr "Geringe Sicherheit" msgid "Making '%s' known to your system." msgstr "Mache '%s' mit ihrem System bekannt." msgid "Malformed line in file listing: %s" msgstr "Falsch formatierte Zeile in Dateiliste: %s" msgid "Medium security." msgstr "Mittlere Sicherheit" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "Fehlender Parameter für 'install' Aktion: Kein IPK-Paket angegeben!\n" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" "Fehlender Parameter für 'remove' Aktion: Keine Anwendungs-ID oder Name " "angegeben!\n" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Nicht vertrauenswürdig." msgid "No application specified!" msgstr "Keine Anwendung definiert!" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Kein Pfad angegeben!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" "Es wurde kein Datenarchiv registriert! Das ist vermutlich ein Fehler in der " "Anwendung, bitte melden Sie diesen Vorfall!" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" "Keine gültigen DOAP Daten im Verzeichnis %s gefunden! - Die Kontrolldateien " "können nicht geöffnet werden." msgid "One key has been revoked" msgstr "Ein Schlüssel wurde zurückgerufen." msgid "One key has expired" msgstr "Ein Schlüssel ist abgelaufen" msgid "PATTERN" msgstr "MUSTER" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" "PackageKit Transaktion fehlgeschlagen!\n" "Nachricht war: %s" msgid "Path to Listaller package source directory" msgstr "Pfad zu dem Quellverzeichnis des Listaller-Paketes" msgid "Path to the application's source code" msgstr "Pfad zum Quellcode der Anwendung" msgid "Please remove the existing version to continue!" msgstr "Bitte entfernen Sie die existierende version um fortzufahren!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "Maschinenlesbaren, einfachen text ausgeben" msgid "Pubkey is missing" msgstr "Öffentlicher Schlüssel fehlt" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" "Abfrage hat keine Ergebnisse erbracht. Vielleicht ist keine Veröffentlichung " "definiert?" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" "Die Anfrage hat keine Treffer. Vielleicht sind die DOAP-Daten beschädigt?" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "Das Entfernen von %s wurde erfolgreich abgeschlossen!" msgid "Removal of %s failed!" msgstr "Entfernen von %s fehlgeschlagen!" msgid "Removal of %s finished." msgstr "Entfernen von %s abgeschlossen." msgid "Removal of %s started." msgstr "Entfernen von %s begonnen." msgid "Remove an application installed using Listaller" msgstr "Eine mit Listaller installierte Anwendung entfernen." msgid "Removing" msgstr "Entfernen ..." msgid "Resolving dependencies of '%s'." msgstr "Löse Abhängigkeiten von '%s' auf." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Mit »%s --help« können Sie eine vollständige Liste verfügbarer " "Befehlszeilenoptionen anzeigen.\n" msgid "Running installation of %s" msgstr "Führe installation von %s aus." msgid "Security is:" msgstr "Sicherheits-Level:" msgid "Setup has not been initialized!" msgstr "Setup wurde nicht initialisiert!" msgid "Should be safe to use." msgstr "Sollte gefahrlos verwendet werden können." msgid "Show the application's version" msgstr "Die Version der Anwendung anzeigen" msgid "Signature has expired" msgstr "Signatur ist abgelaufen." msgid "Signature is bad" msgstr "Signatur ist schlecht" msgid "Signature is fully valid" msgstr "Signatur ist voll gültig." msgid "Software database closed" msgstr "Softwaredatenbank geschlossen." msgid "Software database message (%d)" msgstr "Softwaredatenbank Nachricht (%d)" msgid "Software database opened" msgstr "Softwaredatenbank geöffnet" msgid "Software install prefix" msgstr "Software-Installationspräfix" msgid "Software installation package" msgstr "Software Installationspaket" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" "Einige Dateien dieses Paketes konnten nicht installiert werden, da sie nicht " "in der Paketladung gefunden wurden.\n" "Dieses IPK Paket ist vermutlich beschädigt, bitte holen Sie sich eine neue " "Kopie!" msgid "Status of this signature is unknown or package is not signed." msgstr "" "Status dieser Signatur ist unbekannt, oder das Paket ist nicht signiert." msgid "Strip debug infos from files in install-target" msgstr "Debug-infos von Dateien im Installationsziel entfernen" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" "Der Installer funktioniert nur mit dem %s Betriebssystem, Sie benutzen " "jedoch '%s'.\n" "Die Installation kann nicht fortgesetzt werden, entschuldigung." msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "Diese Anwendung ist bereits installiert" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" "Dieses Paket kann auf ihrer Systemarchitektur (%s) nicht installiert " "werden!\n" "Bitte holen Sie sich ein Paket welches für Ihr System gebaut wurde." msgid "This package could be dangerous!" msgstr "Dieses Paket könnte gefährlich sein!" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" "Versuch, auf gesperrte Datenbank zuzugreifen! Das sollte nicht passieren." msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" "Versuch, auf gesperrte Datenbank zuzugreifen! Das sollte nicht passieren. " "Nachricht: %s" msgid "Tried to perform action on invalid IPK package." msgstr "Versuch, Aktion auf ungültigem IPK-Paket auszuführen." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Versuch, eine Aktion auf der privaten datenbank auszuführen, die Datenbank " "ist jedoch nicht geöffnet! (das sollte nie passieren)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "Volles Vertrauen" msgid "Trust is marginal" msgstr "Vertrauen ist gering" msgid "Trust is ultimate." msgstr "Vertrauen ist ultimativ" msgid "Trust level is unknown" msgstr "Vertrauensstufe ist unbekannt" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" "Versuche, eine lokale Anwendung zu entfernen, aber der Anwendungsmanager " "wird im SuperUser-Modus ausgeführt!\n" "Schalte nun den Anwendungsmanager in den lokalen Modus um." msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "Unfähig, eine Abhängigkeit zur Datenbank hinzuzufügen:%s" msgid "Unable to add application file list to database: %s" msgstr "Konnte dateiliste der Anwendung nicht zur Datenbank hinzufügen: %s" msgid "Unable to add application to database: %s" msgstr "Diese Anwendung konnte nicht zur Datenbank hinzugefügt werden: %s" msgid "Unable to build package: %s" msgstr "Konnte Paket nicht bauen: %s" msgid "Unable to count applications: %s" msgstr "Konnte Anwendungen nicht zählen: %s" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "Konnte Datenbanktabellen nicht erstellen: %s" msgid "Unable to create destination directory." msgstr "Konnte Zielverzeichnis nicht erstellen" msgid "Unable to create file '%s'!" msgstr "Diese Datei konnte nicht erzeugt werden: %s" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "Konnte IPK Daten nicht extrahieren!" msgid "Unable to extract IPK metadata!" msgstr "Konnte IPK metadaten nicht extrahieren!" msgid "Unable to extract data file %s. Message: %s" msgstr "Diese Datei konnte nicht entpackt werden: %s Fehlermeldung: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "Diese Datei konnte nicht entpackt werden: %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" "Dieses Programm konnte anhand seiner Identifikationsnummer nicht gefunden " "werden: %s" msgid "Unable to fetch application by name: %s" msgstr "Dieses Programm konnte anhand seines Namens nicht gefunden werden: %s" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "Konnte kein natives Paket für '%s' finden." msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "Konnte Anwendungsdatenbank nicht durchsuchen: %s" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "Unbekannt" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Rekursiven Modus benutzen" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "Gültigkeit ist nicht definiert!" msgid "We don't know a desktop-file for application '%s'!" msgstr "Die Desktop-Datei für die Anwendung '%s' ist unbekannt!" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "Sie müssen Root sein um Listallers Schlüsseldatenbank zu bearbeiten!" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "[Keine]" msgid "bad" msgstr "schlecht" msgid "dangerous" msgstr "gefährlich" msgid "error: %s" msgstr "Fehler: %s" msgid "high" msgstr "hoch" msgid "low" msgstr "niedrig" msgid "medium" msgstr "mittel" msgid "n/a" msgstr "n/v" msgid "no" msgstr "nein" msgid "okay" msgstr "in Ordnung" msgid "personal" msgstr "persönlich" msgid "shared" msgstr "gemeinsam" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "ja" ./Listaller-0.5.8/po/es.po0000664000175000017500000003745312176743563015443 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 20:37+0000\n" "Last-Translator: Monkey \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "<<< ¡Presione ENTER para continuar! >>>" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Activar el modo detallado" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "No se pudo eliminar el fichero %s" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "DIRECTORIO" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "Base de datos bloqueada" msgid "Database unlocked" msgstr "Base de datos desbloqueada" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Descripción:" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "¿Acepta los términos y condiciones?" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "ERROR: %s" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "Error: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "El fichero '%s' no existe." msgid "File does not exist!" msgstr "¡El archivo no existe!" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "INSTALADO" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "¡Instalación completada!" msgid "Installation failed!" msgstr "¡Instalación fallida!" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "Instalando" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Licencia:" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Seguridad baja." msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "Seguridad Intermedia." msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "PATRÓN" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "Eliminando" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "Desconocido" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Utilizar modo recursivo" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "[Ninguno]" msgid "bad" msgstr "malo" msgid "dangerous" msgstr "peligroso" msgid "error: %s" msgstr "error: %s" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "medio" msgid "n/a" msgstr "No aplica" msgid "no" msgstr "no" msgid "okay" msgstr "Bien" msgid "personal" msgstr "personal" msgid "shared" msgstr "compartido" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "sí" ./Listaller-0.5.8/po/ast.po0000664000175000017500000003646312176743563015623 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2009-12-07 23:19+0000\n" "Last-Translator: costales \n" "Language-Team: Asturian \n" "Language: ast\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/ca.po0000664000175000017500000003642512176743563015415 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2010-04-05 21:07+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/sk.po0000664000175000017500000003644012176743563015444 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: lclstrconsts\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2009-05-06 13:38+0000\n" "Last-Translator: Slavko \n" "Language-Team: Slovenský \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/fi.po0000664000175000017500000005625012176743563015426 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2012-07-27 11:15+0000\n" "Last-Translator: Beluga \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "'%s' ei ole rekisteröity tiedostoluetteloa. Ohjelmistotietokanta saattaa " "olla rikki." msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "Tästä sovelluksesta on jo asennettuna uudempi versio '%s'." msgid "A lower version '%s' of this application has already been installed." msgstr "Tästä sovelluksesta on jo asennettuna vanhempi versio '%s'." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Ota käyttöön selväkielinen tila" msgid "Application ID %s is invalid!" msgstr "Sovelluksen ID %s on virheellinen!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Tee IPK-paketti" msgid "Copying files to their destination" msgstr "Tiedostoja kopioidaan kohteeseen" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Tiedoston %s kopioiminen haluttuun kohteeseen epäonnistui. Onko sinulla " "tarvittavat oikeuden toiminnon suorittamiseen\n" "Virheviesti oli \"%s\"" msgid "Could not create file '%s'! File already exists." msgstr "Tiedoston '%s' luominen epäonnistui! Tiedosto on jo olemassa." msgid "Could not create software database!" msgstr "Ohjelmistotietokannan luominen epäonnistui!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" "IPK:n purkaminen epäonnistui! Paketti saattaa olla vioittunut. Virhe: %s" msgid "Could not extract file %s! Error: %s" msgstr "Tiedoston %s purkaminen epäonnistui! Virhe: %s" msgid "Could not extract file! Error: %s" msgstr "Tiedostoa ei voitu purkaa! Virhe: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "IPK:n lähdetiedostoja ei löytynyt!" msgid "Could not find application which matches '%s'!\n" msgstr "Ei löytynyt sovellusta, joka täsmää '%s' kanssa!\n" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Työpöytätiedostojen arvojen lataaminen epäonnistui: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" "PkBackendProxy-ilmentymän käyttöönotto epäonnistui. Listaller-PkPlugin " "saattaa olla rikki tai sitä ei ole asennettu." msgid "Could not open IPK file! Error: %s" msgstr "IPK-tiedoston avaaminen epäonnistui! Virhe: %s" msgid "Could not open desktop file: %s" msgstr "Työpöytätiedoston avaaminen epäonnistui: %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Ohjelmistotietokannan avaaminen epäonnistui, ehkä se on lukittu.\n" "Ole hyvä ja sulje kaikki muut käynnissä olevat asennukset jatkaaksesi!" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" "Tiedoston %s ohittaminen epäonnistui! Ohjelmistotietokanta saattaa olla " "vioittunut tai tämä paketti on rikki!" msgid "Could not override file %s, this file already exists!" msgstr "Tiedoston %s ohittaminen epäonnistui, tiedosto on jo olemassa!" msgid "Could not read IPK control information! Error: %s" msgstr "IPK:n kontrollitietoja ei voitu lukea! Virhe %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" "IPK-paketin lukeminen epäonnistui! Paketti saattaa olla vioittunut. Virhe: %s" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" "Riippuvuuspakettia ei voitu lukea! Paketti saattaa olla vioittunut. Viesti: " "%s" msgid "Could not remove file %s!" msgstr "Tiedoston %s poistaminen epäonnistui!" msgid "Could not uninstall application %s. It is not installed." msgstr "" "Sovelluksen %s asennuksen poistaminen epäonnistui. Sitä ei ole asennettu." msgid "DIRECTORY" msgstr "HAKEMISTO" msgid "Database action '%s' failed: %s" msgstr "Tietokantatoiminto '%s' epäonnistui: %s" msgid "Database action failed" msgstr "Tietokantatoiminto epäonnistui" msgid "Database action successful" msgstr "Tietokantatoiminto onnistui" msgid "Database locked" msgstr "Tietokanta lukittu" msgid "Database unlocked" msgstr "Tietokannan lukitus poistettu" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Kuvaus:" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "Hyväksytkö nämä ehdot?" msgid "Do you want to install %s now?" msgstr "Asennetaanko %s nyt?" msgid "Do you want to remove %s (%s) now?" msgstr "Poistetaanko %s (%s) nyt?" msgid "ERROR: %s" msgstr "VIRHE: %s" msgid "Enable verbose mode" msgstr "Ota käyttöön selväkielinen tila" msgid "Error while finding files in directory %s: %s" msgstr "Virhe etsittäessä tiedostoja hakemistossa %s: %s" msgid "Error: %s\n" msgstr "Virhe: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Tiedostoa %s ei löytynyt tai käyttö evätty!" msgid "File '%s' doesn't exist." msgstr "Tiedostoa '%s' ei ole." msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "Allekirjoita paketti käyttämällä GPG:tä." msgid "INSTALLED" msgstr "ASENNETTU" msgid "IPK package could not be found!" msgstr "IPK-pakettia ei löytynyt!" msgid "IPK package output directory" msgstr "Hakemisto luodulle IPK-paketille." msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "Asenna IPK-paketti" msgid "Installation completed!" msgstr "Asennus valmis!" msgid "Installation failed!" msgstr "Asennus epäonnistui!" msgid "Installation of %s" msgstr "%s asennus" msgid "Installation of native packages failed with message: %s" msgstr "Paikallisten pakettien asennus epäonnistui virheilmoituksella %s" msgid "Installing" msgstr "Asennetaan" msgid "Installing native packages: %s" msgstr "Asennetaan paikallisia paketteja: %s" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Lisenssi:" msgid "List all installed applications" msgstr "Listaa kaikki asennetut sovellukset" msgid "List installed Listaller applications" msgstr "Listaa kaikki asennetut Listaller-sovellukset" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" "Listallerin komentorivityökalu: Komentoa ei määritelty\n" "Suorittamalla komennon ”%s --help” näet luettelon käytettävissä olevista " "valitsimista." msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "Matala tietoturva." msgid "Making '%s' known to your system." msgstr "Annetaan '%s' järjestelmän tietoon." msgid "Malformed line in file listing: %s" msgstr "Epämuotoinen rivi tiedostolistauksessa: %s" msgid "Medium security." msgstr "Keskitason tietoturva." msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "Puuttuva parametri toiminnolle 'asenna': IPK-pakettia ei määritelty.\n" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" "Puuttuva parametri toiminnolle 'poista': Sovelluksen tunnistetta tai nimeä " "ei määritelty.\n" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Älä luota koskaan." msgid "No application specified!" msgstr "Sovellusta ei määritelty!" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Hakemistopolku puuttuu!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" "Datapakettia ei ole rekisteröity! Tämä saattaa johtua bugista sovelluksessa, " "ole hyvä ja luo ongelmaraportti!" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" "Hakemistosta %s ei löytynyt kunnollista DOAP-dataa - kontrollitiedostoja ei " "voida avata." msgid "One key has been revoked" msgstr "Yksi avain on peruttu" msgid "One key has expired" msgstr "Yksi avain on vanhentunut" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" "PackageKitin toimitus epäonnistui!\n" "Poistumisviesti oli: %s" msgid "Path to Listaller package source directory" msgstr "Polku Listaller-paketin lähdehakemistoon" msgid "Path to the application's source code" msgstr "Hakemistopolku sovelluksen lähdekoodiin" msgid "Please remove the existing version to continue!" msgstr "Ole hyvä ja poista olemassaoleva versio jatkaaksesi!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "Tulosta konekielistä yksinkertaista tekstiä" msgid "Pubkey is missing" msgstr "Pubkey puuttuu" msgid "Query returned no results. Maybe there's no release defined?" msgstr "Haulla ei löytynyt mitään. Ehkä julkaisua ei ole määritelty?" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "Haulla ei löytynyt mitään. Ehkä DOAP-data on rikki?" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "Poistettiin %s onnistuneesti!" msgid "Removal of %s failed!" msgstr "%s poistaminen epäonnistui!" msgid "Removal of %s finished." msgstr "%s poistaminen suoritettu loppuun." msgid "Removal of %s started." msgstr "%s poistaminen aloitettu." msgid "Remove an application installed using Listaller" msgstr "Poista Listallerilla asennettu sovellus" msgid "Removing" msgstr "Poistetaan" msgid "Resolving dependencies of '%s'." msgstr "Ratkaistaan '%s' riippuvuuksia." msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Suorittamalla komennon ”%s --help” näet luettelon käytettävissä olevista " "valitsimista.\n" msgid "Running installation of %s" msgstr "Suoritetaan %s asennusta" msgid "Security is:" msgstr "Tietoturva on:" msgid "Setup has not been initialized!" msgstr "Asennusta ei ole aloitettu!" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "Näytä sovelluksen versio" msgid "Signature has expired" msgstr "Allekirjoitus on vanhentunut" msgid "Signature is bad" msgstr "Allekirjoitus on vääränlainen" msgid "Signature is fully valid" msgstr "Allekirjoitus on oikeanlainen" msgid "Software database closed" msgstr "Ohjelmistotietokanta suljettu" msgid "Software database message (%d)" msgstr "Ohjelmistotietokannan viesti (%d)" msgid "Software database opened" msgstr "Ohjelmistotietokanta avattu" msgid "Software install prefix" msgstr "Ohjelmistoasennuksen etuliite" msgid "Software installation package" msgstr "Ohjelmistoasennuksen paketti" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" "Joitakin tiedostoja tästä paketista ei voitu asentaa, koska niitä ole " "pakettidatassa.\n" "IPK-paketti saattaa olla vioittunut, ole hyvä ja hae uusi kopio!" msgid "Status of this signature is unknown or package is not signed." msgstr "" "Tämän allekirjoituksen tilaa ei tunneta tai pakettia ei ole allekirjoitettu." msgid "Strip debug infos from files in install-target" msgstr "Riisu debug-tiedot install-targetin tiedostoista" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" "Asennus onnistuu ainoastaan %s-käyttöjärjestelmässä, mutta käytössäsi on " "'%s'.\n" "Asennusta ei ikävä kyllä voida jatkaa." msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "Sovellus on jo asennettu" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" "Tätä pakettia ei voitu asentaa järjestelmääsi (%s)!\n" "Ole hyvä ja hae paketti, joka on tarkoitettu käytössäsi olevalle " "järjestelmälle." msgid "This package could be dangerous!" msgstr "Tämä paketti saattaa olla vaarallinen!" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "Yritettiin pääsyä lukittuun tietokantaan! Näin ei pitäisi tapahtua." msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" "Yritettiin pääsyä lukittuun tietokantaan! Näin ei pitäisi tapahtua. Viesti: " "%s" msgid "Tried to perform action on invalid IPK package." msgstr "Yritettiin suorittaa toiminto virheelliselle IPK-paketille." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Yritettiin suoritaa toiminto yksityiselle ohjelmistotietokannalle, mutta " "tietokantaa ei avattu! (Näin ei tulisi ikinä tapahtua!)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" "Yritettiin suoritaa toiminto jaetulle ohjelmistotietokannalle, mutta " "tietokantaa ei avattu! (Kenties käyttöoikeusongelma?)" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" "Yritettiin kirjoittaa Vain luku -tietokantaan! (Näin ei tulisi ikinä " "tapahtua)" msgid "Trust is full" msgstr "Täysi luottamus" msgid "Trust is marginal" msgstr "Vähäpätöinen luottamus" msgid "Trust is ultimate." msgstr "Äärimmäinen luottamus" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" "Yritetään poistaa paikallista sovellusta, mutta AppManager on superuser-" "tilassa!\n" "Asetetaan AppManager paikalliseen tilaan." msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" "Yritetään poistaa jaettua sovellusta, mutta AppManager ei ole superuser-" "tilassa!\n" "Asetetaan AppManager superuser-tilaan." msgid "Unable to add a dependency to database: %s" msgstr "Riippuvuuden lisääminen tietokantaan %s epäonnistui." msgid "Unable to add application file list to database: %s" msgstr "Sovelluksen tiedostoluettelon lisääminen tietokantaan %s epäonnistui." msgid "Unable to add application to database: %s" msgstr "Sovelluksen lisääminen tietokantaan %s epäonnistui." msgid "Unable to build package: %s" msgstr "Paketin %s luominen epäonnistui." msgid "Unable to count applications: %s" msgstr "Sovellusten %s laskeminen epäonnistui" msgid "Unable to create database config table: %s" msgstr "Tietokannan asetustaulun %s luominen epäonnistui" msgid "Unable to create database tables: %s" msgstr "Tietokantataulujen %s luominen epäonnistui" msgid "Unable to create destination directory." msgstr "Kohdehakemiston luominen epäonnistui." msgid "Unable to create file '%s'!" msgstr "Tiedoston '%s' luominen epäonnistui!" msgid "Unable to download feed %s. Message: %s" msgstr "Syötteen %s lataaminen epäonnistui. Viesti: %s" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "IPK-datan purkaminen epäonnistui!" msgid "Unable to extract IPK metadata!" msgstr "IPK-metadatan purkaminen epäonnistui!" msgid "Unable to extract data file %s. Message: %s" msgstr "Datatiedoston %s purkaminen epäonnistui. Viesti: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" "Datatiedoston %s purkaminen epäonnistui. Tämä IPK-paketti saattaa olla " "vioittunut, ole hyvä ja hae uusi kopio." msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "Tiedoston '%s' purkaminen riippuvuutta '%s' varten epäonnistui!" msgid "Unable to extract file. %s" msgstr "Tiedoston purkaminen epäonnistui. %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" "Allekirjoituksen purkaminen epäonnistui! Ehkä pakettia ei ole " "allekirjoitettu." msgid "Unable to fetch application by id: %s" msgstr "Sovelluksen hakeminen tunnisteen avulla epäonnistui: %s" msgid "Unable to fetch application by name: %s" msgstr "Sovelluksen hakeminen nimen avulla epäonnistui: %s" msgid "Unable to fetch application file list: %s" msgstr "Sovelluksen tiedostoluettelon hakeminen epäonnistui: %s" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" "Kohdetta '%s' vastaavaa toteutusta ei löytynyt käytössäsi olevalle " "järjestelmälle." msgid "Unable to find native package for '%s'!" msgstr "Paikallisen paketin haku kohteelle '%s' epäonnistui!" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "Riippuvuutta '%s' ei voitu ratkaista!" msgid "Unable to get meta-information list: %s" msgstr "Metatietoluettelon %s haku epäonnistui" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "Tietokannan avaaminen kirjoittamista varten epäonnistui: %s" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" "Ohjelmistotietokannan avaaminen kirjoittamista ja lukemista varten " "epäonnistui!" msgid "Unable to open software database for reading only!" msgstr "Ohjelmistotietokannan avaaminen lukemista varten epäonnistui!" msgid "Unable to read package signature! Message: %s" msgstr "Paketin allekirjoituksen lukeminen epäonnistui! Viesti: %s" msgid "Unable to remove application from database: %s" msgstr "Sovelluksen poistaminen tietokannasta epäonnistui: %s" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "Haun tekeminen sovellustietokannasta epäonnistui: %s" msgid "Unable to write application file list! Message: %s" msgstr "Sovelluksen tiedostoluettelon kirjoittaminen epäonnistui! Viesti: %s" msgid "Unable to write meta information! Message: %s" msgstr "Metatietojen kirjoittaminen epäonnistui! Viesti: %s" msgid "Unable to write signature file! Message: %s" msgstr "Allekirjoitustiedoston kirjoittaminen epäonnistui! Viesti: %s" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Käytä rekursiivista tilaa" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" "Tiedoston %s vahvistaminen epäonnistui! Tätä IPK-tiedostoa on saatettu " "muokata luomisen jälkeen.\n" "Ole hyvä ja hae uusi kopio ja yritä uudelleen." msgid "Validity is undefined" msgstr "Kelpoisuutta ei määritelty" msgid "We don't know a desktop-file for application '%s'!" msgstr "Tiedossa ei ole työpöytätiedostoa sovellukselle '%s'!" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "ZI XML -tiedosto '%s' on vioittunut." msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "virhe: %s" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "henkilökohtainen" msgid "shared" msgstr "jaettu" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/tr.po0000664000175000017500000003645212176743563015457 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-11 21:01+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Yükleme tamamlandı!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/LINGUAS0000664000175000017500000000017512176743563015510 0ustar matthiasmatthias# please keep this list sorted alphabetically # ast ca cs da de es fi fr he id it lt nds nl oc pl pt_BR ru sk sq sv tr zh_CN ./Listaller-0.5.8/po/lt.po0000664000175000017500000004072512176743563015447 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: lclstrconsts\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-02-09 09:04+0000\n" "Last-Translator: Mindaugas B. \n" "Language-Team: Lithuanian \n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "„%s“ neturi registruotų failų sąrašo. Galbūt sugadinta programinės įrangos " "duomenų bazė." msgid "<<< Press ENTER to continue! >>>" msgstr "<<< Norėdami tęsti, spauskite ĮVESTIES klavišą >>>" msgid "A higher version '%s' of this application has already been installed." msgstr "Jau įdiegta naujesnė šios programos versija „%s“." msgid "A lower version '%s' of this application has already been installed." msgstr "Jau įdiegta senesnė šios programos versija „%s“." msgid "AVAILABLE" msgstr "PRIEINAMA" msgid "Activate verbose mode" msgstr "Rodyti išsamius pranešimus" msgid "Application ID %s is invalid!" msgstr "Netinkamas programos ID %s" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Kurti IPK paketą" msgid "Copying files to their destination" msgstr "Failai kopijuojami į jų paskirties vietą" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Nepavyksta nukopijuoti %s failo į jo paskirties vietą. Ar turite pakankamai " "leidimų tai daryti?\n" "Klaidos pranešimas: „%s“." msgid "Could not create file '%s'! File already exists." msgstr "Nepavyksta sukurtu „%s“. Failas jau yra." msgid "Could not create software database!" msgstr "Nepavyksta sukurti programinės įrangos duomenų bazės!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Nepavyksta rasti IPK šaltinių failų!" msgid "Could not find application which matches '%s'!\n" msgstr "Nepavyksta rasti programos, kuri atitiktų „%s“!\n" msgid "Could not find application!" msgstr "Programa nerasta!" msgid "Could not load desktop file values: %s" msgstr "Nepavyko įkelti darbalaukio failo reikšmių: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "KATALOGAS" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "Duomenų bazė užrakinta" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Aprašas:" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "Ar sutinkate su licencijos sąlygomis?" msgid "Do you want to install %s now?" msgstr "Dabar diegti %s ?" msgid "Do you want to remove %s (%s) now?" msgstr "Dabar pašalinti %s (%s)?" msgid "ERROR: %s" msgstr "KLAIDA: %s" msgid "Enable verbose mode" msgstr "Įgalinti išsamius pranešimus" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "Klaida: %s\n" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "Failo „%“ nėra arba neturite leidimo prie jo prieiti." msgid "File '%s' doesn't exist." msgstr "Nėra failo „%“." msgid "File does not exist!" msgstr "Failo nėra!" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "ĮDIEGTA" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "Diegimas baigtas!" msgid "Installation failed!" msgstr "Nepavyko įdiegti!" msgid "Installation of %s" msgstr "%s diegimas" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "Diegiama" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "Trūksta rakto" msgid "Key not found!" msgstr "Neradome rakto!" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Licencija:" msgid "List all installed applications" msgstr "Visos įdiegtos programos" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/zh_CN.po0000664000175000017500000003656412176743563016037 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: 0.9.16\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2010-07-05 22:59+0000\n" "Last-Translator: Matthias Klumpp \n" "Language-Team: 简体中文 <>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" "X-Poedit-Country: china\n" "X-Poedit-Language: chinese\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" msgid "<<< Press ENTER to continue! >>>" msgstr "" msgid "A higher version '%s' of this application has already been installed." msgstr "" msgid "A lower version '%s' of this application has already been installed." msgstr "" msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "" msgid "Application ID %s is invalid!" msgstr "" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "" msgid "Copying files to their destination" msgstr "" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" msgid "Could not create file '%s'! File already exists." msgstr "" msgid "Could not create software database!" msgstr "" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" msgid "Could not extract file %s! Error: %s" msgstr "" msgid "Could not extract file! Error: %s" msgstr "" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "" msgid "Could not find application which matches '%s'!\n" msgstr "" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" msgid "Could not open IPK file! Error: %s" msgstr "" msgid "Could not open desktop file: %s" msgstr "" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" msgid "Could not override file %s, this file already exists!" msgstr "" msgid "Could not read IPK control information! Error: %s" msgstr "" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" msgid "Could not remove file %s!" msgstr "" msgid "Could not uninstall application %s. It is not installed." msgstr "" msgid "DIRECTORY" msgstr "" msgid "Database action '%s' failed: %s" msgstr "" msgid "Database action failed" msgstr "" msgid "Database action successful" msgstr "" msgid "Database locked" msgstr "" msgid "Database unlocked" msgstr "" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "" msgid "Details from PackageKit: %s" msgstr "" msgid "Do you accept these terms and conditions?" msgstr "" msgid "Do you want to install %s now?" msgstr "" msgid "Do you want to remove %s (%s) now?" msgstr "" msgid "ERROR: %s" msgstr "" msgid "Enable verbose mode" msgstr "" msgid "Error while finding files in directory %s: %s" msgstr "" msgid "Error: %s\n" msgstr "" msgid "FPR" msgstr "" msgid "Failed to import key with fingerprint '%s'." msgstr "" msgid "File %s not found or permission denied!" msgstr "" msgid "File '%s' doesn't exist." msgstr "" msgid "File does not exist!" msgstr "" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "" msgid "INSTALLED" msgstr "" msgid "IPK package could not be found!" msgstr "" msgid "IPK package output directory" msgstr "" msgid "Import key with fingerprint FPR" msgstr "" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "" msgid "Installation completed!" msgstr "安装完成!" msgid "Installation failed!" msgstr "" msgid "Installation of %s" msgstr "" msgid "Installation of native packages failed with message: %s" msgstr "" msgid "Installing" msgstr "" msgid "Installing native packages: %s" msgstr "" msgid "Key '%s' imported successfully!" msgstr "" msgid "Key is missing" msgstr "" msgid "Key not found!" msgstr "" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "" msgid "List all installed applications" msgstr "" msgid "List installed Listaller applications" msgstr "" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" msgid "Lookup key which matches PATTERN" msgstr "" msgid "Low security." msgstr "" msgid "Making '%s' known to your system." msgstr "" msgid "Malformed line in file listing: %s" msgstr "" msgid "Medium security." msgstr "" msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "" msgid "No application specified!" msgstr "" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" msgid "One key has been revoked" msgstr "" msgid "One key has expired" msgstr "" msgid "PATTERN" msgstr "" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" msgid "Path to Listaller package source directory" msgstr "" msgid "Path to the application's source code" msgstr "" msgid "Please remove the existing version to continue!" msgstr "" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "" msgid "Pubkey is missing" msgstr "" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" msgid "RFU" msgstr "" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "" msgid "Removal of %s failed!" msgstr "" msgid "Removal of %s finished." msgstr "" msgid "Removal of %s started." msgstr "" msgid "Remove an application installed using Listaller" msgstr "" msgid "Removing" msgstr "" msgid "Resolving dependencies of '%s'." msgstr "" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" msgid "Running installation of %s" msgstr "" msgid "Security is:" msgstr "" msgid "Setup has not been initialized!" msgstr "" msgid "Should be safe to use." msgstr "" msgid "Show the application's version" msgstr "" msgid "Signature has expired" msgstr "" msgid "Signature is bad" msgstr "" msgid "Signature is fully valid" msgstr "" msgid "Software database closed" msgstr "" msgid "Software database message (%d)" msgstr "" msgid "Software database opened" msgstr "" msgid "Software install prefix" msgstr "" msgid "Software installation package" msgstr "" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" msgid "Status of this signature is unknown or package is not signed." msgstr "" msgid "Strip debug infos from files in install-target" msgstr "" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" msgid "There are no files in file-list for architecture '%s'!" msgstr "" msgid "This application has already been installed." msgstr "" msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" msgid "This package could be dangerous!" msgstr "" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" msgid "Tried to access locked database! This shouldn't happen." msgstr "" msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" msgid "Tried to perform action on invalid IPK package." msgstr "" msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" msgid "Trust is full" msgstr "" msgid "Trust is marginal" msgstr "" msgid "Trust is ultimate." msgstr "" msgid "Trust level is unknown" msgstr "" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" msgid "Unable to add a dependency to database: %s" msgstr "" msgid "Unable to add application file list to database: %s" msgstr "" msgid "Unable to add application to database: %s" msgstr "" msgid "Unable to build package: %s" msgstr "" msgid "Unable to count applications: %s" msgstr "" msgid "Unable to create database config table: %s" msgstr "" msgid "Unable to create database tables: %s" msgstr "" msgid "Unable to create destination directory." msgstr "" msgid "Unable to create file '%s'!" msgstr "" msgid "Unable to download feed %s. Message: %s" msgstr "" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "" msgid "Unable to extract IPK metadata!" msgstr "" msgid "Unable to extract data file %s. Message: %s" msgstr "" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "" msgid "Unable to extract file. %s" msgstr "" msgid "Unable to extract signature! Maybe package is not signed." msgstr "" msgid "Unable to fetch application by id: %s" msgstr "" msgid "Unable to fetch application by name: %s" msgstr "" msgid "Unable to fetch application file list: %s" msgstr "" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" msgid "Unable to find native package for '%s'!" msgstr "" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "" msgid "Unable to get meta-information list: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "" msgid "Unable to open software database for reading only!" msgstr "" msgid "Unable to read package signature! Message: %s" msgstr "" msgid "Unable to remove application from database: %s" msgstr "" msgid "Unable to save modified desktop-file! %s" msgstr "" msgid "Unable to search application database: %s" msgstr "" msgid "Unable to write application file list! Message: %s" msgstr "" msgid "Unable to write meta information! Message: %s" msgstr "" msgid "Unable to write signature file! Message: %s" msgstr "" msgid "Unknown" msgstr "" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "" msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" msgid "Validity is undefined" msgstr "" msgid "We don't know a desktop-file for application '%s'!" msgstr "" msgid "XML file is not a valid ZI feed!" msgstr "" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" msgid "You need to be root to change Listaller's key database!" msgstr "" msgid "Your package has errors and was therefore not generated." msgstr "" msgid "ZI XML file '%s' is damaged." msgstr "" msgid "[None]" msgstr "" msgid "bad" msgstr "" msgid "dangerous" msgstr "" msgid "error: %s" msgstr "" msgid "high" msgstr "" msgid "low" msgstr "" msgid "medium" msgstr "" msgid "n/a" msgstr "" msgid "no" msgstr "" msgid "okay" msgstr "" msgid "personal" msgstr "" msgid "shared" msgstr "" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" msgid "yes" msgstr "" ./Listaller-0.5.8/po/it.po0000664000175000017500000006303012176743563015436 0ustar matthiasmatthiasmsgid "" msgstr "" "Project-Id-Version: listaller\n" "Report-Msgid-Bugs-To: listaller@freelists.org\n" "POT-Creation-Date: 2013-08-02 16:20+0200\n" "PO-Revision-Date: 2013-03-14 20:07+0000\n" "Last-Translator: Michele Gastaldo \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-08-02 14:12+0000\n" "X-Generator: Launchpad (build 16718)\n" msgid "" "'%s' has no file-list registered. The software database might be broken." msgstr "" "'%s' non ha liste file registrate. Il database del software potrebbe essere " "danneggiato." msgid "<<< Press ENTER to continue! >>>" msgstr "<<< Premere ENTER per continuare! >>>" msgid "A higher version '%s' of this application has already been installed." msgstr "" "Una versione maggiore '%s' di questa applicazione è già stata installata." msgid "A lower version '%s' of this application has already been installed." msgstr "" "Una versione minore '%s' di questa applicazione è già stata installata." msgid "AVAILABLE" msgstr "" msgid "Activate verbose mode" msgstr "Attiva modalità prolissa" msgid "Application ID %s is invalid!" msgstr "L'ID applicazione %s non è valido!" msgid "Binary %s was not found" msgstr "" msgid "Build IPK package" msgstr "Crea pacchetto IPK" msgid "Copying files to their destination" msgstr "Copia dei file nella destinazione" msgid "" "Could not copy file %s to its destination. Do you have the necessary rights " "to perform this action?\n" "Error message was \"%s\"." msgstr "" "Impossibile copiare il file %s nella sua destinazione. Si hanno i permessi " "necessari per eseguire questa azione?\n" "Il messaggio d'errore è \"%s\"." msgid "Could not create file '%s'! File already exists." msgstr "Impossibile creare il file '%s'! Il file esiste già." msgid "Could not create software database!" msgstr "Impossibile creare il database del software!" msgid "Could not extract IPK payload! Package might be damaged. Error: %s" msgstr "" "Impossibile estrarre il payload IPK! Il pacchetto potrebbe essere " "danneggiato. Errore: %s" msgid "Could not extract file %s! Error: %s" msgstr "Impossibile estrarre il file %s! Errore: %s" msgid "Could not extract file! Error: %s" msgstr "Impossibile estrarre il file! Errore: %s" #. : IPk builder was unable to find IPK source scripts msgid "Could not find IPK source files!" msgstr "Impossibile trovare i file sorgenti IPK!" msgid "Could not find application which matches '%s'!\n" msgstr "Impossibile trovare un'applicazione corrispondente a '%s'!\n" msgid "Could not find application!" msgstr "" msgid "Could not load desktop file values: %s" msgstr "Impossibile caricare i valori del file desktop: %s" msgid "" "Could not obtain a PkBackendProxy instance. Maybe the Listaller-PkPlugin is " "not installed or broken?" msgstr "" "Impossibile ottenere un'istanza PkBackendProxy. Forse Listaller-PkPlugin non " "è installato o è danneggiato?" msgid "Could not open IPK file! Error: %s" msgstr "Impossibile aprire il file IPK! Errore: %s" msgid "Could not open desktop file: %s" msgstr "Impossibile aprire il file desktop: %s" msgid "" "Could not open the software database, maybe it is locked at time.\n" "Please close all other running installations to continue!" msgstr "" "Impossibile aprire il database del software, forse è bloccato a tempo.\n" "Chiudere tutte le altre installazioni in esecuzione per continuare!" msgid "" "Could not override file %s! Maybe the software database is damaged or this " "package is broken!" msgstr "" "Impossibile sovrascrivere il file %s! Forse il database del software è " "danneggiato o questo pacchetto è corrotto!" msgid "Could not override file %s, this file already exists!" msgstr "Impossibile sovrascrivere il file %s, questo file esiste già!" msgid "Could not read IPK control information! Error: %s" msgstr "Impossibile leggere le informazioni di controllo IPK! Errore: %s" msgid "" "Could not read IPK payload container! Package might be damaged. Error: %s" msgstr "" "Impossibile leggere il contenitore di payload IPK! Il pacchetto potrebbe " "essere danneggiato. Errore: %s" msgid "" "Could not read dependency archive! Archive might be damaged. Message: %s" msgstr "" "Impossibile leggere l'archivio delle dipendenze! L'archivio potrebbe essere " "danneggiato. Messaggio: %s" msgid "Could not remove file %s!" msgstr "Impossibile rimuovere il file %s!" msgid "Could not uninstall application %s. It is not installed." msgstr "Impossibile disinstallare l'applicazione %s. Non è installata." msgid "DIRECTORY" msgstr "CARTELLA" msgid "Database action '%s' failed: %s" msgstr "Azione di database '%s' fallita: %s" msgid "Database action failed" msgstr "Azione di database fallita" msgid "Database action successful" msgstr "Azione di database completata con successo" msgid "Database locked" msgstr "Database bloccato" msgid "Database unlocked" msgstr "Database sbloccato" msgid "Define an additional directory with module definitions" msgstr "" msgid "Description:" msgstr "Descrizione:" msgid "Details from PackageKit: %s" msgstr "Dettagli da PackageKit: %s" msgid "Do you accept these terms and conditions?" msgstr "Accettare questi termini e condizioni?" msgid "Do you want to install %s now?" msgstr "Installare %s adesso?" msgid "Do you want to remove %s (%s) now?" msgstr "Rimuovere %s (%s) adesso?" msgid "ERROR: %s" msgstr "ERRORE: %s" msgid "Enable verbose mode" msgstr "Abilita la modalità prolissa" msgid "Error while finding files in directory %s: %s" msgstr "Errore nel trovare i file nella directory %s: %s" msgid "Error: %s\n" msgstr "Errore: %s\n" msgid "FPR" msgstr "FPR" msgid "Failed to import key with fingerprint '%s'." msgstr "Impossibile importare la chiave con impronta '%s'." msgid "File %s not found or permission denied!" msgstr "File %s non trovato o permesso negato!" msgid "File '%s' doesn't exist." msgstr "Il file '%s' non esiste" msgid "File does not exist!" msgstr "Il file non esiste!" msgid "Framework %s is not installed! Please make it available to continue." msgstr "" msgid "" "Framework %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "GPG-Sign the resulting package" msgstr "Firma con GPG il pacchetto risultante" msgid "INSTALLED" msgstr "INSTALLATO" msgid "IPK package could not be found!" msgstr "Pacchetto IPK non trovato!" msgid "IPK package output directory" msgstr "Cartella di output del pacchetto IPK" msgid "Import key with fingerprint FPR" msgstr "Importa la chiave con impronta FPR" msgid "Install a remote IPK package" msgstr "" msgid "Install an IPK package" msgstr "Installa un pacchetto IPK" msgid "Installation completed!" msgstr "Installazione completata." msgid "Installation failed!" msgstr "Installazione fallita!" msgid "Installation of %s" msgstr "Installazione di %s" msgid "Installation of native packages failed with message: %s" msgstr "Installazione di pacchetti nativi fallita con messaggio: %s" msgid "Installing" msgstr "Installazione" msgid "Installing native packages: %s" msgstr "Installazione di pacchetti nativi: %s" msgid "Key '%s' imported successfully!" msgstr "Chiave '%s' importata con successo!" msgid "Key is missing" msgstr "Chiave mancante" msgid "Key not found!" msgstr "Chiave non trovata!" msgid "Library %s was not found" msgstr "" msgid "License:" msgstr "Licenza:" msgid "List all installed applications" msgstr "Elenca tutte le applicazioni installate" msgid "List installed Listaller applications" msgstr "Elenca le applicazioni Listaller installate" msgid "" "Listaller command-line tool: No command specified.\n" "Run '%s --help' to see a list of available commands." msgstr "" "Strumento a linea di comando Listaller: Nessun comando specificato.\n" "Eseguire '%s --help' per vedere una lista di comandi disponibili." msgid "Lookup key which matches PATTERN" msgstr "Cerca chiave che corrisponda a PATTERN" msgid "Low security." msgstr "Sicurezza bassa" msgid "Making '%s' known to your system." msgstr "Rendo '%s' conosciuto al sistema" msgid "Malformed line in file listing: %s" msgstr "Riga malformata nella lista di file: %s" msgid "Medium security." msgstr "Sicurezza media." msgid "Missing parameter for 'install' action: No IPK package specified.\n" msgstr "" "Parametro mancante per azione 'install': Nessun pacchetto IPK specificato.\n" msgid "" "Missing parameter for 'install-remote' action: No IPK package-id specified.\n" msgstr "" msgid "" "Missing parameter for 'remove' action: No application-id or name specified.\n" msgstr "" "Parametro mancante per azione 'remove': Nessun id-applicazione o nome " "specificato.\n" msgid "" "Module %s is only available in version %s, while a version %s %s is " "required. This software can not be installed, please notify the original " "author about it." msgstr "" msgid "Never trust." msgstr "Mai fidarsi." msgid "No application specified!" msgstr "Nessuna applicazione specificata!" msgid "No framework/module matching '%s' (v%s) found!" msgstr "" msgid "No path given!" msgstr "Nessun percorso dato!" msgid "" "No payload data archive has been registered! This might be a bug in this " "application, please report the issue!" msgstr "" "Non è stato registrato nessun archivio di dati payload! Questo potrebbe " "essere un bug in quest'applicazione, riportare il problema!" msgid "No valid DOAP data found in directory %s - Can't open control files." msgstr "" "Nessun dato DOAP valido trovato nella cartella %s - Impossibile aprire i " "file di controllo." msgid "One key has been revoked" msgstr "Una chiave è stata revocata." msgid "One key has expired" msgstr "Una chiave è scaduta." msgid "PATTERN" msgstr "MODELLO" msgid "" "Package uses custom variable: '%s' - usually this is not intentional, please " "contact the package author!" msgstr "" msgid "" "PackageKit backend does not support finding packages by stuff they provide - " "Installer was unable to use native packages to satisfy dependencies of this " "application." msgstr "" "Il backend PackageKit non supporta la ricerca di pacchetti per funzioni " "fornite - L'installatore non è in grado di usare pacchetti nativi per " "soddisfare le dipendenze di questa applicazione." msgid "" "PackageKit backend does not support searching for files - Installer was " "unable to use native packages to satisfy dependencies of this application." msgstr "" "Il backend PackageKit non supporta la ricerca di file - L'installatore non è " "in grado di usare pacchetti nativi per soddisfare le dipendenze di questa " "applicazione." msgid "" "PackageKit transaction failed!\n" "Exit message was: %s" msgstr "" "Transazione PackageKit fallita!\n" "Messaggio di uscita: %s" msgid "Path to Listaller package source directory" msgstr "Percorso per cartella dei pacchetti sorgenti Listaller" msgid "Path to the application's source code" msgstr "Percorso per il codice sorgente dell'applicazione" msgid "Please remove the existing version to continue!" msgstr "Rimuovere la versione esistente per continuare!" msgid "Print list of used framework/modules" msgstr "" msgid "Print machine-readable simple text" msgstr "Stampa testo semplice leggibile dal computer" msgid "Pubkey is missing" msgstr "Pubkey mancante" msgid "Query returned no results. Maybe there's no release defined?" msgstr "" "La ricerca non ha prodotto risultati. Forse non è stato definito un rilascio?" msgid "Query returned no results. Maybe this DOAP data is broken?" msgstr "" "La ricerca non ha prodotto risultati. Forse questi dati DOAP sono corrotti?" msgid "RFU" msgstr "RFU" msgid "Refresh repository application cache" msgstr "" msgid "Removal of %s completed successfully!" msgstr "Rimozione di %s completata con successo!" msgid "Removal of %s failed!" msgstr "Rimozione di %s fallita!" msgid "Removal of %s finished." msgstr "Rimozione di %s finita." msgid "Removal of %s started." msgstr "Rimozione di %s iniziata." msgid "Remove an application installed using Listaller" msgstr "Rimuovi un'applicazione installata usando Listaller" msgid "Removing" msgstr "Rimozione" msgid "Resolving dependencies of '%s'." msgstr "Risoluzione dipendenze di '%s'" msgid "Run '%s --help' to see a full list of available command line options.\n" msgstr "" "Eseguire «%s --help» per un elenco completo di opzioni a riga di comando.\n" msgid "Running installation of %s" msgstr "Installazione in corso di %s" msgid "Security is:" msgstr "SIcurezza:" msgid "Setup has not been initialized!" msgstr "Il setup non è stato inizializzato!" msgid "Should be safe to use." msgstr "Sicuro da usare." msgid "Show the application's version" msgstr "Mostra la versione dell'applicazione" msgid "Signature has expired" msgstr "La firma è scaduta" msgid "Signature is bad" msgstr "La firma è sbagliata." msgid "Signature is fully valid" msgstr "La firma è completamente valida." msgid "Software database closed" msgstr "Database software chiuso" msgid "Software database message (%d)" msgstr "Messaggio del database software (%d)" msgid "Software database opened" msgstr "Database software aperto" msgid "Software install prefix" msgstr "Prefisso d'installazione software" msgid "Software installation package" msgstr "Pacchetto d'installazione software" msgid "" "Some files of this package could not be installed, because they were not " "found in payload data.\n" "This IPK package might be damaged, please obtain a new copy!" msgstr "" "Alcuni file di questo pacchetto non sono stati installati, perchè non sono " "stati trovati nei dati payload.\n" "Questo pacchetto IPK potrebbe essere danneggiato, ottenere una nuova copia!" msgid "Status of this signature is unknown or package is not signed." msgstr "Lo stato di questa firma è sconosciuto o il pacchetto non è firmato." msgid "Strip debug infos from files in install-target" msgstr "Informazioni della striscia debug dai file in install-target" msgid "" "The installer will only work with the %s operating system, but you use " "'%s'.\n" "Setup can not continue, sorry." msgstr "" "L'installatore funziona solo con il sistema operativo %s, ma è in uso '%s'.\n" "Il setup non può continuare." msgid "There are no files in file-list for architecture '%s'!" msgstr "Non ci sono file nella lista file per l'architettura '%s'!" msgid "This application has already been installed." msgstr "Questa applicazione è già installata." msgid "" "This package can't be installed on your system architecture (%s)!\n" "Please get a package which was built for your machine." msgstr "" "Questo pacchetto non può essere installato sulla presente architettura di " "sistema (%s)!\n" "Ottenere un pacchetto che può essere compilato per la propria macchina." msgid "This package could be dangerous!" msgstr "Questo pacchetto potrebbe essere pericoloso!" msgid "" "This package is a delta-package, containing software patches. It is usually " "distributed via update-services, you can't install it using this tool. " "Please obtain a non-delta version of this application!" msgstr "" "Questo pacchetto è un pacchetto delta, contenente patch. E' normalmente " "distribuito via update-services, non si può installare con questo strumento. " "Bisogna ottenere una versione non-delta di questa applicazione!" msgid "" "This package was built using a more recent version of Listaller.\n" "Please update your copy of Listaller to be able to install it." msgstr "" "Questo pacchetto è stato costruito usando una versione più recente di " "Listaller.\n" "Aggiornare la propria copia di Listaller per poterlo installare." msgid "" "This package was built using spec version '%s', but we need at least '%s' or " "higher to proceed.\n" "Please ask the package author to rebuild the package using a newer Listaller " "version." msgstr "" "Questo pacchetto è stato costruito usando la versione di spec '%s', ma è " "necessaria almeno '%s' o maggiore per proseguire.\n" "Si prega di chiedere all'autore del pacchetto di ricostruire il pacchetto " "usando una versione più recente di Listaller." msgid "Tried to access locked database! This shouldn't happen." msgstr "" "Tentativo di accedere al database bloccato! Questo non dovrebbe accadere." msgid "Tried to access locked database! This shouldn't happen. Message: %s" msgstr "" "Tentativo di accedere al database bloccato! Questo non dovrebbe accadere. " "Messaggio: %s" msgid "Tried to perform action on invalid IPK package." msgstr "Tentativo di eseguire azione su un pacchetto IPK non valido." msgid "" "Tried to perform action on private software database, but the database is " "not opened! (this should never happen!)" msgstr "" "Tentativo di eseguire azione su database software privato, ma il database " "non è aperto! (questo non dovrebbe mai accadere!)" msgid "" "Tried to perform action on shared software database, but the database is not " "opened! (maybe a permission problem?)" msgstr "" "Tentativo di eseguire azione su database software condiviso, ma il database " "non è aperto! (forse un problema di permessi?)" msgid "Tried to write on readonly database! (This should never happen)" msgstr "" "Tentativo di scrivere su un database di sola lettura! (Questo non dovrebbe " "mai accadere)" msgid "Trust is full" msgstr "Fiducia completa" msgid "Trust is marginal" msgstr "Fiducia al limite" msgid "Trust is ultimate." msgstr "Fiducia massima" msgid "Trust level is unknown" msgstr "Livello di fiducia sconosciuto" msgid "" "Trying to remove local application, but AppManager is in superuser mode!\n" "Setting AppManager to local mode now." msgstr "" "Tentativo di rimuovere applicazione locale in corso, ma AppManager è in " "modalità superutente!\n" "Impostazione di AppManager in modalità locale in corso ora." msgid "" "Trying to remove shared application, but AppManager is not in superuser " "mode!\n" "Setting AppManager to superuse mode now." msgstr "" "Tentativo di rimuovere applicazione condivisa in corso, ma AppManager non è " "in modalità superutente!\n" "Impostazione di AppManager in modalità superutente in corso ora." msgid "Unable to add a dependency to database: %s" msgstr "Impossibile aggiungere una dipendenza al database: %s" msgid "Unable to add application file list to database: %s" msgstr "Impossibile aggiungere lista file dell'applicazione al database: %s" msgid "Unable to add application to database: %s" msgstr "Impossibile aggiungere applicazione al database: %s" msgid "Unable to build package: %s" msgstr "Impossibile costruire il pacchetto: %s" msgid "Unable to count applications: %s" msgstr "Impossibile contare le applicazioni: %s" msgid "Unable to create database config table: %s" msgstr "Impossibile creare la tabella di configurazione database: %s" msgid "Unable to create database tables: %s" msgstr "Impossibile creare le tabelle database: %s" msgid "Unable to create destination directory." msgstr "Impossibile creare la cartella di destinazione" msgid "Unable to create file '%s'!" msgstr "Impossibile creare il file '%s'!" msgid "Unable to download feed %s. Message: %s" msgstr "Impossibile scaricare il feed %s. Messaggio: %s" msgid "" "Unable to download package for '%s'\n" "Error: %s" msgstr "" msgid "Unable to extract IPK data!" msgstr "Impossibile estrarre i dati IPK!" msgid "Unable to extract IPK metadata!" msgstr "Impossibile estrarre i metadati IPK!" msgid "Unable to extract data file %s. Message: %s" msgstr "Impossibile estrarre i file dati %s. Messaggio: %s" msgid "" "Unable to extract data file %s. This IPK package might be damaged, please " "obtain a new copy." msgstr "" "Impossibile estrarre i file dati %s. Questo pacchetto IPK potrebbe essere " "danneggiato, ottenere una nuova copia." msgid "Unable to extract file '%s' for dependency '%s'!" msgstr "Impossibile estrarre file '%s' per la dipendenza '%s'!" msgid "Unable to extract file. %s" msgstr "Impossibile estrarre file. %s" msgid "Unable to extract signature! Maybe package is not signed." msgstr "Impossibile estrarre la firma! Forse il pacchetto non è firmato." msgid "Unable to fetch application by id: %s" msgstr "Impossibile ottenere l'applicazione dall'id: %s" msgid "Unable to fetch application by name: %s" msgstr "Impossibile ottenere l'applicazione dal nome: %s" msgid "Unable to fetch application file list: %s" msgstr "Impossibile ottenere la lista file dell'applicazione: %s" msgid "" "Unable to fetch repository contents for: '%s'\n" "Error: %s" msgstr "" msgid "" "Unable to find a matching implementation of '%s' for your system/" "architecture." msgstr "" "Impossibile trovare un'implementazione di '%s' corrispondente al proprio " "sistema/architettura." msgid "Unable to find native package for '%s'!" msgstr "Impossibile trovare pacchetto nativo per '%s'!" msgid "Unable to find valid candidate to satisfy dependency '%s'!" msgstr "Impossibile trovare candidato valido per soddisfare dipendenza '%s'!" msgid "Unable to get meta-information list: %s" msgstr "Impossibile ottenere lista di meta-informazioni: %s" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Message: %s" msgstr "" msgid "" "Unable to install module '%s' which is required for this installation.\n" "Unable to find a method to satisfy the dependency." msgstr "" msgid "Unable to open database for writing: %s" msgstr "Impossibile aprire database per scrittura: %s" msgid "Unable to open database read-only: %s" msgstr "" msgid "Unable to open software database for reading & writing!" msgstr "Impossibile aprire database software per lettura & scrittura!" msgid "Unable to open software database for reading only!" msgstr "Impossibile aprire database software per sola lettura!" msgid "Unable to read package signature! Message: %s" msgstr "Impossibile leggere firma del pacchetto! Messaggio: %s" msgid "Unable to remove application from database: %s" msgstr "Impossibile rimuovere applicazione dal database: %s" msgid "Unable to save modified desktop-file! %s" msgstr "Impossibile salvare il file-desktop modificato! %s" msgid "Unable to search application database: %s" msgstr "Impossibile cercare nel database applicazioni: %s" msgid "Unable to write application file list! Message: %s" msgstr "Impossibile scrivere la lista file dell'applicazione! Messasggio: %s" msgid "Unable to write meta information! Message: %s" msgstr "Impossibile scrivere meta informazioni! Messasggio: %s" msgid "Unable to write signature file! Message: %s" msgstr "Impossibile scrivere file firma! Messasggio: %s" msgid "Unknown" msgstr "Sconosciuto" msgid "" "Update of application '%s' failed. Maybe the update information is out of " "date. Please refresh it and try again." msgstr "" msgid "" "Update of application '%s' failed. Something bad happened. Please install " "the application again!" msgstr "" msgid "" "Update of application '%s' failed. Unable to remove the old application." msgstr "" msgid "Updating package cache" msgstr "" msgid "Use recursive mode" msgstr "Usa modalità ricorsiva." msgid "" "Validation of file %s failed! This IPK file might have been modified after " "creation.\n" "Please obtain a new copy and try again." msgstr "" "Validazione del file %s fallita! Questo file IPK potrebbe esser stato " "modificato dopo la creazione.\n" "Ottenere una nuova copia e provare ancora." msgid "Validity is undefined" msgstr "Validità indefinita." msgid "We don't know a desktop-file for application '%s'!" msgstr "Desktop-file per applicazione '%s' non conosciuto!" msgid "XML file is not a valid ZI feed!" msgstr "Il file XML non è un feed ZI valido!" msgid "" "You are not allowed to install this package, because it's security level is " "'%s' and you need at least a package with security-level '%s'.\n" "Please obtain this application from a safe source with good signature and " "try again!" msgstr "" "Non si è autorizzati a installare questo pacchetto perchè il livello di " "sicurezza è '%s' e si necessita almeno un pacchetto con livello di sicurezza " "'%s'.\n" "Ottenere questa applicazione da una sorgente sicura con una firma valida e " "riprovare!" msgid "" "You are not allowed to update the application '%s'! The security level of " "the update is '%s' and you need at least security-level '%s'.\n" "Please make sure you trusted this signature and that your system is not " "compromised!" msgstr "" msgid "" "You need to agree with the license to install & use the application. Exiting " "setup now." msgstr "" "Bisogna accettare la licenza per installare e usare l'applicazione. Il setup " "uscirà ora." msgid "You need to be root to change Listaller's key database!" msgstr "Bisogna essere root per cambiare il database delle chiavi Listaller!" msgid "Your package has errors and was therefore not generated." msgstr "Il pacchetto contiene errori e quindi non è stato generato." msgid "ZI XML file '%s' is damaged." msgstr "File XML ZI '%s' danneggiato." msgid "[None]" msgstr "[Nessuno]" msgid "bad" msgstr "errato/i" msgid "dangerous" msgstr "pericoloso" msgid "error: %s" msgstr "errore: %s" msgid "high" msgstr "alto" msgid "low" msgstr "basso" msgid "medium" msgstr "medio" msgid "n/a" msgstr "n/d" msgid "no" msgstr "no" msgid "okay" msgstr "OK" msgid "personal" msgstr "personale" msgid "shared" msgstr "condiviso" msgid "" "status ....: %s\n" "summary ...:%s\n" "fingerprint: %s\n" "created ...: %s\n" "expires ...: %s\n" "validity ..: %s\n" "val.reason : %s\n" "pubkey algo: %s\n" "digest algo: %s\n" "pka address: %s\n" "pka trust .: %s\n" "other flags:%s%s\n" "notations .: %s" msgstr "" "stato ....: %s\n" "sommario ...:%s\n" "impronta: %s\n" "creato ...: %s\n" "scade ...: %s\n" "validità ..: %s\n" "ragione validità : %s\n" "algoritmo pubkey: %s\n" "algoritmo digest: %s\n" "indirizzo pka: %s\n" "fiducia pka .: %s\n" "altre flag:%s%s\n" "notazioni .: %s" msgid "yes" msgstr "sì" ./Listaller-0.5.8/CMakeLists.txt0000664000175000017500000001213112176743563016600 0ustar matthiasmatthias# CMakeLists for the Listaller Project project(listaller) cmake_minimum_required(VERSION 2.8.6 FATAL_ERROR) #UNSET THIS VARIABLE AT RELEASE TIME set(VERSION_SUFFIX "-dev") set(CMAKE_BUILD_TYPE "Debug") # Detect Git revision (if present) if(VERSION_SUFFIX MATCHES "-dev") if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git) find_package(Git) if(GIT_EXECUTABLE) execute_process(WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD OUTPUT_VARIABLE project_revision RESULT_VARIABLE check_fail) string(REGEX REPLACE "\n" "" project_revision ${project_revision}) if(check_fail) message(STATUS "Could not fetch current Git revision: ${check_fail}") else() message(STATUS "Found Git revision: ${project_revision}") set(VERSION_SUFFIX "${VERSION_SUFFIX}:${project_revision}") endif(check_fail) endif(GIT_EXECUTABLE) endif() endif() set(LISTALLER_VERSION_MAJOR "0") set(LISTALLER_VERSION_MINOR "5") set(LISTALLER_VERSION_PATCH "8") set(LISTALLER_VERSION_SUFFIX "${VERSION_SUFFIX}") set(LISTALLER_VERSION "${LISTALLER_VERSION_MAJOR}.${LISTALLER_VERSION_MINOR}.${LISTALLER_VERSION_PATCH}") set(LISTALLER_API_LEVEL "0") # Forbid in-tree building if(${CMAKE_SOURCE_DIR} MATCHES ${CMAKE_BINARY_DIR}) message(STATUS "Please do an out-of-tree build:") message(STATUS "rm -f CMakeCache.txt && mkdir build && cd build; cmake .. && make") message(FATAL_ERROR "In-tree-build detected!") endif(${CMAKE_SOURCE_DIR} MATCHES ${CMAKE_BINARY_DIR}) # # Options # option(QT "Build Listaller's Qt4 modules" OFF) option(TOOLS "Build Listaller's non-gui tools" ON) option(LIBUILD "Build and install the LIBuild facilities" OFF) option(PATCHELF "Build patchelf utility" OFF) option(VISUAL_LDD "Build the Visual-LDD utility" OFF) option(L10N "Enable localization" ON) option(API_DOCS "Add target to build API documentation" OFF) option(TESTS "Enable Listaller's Unit Tests" OFF) option(TEST_DEPMANAGER "Test Listaller's dependency solver" OFF) option(TEST_SIGNING "Enable Listaller signing tests" OFF) if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Listaller default install prefix" FORCE) endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(XDG_APPS_INSTALL_DIR share/applications) add_definitions(-DCMAKE_INSTALL_PREFIX="\"${CMAKE_INSTALL_PREFIX}\"") add_definitions(-DCMAKE_INSTALL_LIBDIR="\"${CMAKE_INSTALL_LIBDIR}\"") set(CMAKE_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}" CACHE PATH "Output directory for libraries") set(LISTALLER_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/listaller) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/data/cmake/) list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/data/cmake/vala) message(STATUS "Compiling Listaller version ${LISTALLER_VERSION}") configure_file("${CMAKE_SOURCE_DIR}/data/cmake/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" ) add_custom_target(distclean "make clean" ) # # l10n # find_package (Gettext REQUIRED) # # Default paths # set(BIN_INSTALL_DIR bin CACHE PATH "Installation directory for executables") set(LIB_INSTALL_DIR lib/${CMAKE_LIBRARY_ARCHITECTURE} CACHE PATH "Installation directory for libraries") set(INC_INSTALL_DIR include CACHE PATH "Installation directory for headers") set(DATA_INSTALL_DIR share/listaller CACHE PATH "Installation directory for data files") set(SYSCONF_INSTALL_DIR /etc CACHE PATH "Installation directory for system configuration files") # # Configure files # set (PREFIXDIR "${CMAKE_INSTALL_PREFIX}") set (DATADIR "${CMAKE_INSTALL_PREFIX}/share") set (PKGDATADIR "${DATA_INSTALL_DIR}") set (LIBDIR "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}") set (PKGLIBDIR "${LIBDIR}/listaller") set (GETTEXT_PACKAGE "listaller") set (LOCALE_DIR "${DATADIR}/locale") set (VERSION "${LISTALLER_VERSION}") set (BUILDDIR "${CMAKE_BINARY_DIR}") configure_file(config.h.in ${CMAKE_BINARY_DIR}/config.h) # set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_SOURCE_DIR}/src/config.h) # # Enable/disable testing # if(TESTS) enable_testing() endif(TESTS) # # Custom C flags # set (MAINTAINER_CFLAGS "-Werror -Wall -Wcast-align -Wno-uninitialized -Wempty-body -Wformat-security -Winit-self") option (DISABLE_MAINTAINER_CFLAGS "Disable maintainer CFlags" ON) if (DISABLE_MAINTAINER_CFLAGS) set (MAINTAINER_CFLAGS "") endif (DISABLE_MAINTAINER_CFLAGS) add_definitions(${MAINTAINER_CFLAGS}) # Required to include config.h before all other units add_definitions ("--include config.h") # Required if GPGme was compiled with _FILE_OFFSET_BITS=64 add_definitions("-D_FILE_OFFSET_BITS=64") # # Validate Vala version # find_package(PkgConfig REQUIRED) find_package(Vala REQUIRED) include(${VALA_USE_FILE}) ensure_vala_version("0.20" MINIMUM) add_subdirectory(src) add_subdirectory(tools) add_subdirectory(data) add_subdirectory(contrib) add_subdirectory(docs) if(TESTS) add_subdirectory(tests) endif(TESTS) if (GETTEXT_FOUND AND L10N) add_subdirectory(po) endif (GETTEXT_FOUND AND L10N) ./Listaller-0.5.8/config.h.in0000664000175000017500000000347112176743563016072 0ustar matthiasmatthias#ifndef CONFIG_H #define CONFIG_H /* always defined to indicate that i18n is enabled */ #define ENABLE_NLS 1 /* Gettext Package */ #define GETTEXT_PACKAGE "@GETTEXT_PACKAGE@" /* Paths */ #define LOCALEDIR "@LOCALE_DIR@" #define PKGDATADIR "@PKGDATADIR@" #define PKGLIBDIR "@PKGLIBDIR@" #define PREFIXDIR "@PREFIXDIR@" #define DATADIR "@DATADIR@" #define LIBDIR "@LIBDIR@" #define BUILDDIR "@BUILDDIR@" /* Define if the GNU gettext() function is already present or preinstalled. */ #define HAVE_GETTEXT 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* Define if your file defines LC_MESSAGES. */ #define HAVE_LC_MESSAGES 1 /* Define to 1 if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* Name of package */ #define PACKAGE_NAME "listaller-core" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "http://bugs.launchpad.net/listaller" /* Define to the home page for this package. */ #define PACKAGE_URL "http://listaller.tenstral.net" /* Define to the version of this package. */ #define PACKAGE_VERSION "@VERSION@" #endif /*CONFIG_H*/ ./Listaller-0.5.8/vapi/0000775000175000017500000000000012176743563015001 5ustar matthiasmatthias./Listaller-0.5.8/vapi/packagekit-glib2.vapi0000664000175000017500000023170112176743563020766 0ustar matthiasmatthias/* packagekit-glib2.vapi generated by vapigen, do not modify. */ [CCode (cprefix = "Pk", gir_namespace = "PackageKitGlib", gir_version = "1.0", lower_case_cprefix = "pk_")] namespace PackageKit { [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_catalog_get_type ()")] public class Catalog : GLib.Object { [CCode (has_construct_function = false)] public Catalog (); public async void lookup_async (string filename, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public static void test (void* user_data); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_category_get_type ()")] public class Category : PackageKit.Source { [CCode (has_construct_function = false)] public Category (); public unowned string get_icon (); public unowned string get_id (); public unowned string get_name (); public unowned string get_parent_id (); public unowned string get_summary (); public void set_icon (string icon); public void set_id (string cat_id); public void set_name (string name); public void set_parent_id (string parent_id); public void set_summary (string summary); [NoAccessorMethod] public string cat_id { owned get; set; } public string icon { get; set; } public string name { get; set; } public string parent_id { get; set; } public string summary { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_client_get_type ()")] public class Client : GLib.Object { [CCode (has_construct_function = false)] public Client (); public PackageKit.Results accept_eula (string eula_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void accept_eula_async (string eula_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results adopt (string transaction_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void adopt_async (string transaction_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); [NoWrapper] public virtual void changed (); public PackageKit.Results download_packages ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, string directory, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void download_packages_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, string directory, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results generic_finish (GLib.AsyncResult res) throws GLib.Error; public bool get_background (); public uint get_cache_age (); public PackageKit.Results get_categories (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_categories_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_depends (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_depends_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_details ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_details_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_distro_upgrades (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_distro_upgrades_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_files ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_files_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public bool get_idle (); public bool get_interactive (); public unowned string get_locale (); public PackageKit.Results get_old_transactions (uint number, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_old_transactions_async (uint number, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_packages (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_packages_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Progress get_progress (string transaction_id, GLib.Cancellable? cancellable = null) throws GLib.Error; public async PackageKit.Progress get_progress_async (string transaction_id, GLib.Cancellable? cancellable) throws GLib.Error; public PackageKit.Results get_repo_list (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_repo_list_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_requires (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_requires_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_update_detail ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_update_detail_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_updates (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_updates_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results install_files (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] files, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void install_files_async (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] files, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results install_packages (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void install_packages_async (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results install_signature (PackageKit.SigType type, string key_id, string package_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void install_signature_async (PackageKit.SigType type, string key_id, string package_id, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results refresh_cache (bool force, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void refresh_cache_async (bool force, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results remove_packages (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool allow_deps, bool autoremove, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void remove_packages_async (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool allow_deps, bool autoremove, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results repair_system (PackageKit.Bitfield transaction_flags, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void repair_system_async (PackageKit.Bitfield transaction_flags, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results repo_enable (string repo_id, bool enabled, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void repo_enable_async (string repo_id, bool enabled, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results repo_set_data (string repo_id, string parameter, string value, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void repo_set_data_async (string repo_id, string parameter, string value, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results resolve (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] packages, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void resolve_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] packages, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_details (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_details_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_files (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_files_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_groups (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_groups_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_names (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_names_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public void set_background (bool background); public void set_cache_age (uint cache_age); public void set_interactive (bool interactive); public void set_locale (string locale); public static void test (void* user_data); public PackageKit.Results update_packages (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void update_packages_async (PackageKit.Bitfield transaction_flags, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results upgrade_system (string distro_id, PackageKit.UpgradeKind upgrade_kind, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void upgrade_system_async (string distro_id, PackageKit.UpgradeKind upgrade_kind, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results what_provides (PackageKit.Bitfield filters, PackageKit.Provides provides, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void what_provides_async (PackageKit.Bitfield filters, PackageKit.Provides provides, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public bool background { get; set; } public uint cache_age { get; set; } public bool idle { get; } public bool interactive { get; set; } public string locale { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_client_helper_get_type ()")] public class ClientHelper : GLib.Object { [CCode (has_construct_function = false)] public ClientHelper (); public bool start (string socket_filename, string argv, string envp) throws GLib.Error; public bool stop () throws GLib.Error; } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_control_get_type ()")] public class Control : GLib.Object { [CCode (has_construct_function = false)] public Control (); public async PackageKit.Authorize can_authorize_async (string action_id, GLib.Cancellable? cancellable) throws GLib.Error; [NoWrapper] public virtual void connection_changed (bool connected); public async string get_daemon_state_async (GLib.Cancellable? cancellable) throws GLib.Error; public async PackageKit.Network get_network_state_async (GLib.Cancellable? cancellable) throws GLib.Error; public bool get_properties (GLib.Cancellable? cancellable = null) throws GLib.Error; public async bool get_properties_async (GLib.Cancellable? cancellable) throws GLib.Error; public async string get_tid_async (GLib.Cancellable? cancellable) throws GLib.Error; public async uint get_time_since_action_async (PackageKit.Role role, GLib.Cancellable? cancellable) throws GLib.Error; [CCode (array_length = false, array_null_terminated = true)] public string[] get_transaction_list (GLib.Cancellable? cancellable = null) throws GLib.Error; [CCode (array_length = false, array_null_terminated = true)] public async string[] get_transaction_list_async (GLib.Cancellable? cancellable) throws GLib.Error; [NoWrapper] public virtual void network_state_changed (); public bool set_proxy (string proxy_http, string proxy_ftp, GLib.Cancellable? cancellable = null) throws GLib.Error; public bool set_proxy2 (string proxy_http, string proxy_https, string proxy_ftp, string proxy_socks, string no_proxy, string pac, GLib.Cancellable? cancellable = null) throws GLib.Error; public async void set_proxy2_async (string proxy_http, string proxy_https, string proxy_ftp, string proxy_socks, string no_proxy, string pac, GLib.Cancellable? cancellable); public async bool set_proxy_async (string proxy_http, string proxy_ftp, GLib.Cancellable? cancellable) throws GLib.Error; public bool suggest_daemon_quit (GLib.Cancellable? cancellable = null) throws GLib.Error; public async bool suggest_daemon_quit_async (GLib.Cancellable? cancellable) throws GLib.Error; public static void test (void* user_data); [NoAccessorMethod] public string backend_author { owned get; set; } [NoAccessorMethod] public string backend_description { owned get; set; } [NoAccessorMethod] public string backend_name { owned get; set; } [NoAccessorMethod] public bool connected { get; set; } [NoAccessorMethod] public string distro_id { owned get; set; } [NoAccessorMethod] public uint64 filters { get; set; } [NoAccessorMethod] public uint64 groups { get; set; } [NoAccessorMethod] public virtual bool locked { get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] mime_types { owned get; set; } [NoAccessorMethod] public uint network_state { get; set; } [NoAccessorMethod] public uint64 provides { get; set; } [NoAccessorMethod] public uint64 roles { get; set; } [NoAccessorMethod] public uint version_major { get; } [NoAccessorMethod] public uint version_micro { get; } [NoAccessorMethod] public uint version_minor { get; } public virtual signal void repo_list_changed (); public virtual signal void restart_schedule (); public virtual signal void transaction_list_changed ([CCode (array_length = false, array_null_terminated = true)] string[] transaction_ids); public virtual signal void updates_changed (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_desktop_get_type ()")] public class Desktop : GLib.Object { [CCode (has_construct_function = false)] public Desktop (); public string get_package_for_file (string filename) throws GLib.Error; public bool open_database () throws GLib.Error; public static void test (void* user_data); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_details_get_type ()")] public class Details : PackageKit.Source { [CCode (has_construct_function = false)] public Details (); [NoAccessorMethod] public string description { owned get; set; } [NoAccessorMethod] public uint group { get; set; } [NoAccessorMethod] public string license { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public uint64 size { get; set; } [NoAccessorMethod] public string url { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_distro_upgrade_get_type ()")] public class DistroUpgrade : PackageKit.Source { [CCode (has_construct_function = false)] public DistroUpgrade (); public static PackageKit.DistroUpgradeType enum_from_string (string upgrade); public static unowned string enum_to_string (PackageKit.DistroUpgradeType upgrade); public unowned string get_id (); public PackageKit.DistroUpgradeType get_state (); public unowned string get_summary (); [NoAccessorMethod] public string name { owned get; set; } [NoAccessorMethod] public uint state { get; set; } [NoAccessorMethod] public string summary { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_error_get_type ()")] public class Error : PackageKit.Source { [CCode (has_construct_function = false)] public Error (); public static PackageKit.ErrorType enum_from_string (string code); public static unowned string enum_to_string (PackageKit.ErrorType code); public PackageKit.ErrorType get_code (); public unowned string get_details (); [NoAccessorMethod] public uint code { get; set; } [NoAccessorMethod] public string details { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_eula_required_get_type ()")] public class EulaRequired : PackageKit.Source { [CCode (has_construct_function = false)] public EulaRequired (); [NoAccessorMethod] public string eula_id { owned get; set; } [NoAccessorMethod] public string license_agreement { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public string vendor_name { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_files_get_type ()")] public class Files : PackageKit.Source { [CCode (has_construct_function = false)] public Files (); [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] files { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_item_progress_get_type ()")] public class ItemProgress : PackageKit.Source { [CCode (has_construct_function = false)] public ItemProgress (); public unowned string get_package_id (); public uint get_percentage (); public PackageKit.Status get_status (); [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public uint percentage { get; set; } [NoAccessorMethod] public uint status { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_media_change_required_get_type ()")] public class MediaChangeRequired : PackageKit.Source { [CCode (has_construct_function = false)] public MediaChangeRequired (); [NoAccessorMethod] public string media_id { owned get; set; } [NoAccessorMethod] public string media_text { owned get; set; } [NoAccessorMethod] public uint media_type { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_message_get_type ()")] public class Message : PackageKit.Source { [CCode (has_construct_function = false)] public Message (); public static PackageKit.MessageType enum_from_string (string message); public static unowned string enum_to_string (PackageKit.MessageType message); public unowned string get_details (); public PackageKit.MessageType get_kind (); [NoAccessorMethod] public string details { owned get; set; } [NoAccessorMethod] public uint type { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_package_get_type ()")] public class Package : PackageKit.Source { [CCode (has_construct_function = false)] public Package (); public bool equal (PackageKit.Package package2); public bool equal_id (PackageKit.Package package2); public unowned string get_arch (); public unowned string get_data (); public unowned string get_id (); public PackageKit.Info get_info (); public unowned string get_name (); public unowned string get_summary (); public unowned string get_version (); public static string id_build (string name, string version, string arch, string data); public static bool id_check (string package_id); public static bool id_equal_fuzzy_arch (string package_id1, string package_id2); [CCode (array_length = false, array_null_terminated = true)] public static string[] id_split (string package_id); public static void id_test (void* user_data); public static string id_to_printable (string package_id); [CCode (array_length = false, array_null_terminated = true)] public static string[] ids_add_id (string package_ids, string package_id); [CCode (array_length = false, array_null_terminated = true)] public static string[] ids_add_ids (string package_ids, string package_ids_new); public static bool ids_check (string package_ids); [CCode (array_length = false, array_null_terminated = true)] public static string[] ids_from_id (string package_id); [CCode (array_length = false, array_null_terminated = true)] public static string[] ids_from_string (string package_id); public static bool ids_present_id (string package_ids, string package_id); [CCode (array_length = false, array_null_terminated = true)] public static string[] ids_remove_id (string package_ids, string package_id); public static void ids_test (void* user_data); public static string ids_to_string (string package_ids); public void print (); public bool set_id (string package_id) throws GLib.Error; public static void test (void* user_data); [NoAccessorMethod] public string description { owned get; set; } [NoAccessorMethod] public uint group { get; set; } [NoAccessorMethod] public uint info { get; set; } [NoAccessorMethod] public string license { owned get; set; } [NoAccessorMethod] public string package_id { owned get; } [NoAccessorMethod] public uint64 size { get; set; } [NoAccessorMethod] public string summary { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] update_bugzilla_urls { owned get; set; } [NoAccessorMethod] public string update_changelog { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] update_cve_urls { owned get; set; } [NoAccessorMethod] public string update_issued { owned get; set; } [NoAccessorMethod] public string update_obsoletes { owned get; set; } [NoAccessorMethod] public uint update_restart { get; set; } [NoAccessorMethod] public uint update_state { get; set; } [NoAccessorMethod] public string update_text { owned get; set; } [NoAccessorMethod] public string update_updated { owned get; set; } [NoAccessorMethod] public string update_updates { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] update_vendor_urls { owned get; set; } [NoAccessorMethod] public string url { owned get; set; } public virtual signal void changed (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_package_sack_get_type ()")] public class PackageSack : GLib.Object { [CCode (has_construct_function = false)] public PackageSack (); public bool add_package (PackageKit.Package package); public bool add_package_by_id (string package_id) throws GLib.Error; public bool add_packages_from_file (GLib.File file) throws GLib.Error; [NoWrapper] public virtual void changed (); public void clear (); public PackageKit.PackageSack filter (PackageKit.PackageSackFilterFunc filter_cb); public PackageKit.PackageSack filter_by_info (PackageKit.Info info); public PackageKit.Package find_by_id (string package_id); public GLib.GenericArray get_array (); public bool get_details (GLib.Cancellable? cancellable = null) throws GLib.Error; public async void get_details_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); [CCode (array_length = false, array_null_terminated = true)] public string[] get_ids (); public uint get_size (); public uint64 get_total_bytes (); public bool get_update_detail (GLib.Cancellable? cancellable = null) throws GLib.Error; public async void get_update_detail_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public bool merge_generic_finish (GLib.AsyncResult res) throws GLib.Error; public bool remove_by_filter (PackageKit.PackageSackFilterFunc filter_cb); public bool remove_package (PackageKit.Package package); public bool remove_package_by_id (string package_id); public bool resolve (GLib.Cancellable? cancellable = null) throws GLib.Error; public async void resolve_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public void sort (PackageKit.PackageSackSortType type); public static void test (void* user_data); public bool to_file (GLib.File file) throws GLib.Error; } [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] [Compact] public class PackageSackResults { } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_progress_get_type ()")] public class Progress : GLib.Object { [CCode (has_construct_function = false)] public Progress (); public bool set_allow_cancel (bool allow_cancel); public bool set_caller_active (bool caller_active); public bool set_download_size_remaining (uint64 download_size_remaining); public bool set_elapsed_time (uint elapsed_time); public bool set_item_progress (PackageKit.ItemProgress item_progress); public bool set_package (PackageKit.Package package); public bool set_package_id (string package_id); public bool set_percentage (int percentage); public bool set_remaining_time (uint remaining_time); public bool set_role (PackageKit.Role role); public bool set_speed (uint speed); public bool set_status (PackageKit.Status status); public bool set_transaction_flags (uint64 transaction_flags); public bool set_transaction_id (string package_id); public bool set_uid (uint uid); public static void test (void* user_data); [NoAccessorMethod] public bool allow_cancel { get; set; } [NoAccessorMethod] public bool caller_active { get; set; } [NoAccessorMethod] public uint download_size_remaining { get; set; } [NoAccessorMethod] public uint elapsed_time { get; set; } [NoAccessorMethod] public PackageKit.ItemProgress item_progress { owned get; set; } [NoAccessorMethod] public PackageKit.Package package { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public int percentage { get; set; } [NoAccessorMethod] public uint remaining_time { get; set; } [NoAccessorMethod] public uint role { get; set; } [NoAccessorMethod] public uint speed { get; set; } [NoAccessorMethod] public uint status { get; set; } [NoAccessorMethod] public uint64 transaction_flags { get; set; } [NoAccessorMethod] public string transaction_id { owned get; set; } [NoAccessorMethod] public uint uid { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_repo_detail_get_type ()")] public class RepoDetail : PackageKit.Source { [CCode (has_construct_function = false)] public RepoDetail (); [NoAccessorMethod] public string description { owned get; set; } [NoAccessorMethod] public bool enabled { get; set; } [NoAccessorMethod] public string repo_id { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_repo_signature_required_get_type ()")] public class RepoSignatureRequired : PackageKit.Source { [CCode (has_construct_function = false)] public RepoSignatureRequired (); [NoAccessorMethod] public string key_fingerprint { owned get; set; } [NoAccessorMethod] public string key_id { owned get; set; } [NoAccessorMethod] public string key_timestamp { owned get; set; } [NoAccessorMethod] public string key_url { owned get; set; } [NoAccessorMethod] public string key_userid { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public string repository_name { owned get; set; } [NoAccessorMethod] public uint type { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_require_restart_get_type ()")] public class RequireRestart : PackageKit.Source { [CCode (has_construct_function = false)] public RequireRestart (); [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public uint restart { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_results_get_type ()")] public class Results : GLib.Object { [CCode (has_construct_function = false)] public Results (); public bool add_category (PackageKit.Category item); public bool add_details (PackageKit.Details item); public bool add_distro_upgrade (PackageKit.DistroUpgrade item); public bool add_eula_required (PackageKit.EulaRequired item); public bool add_files (PackageKit.Files item); public bool add_media_change_required (PackageKit.MediaChangeRequired item); public bool add_message (PackageKit.Message item); public bool add_package (PackageKit.Package item); public bool add_repo_detail (PackageKit.RepoDetail item); public bool add_repo_signature_required (PackageKit.RepoSignatureRequired item); public bool add_require_restart (PackageKit.RequireRestart item); public bool add_transaction (PackageKit.TransactionPast item); public bool add_update_detail (PackageKit.UpdateDetail item); public GLib.GenericArray get_category_array (); public GLib.GenericArray get_details_array (); public GLib.GenericArray get_distro_upgrade_array (); public PackageKit.Error get_error_code (); public GLib.GenericArray get_eula_required_array (); public PackageKit.Exit get_exit_code (); public GLib.GenericArray get_files_array (); public GLib.GenericArray get_media_change_required_array (); public GLib.GenericArray get_message_array (); public GLib.GenericArray get_package_array (); public PackageKit.PackageSack get_package_sack (); public GLib.GenericArray get_repo_detail_array (); public GLib.GenericArray get_repo_signature_required_array (); public GLib.GenericArray get_require_restart_array (); public PackageKit.Restart get_require_restart_worst (); public PackageKit.Role get_role (); public GLib.GenericArray get_transaction_array (); public PackageKit.Bitfield get_transaction_flags (); public GLib.GenericArray get_update_detail_array (); public bool set_error_code (PackageKit.Error item); public bool set_exit_code (PackageKit.Exit exit_enum); public static void test (void* user_data); [NoAccessorMethod] public uint inputs { get; set; } [NoAccessorMethod] public PackageKit.Progress progress { owned get; set; } [NoAccessorMethod] public uint role { get; set; } [NoAccessorMethod] public uint64 transaction_flags { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_service_pack_get_type ()")] public class ServicePack : GLib.Object { [CCode (has_construct_function = false)] public ServicePack (); public bool check_valid (string filename) throws GLib.Error; public async void create_for_package_ids_async (string filename, string package_ids, string package_ids_exclude, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public async void create_for_updates_async (string filename, string package_ids_exclude, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public bool generic_finish (GLib.AsyncResult res) throws GLib.Error; public bool set_temp_directory (string directory); public static void test (void* user_data); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_source_get_type ()")] public class Source : GLib.Object { [CCode (has_construct_function = false)] public Source (); [NoAccessorMethod] public uint role { get; set; } [NoAccessorMethod] public string transaction_id { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_task_get_type ()")] public class Task : PackageKit.Client { [CCode (has_construct_function = false)] public Task (); public async void download_packages_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, string directory, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results download_packages_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, string directory, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; [NoWrapper] public virtual void eula_question (uint request, PackageKit.Results results); public PackageKit.Results generic_finish (GLib.AsyncResult res) throws GLib.Error; public async void get_categories_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_categories_sync (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_depends_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_depends_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_details_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_details_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_files_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_files_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public bool get_interactive (); public bool get_only_download (); public async void get_packages_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_packages_sync (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_repo_list_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_repo_list_sync (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_requires_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_requires_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool recursive, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public bool get_simulate (); public async void get_update_detail_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_update_detail_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void get_updates_async (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results get_updates_sync (PackageKit.Bitfield filters, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void install_files_async ([CCode (array_length = false, array_null_terminated = true)] string[] files, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results install_files_sync ([CCode (array_length = false, array_null_terminated = true)] string[] files, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void install_packages_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results install_packages_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; [NoWrapper] public virtual void key_question (uint request, PackageKit.Results results); [NoWrapper] public virtual void media_change_question (uint request, PackageKit.Results results); public async void refresh_cache_async (bool force, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results refresh_cache_sync (bool force, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void remove_packages_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool allow_deps, bool autoremove, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results remove_packages_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, bool allow_deps, bool autoremove, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void repair_system_async (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results repair_system_sync (GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void repo_enable_async (string repo_id, bool enabled, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results repo_enable_sync (string repo_id, bool enabled, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void resolve_async (PackageKit.Bitfield filters, string packages, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results resolve_sync (PackageKit.Bitfield filters, string packages, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_details_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_details_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_files_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_files_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_groups_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_groups_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public async void search_names_async (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results search_names_sync (PackageKit.Bitfield filters, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public void set_interactive (bool interactive); public void set_only_download (bool only_download); public void set_simulate (bool simulate); [NoWrapper] public virtual void simulate_question (uint request, PackageKit.Results results); public static void test (void* user_data); [NoWrapper] public virtual void untrusted_question (uint request, PackageKit.Results results); public async void update_packages_async ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results update_packages_sync ([CCode (array_length = false, array_null_terminated = true)] string[] package_ids, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public bool user_accepted (uint request); public bool user_declined (uint request); public async void what_provides_async (PackageKit.Bitfield filters, PackageKit.Provides provides, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback); public PackageKit.Results what_provides_sync (PackageKit.Bitfield filters, PackageKit.Provides provides, [CCode (array_length = false, array_null_terminated = true)] string[] values, GLib.Cancellable? cancellable, PackageKit.ProgressCallback progress_callback) throws GLib.Error; public bool interactive { get; set; } public bool only_download { get; set; } public bool simulate { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_transaction_list_get_type ()")] public class TransactionList : GLib.Object { [CCode (has_construct_function = false)] public TransactionList (); [CCode (array_length = false, array_null_terminated = true)] public string[] get_ids (); public static void test (void* user_data); public virtual signal void added (string tid); public virtual signal void removed (string tid); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_transaction_past_get_type ()")] public class TransactionPast : PackageKit.Source { [CCode (has_construct_function = false)] public TransactionPast (); [NoAccessorMethod] public string cmdline { owned get; set; } [NoAccessorMethod] public string data { owned get; set; } [NoAccessorMethod] public uint duration { get; set; } [NoAccessorMethod] public uint role { get; set; } [NoAccessorMethod] public bool succeeded { get; set; } [NoAccessorMethod] public string tid { owned get; set; } [NoAccessorMethod] public string timespec { owned get; set; } [NoAccessorMethod] public uint uid { get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", type_id = "pk_update_detail_get_type ()")] public class UpdateDetail : PackageKit.Source { [CCode (has_construct_function = false)] public UpdateDetail (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_bugzilla_urls (); public unowned string get_changelog (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_cve_urls (); public unowned string get_issued (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_obsoletes (); public unowned string get_package_id (); public PackageKit.Restart get_restart (); public PackageKit.UpdateState get_state (); public unowned string get_update_text (); public unowned string get_updated (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_updates (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_vendor_urls (); [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] bugzilla_urls { owned get; set; } [NoAccessorMethod] public string changelog { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] cve_urls { owned get; set; } [NoAccessorMethod] public string issued { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] obsoletes { owned get; set; } [NoAccessorMethod] public string package_id { owned get; set; } [NoAccessorMethod] public uint restart { get; set; } [NoAccessorMethod] public uint state { get; set; } [NoAccessorMethod] public string update_text { owned get; set; } [NoAccessorMethod] public string updated { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] updates { owned get; set; } [CCode (array_length = false, array_null_terminated = true)] [NoAccessorMethod] public string[] vendor_urls { owned get; set; } } [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] [SimpleType] public struct Bitfield : uint64 { public static void test (void* user_data); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", has_type_id = false)] public struct EnumMatch { public uint value; public weak global::string string; } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkAuthorizeEnum", cprefix = "PK_AUTHORIZE_ENUM_", type_id = "pk_authorize_enum_get_type ()")] [GIR (name = "AuthorizeEnum")] public enum Authorize { UNKNOWN, YES, NO, INTERACTIVE, LAST; public static PackageKit.Authorize type_enum_from_string (string authorize_type); public static unowned string type_enum_to_string (PackageKit.Authorize authorize_type); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkDistroUpgradeEnum", cprefix = "PK_DISTRO_UPGRADE_ENUM_", type_id = "pk_distro_upgrade_enum_get_type ()")] [GIR (name = "DistroUpgradeEnum")] public enum DistroUpgradeType { UNKNOWN, STABLE, UNSTABLE, LAST } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkErrorEnum", cprefix = "PK_ERROR_ENUM_", type_id = "pk_error_enum_get_type ()")] [GIR (name = "ErrorEnum")] public enum ErrorType { UNKNOWN, OOM, NO_NETWORK, NOT_SUPPORTED, INTERNAL_ERROR, GPG_FAILURE, PACKAGE_ID_INVALID, PACKAGE_NOT_INSTALLED, PACKAGE_NOT_FOUND, PACKAGE_ALREADY_INSTALLED, PACKAGE_DOWNLOAD_FAILED, GROUP_NOT_FOUND, GROUP_LIST_INVALID, DEP_RESOLUTION_FAILED, FILTER_INVALID, CREATE_THREAD_FAILED, TRANSACTION_ERROR, TRANSACTION_CANCELLED, NO_CACHE, REPO_NOT_FOUND, CANNOT_REMOVE_SYSTEM_PACKAGE, PROCESS_KILL, FAILED_INITIALIZATION, FAILED_FINALISE, FAILED_CONFIG_PARSING, CANNOT_CANCEL, CANNOT_GET_LOCK, NO_PACKAGES_TO_UPDATE, CANNOT_WRITE_REPO_CONFIG, LOCAL_INSTALL_FAILED, BAD_GPG_SIGNATURE, MISSING_GPG_SIGNATURE, CANNOT_INSTALL_SOURCE_PACKAGE, REPO_CONFIGURATION_ERROR, NO_LICENSE_AGREEMENT, FILE_CONFLICTS, PACKAGE_CONFLICTS, REPO_NOT_AVAILABLE, INVALID_PACKAGE_FILE, PACKAGE_INSTALL_BLOCKED, PACKAGE_CORRUPT, ALL_PACKAGES_ALREADY_INSTALLED, FILE_NOT_FOUND, NO_MORE_MIRRORS_TO_TRY, NO_DISTRO_UPGRADE_DATA, INCOMPATIBLE_ARCHITECTURE, NO_SPACE_ON_DEVICE, MEDIA_CHANGE_REQUIRED, NOT_AUTHORIZED, UPDATE_NOT_FOUND, CANNOT_INSTALL_REPO_UNSIGNED, CANNOT_UPDATE_REPO_UNSIGNED, CANNOT_GET_FILELIST, CANNOT_GET_REQUIRES, CANNOT_DISABLE_REPOSITORY, RESTRICTED_DOWNLOAD, PACKAGE_FAILED_TO_CONFIGURE, PACKAGE_FAILED_TO_BUILD, PACKAGE_FAILED_TO_INSTALL, PACKAGE_FAILED_TO_REMOVE, UPDATE_FAILED_DUE_TO_RUNNING_PROCESS, PACKAGE_DATABASE_CHANGED, PROVIDE_TYPE_NOT_SUPPORTED, INSTALL_ROOT_INVALID, CANNOT_FETCH_SOURCES, CANCELLED_PRIORITY, UNFINISHED_TRANSACTION, LOCK_REQUIRED, LAST } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkExitEnum", cprefix = "PK_EXIT_ENUM_", type_id = "pk_exit_enum_get_type ()")] [GIR (name = "ExitEnum")] public enum Exit { UNKNOWN, SUCCESS, FAILED, CANCELLED, KEY_REQUIRED, EULA_REQUIRED, KILLED, MEDIA_CHANGE_REQUIRED, NEED_UNTRUSTED, CANCELLED_PRIORITY, SKIP_TRANSACTION, REPAIR_REQUIRED, LAST; public static PackageKit.Exit enum_from_string (string exit); public static unowned string enum_to_string (PackageKit.Exit exit); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkFilterEnum", cprefix = "PK_FILTER_ENUM_", type_id = "pk_filter_enum_get_type ()")] [GIR (name = "FilterEnum")] public enum Filter { UNKNOWN, NONE, INSTALLED, NOT_INSTALLED, DEVELOPMENT, NOT_DEVELOPMENT, GUI, NOT_GUI, FREE, NOT_FREE, VISIBLE, NOT_VISIBLE, SUPPORTED, NOT_SUPPORTED, BASENAME, NOT_BASENAME, NEWEST, NOT_NEWEST, ARCH, NOT_ARCH, SOURCE, NOT_SOURCE, COLLECTIONS, NOT_COLLECTIONS, APPLICATION, NOT_APPLICATION, DOWNLOADED, NOT_DOWNLOADED, LAST; public static PackageKit.Bitfield bitfield_from_string (string filters); public static string bitfield_to_string (PackageKit.Bitfield filters); public static PackageKit.Filter enum_from_string (string filter); public static unowned string enum_to_string (PackageKit.Filter filter); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkGroupEnum", cprefix = "PK_GROUP_ENUM_", type_id = "pk_group_enum_get_type ()")] [GIR (name = "GroupEnum")] public enum Group { UNKNOWN, ACCESSIBILITY, ACCESSORIES, ADMIN_TOOLS, COMMUNICATION, DESKTOP_GNOME, DESKTOP_KDE, DESKTOP_OTHER, DESKTOP_XFCE, EDUCATION, FONTS, GAMES, GRAPHICS, INTERNET, LEGACY, LOCALIZATION, MAPS, MULTIMEDIA, NETWORK, OFFICE, OTHER, POWER_MANAGEMENT, PROGRAMMING, PUBLISHING, REPOS, SECURITY, SERVERS, SYSTEM, VIRTUALIZATION, SCIENCE, DOCUMENTATION, ELECTRONICS, COLLECTIONS, VENDOR, NEWEST, LAST; public static PackageKit.Bitfield bitfield_from_string (string groups); public static string bitfield_to_string (PackageKit.Bitfield groups); public static PackageKit.Group enum_from_string (string group); public static unowned string enum_to_string (PackageKit.Group group); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkInfoEnum", cprefix = "PK_INFO_ENUM_", type_id = "pk_info_enum_get_type ()")] [GIR (name = "InfoEnum")] public enum Info { UNKNOWN, INSTALLED, AVAILABLE, LOW, ENHANCEMENT, NORMAL, BUGFIX, IMPORTANT, SECURITY, BLOCKED, DOWNLOADING, UPDATING, INSTALLING, REMOVING, CLEANUP, OBSOLETING, COLLECTION_INSTALLED, COLLECTION_AVAILABLE, FINISHED, REINSTALLING, DOWNGRADING, PREPARING, DECOMPRESSING, UNTRUSTED, TRUSTED, LAST; public static PackageKit.Info enum_from_string (string info); public static unowned string enum_to_localised_past (PackageKit.Info info); public static unowned string enum_to_localised_present (PackageKit.Info info); public static unowned string enum_to_string (PackageKit.Info info); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkMediaTypeEnum", cprefix = "PK_MEDIA_TYPE_ENUM_", type_id = "pk_media_type_enum_get_type ()")] [GIR (name = "MediaTypeEnum")] public enum MediaType { UNKNOWN, CD, DVD, DISC, LAST; public static PackageKit.MediaType enum_from_string (string media_type); public static unowned string enum_to_string (PackageKit.MediaType media_type); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkMessageEnum", cprefix = "PK_MESSAGE_ENUM_", type_id = "pk_message_enum_get_type ()")] [GIR (name = "MessageEnum")] public enum MessageType { UNKNOWN, BROKEN_MIRROR, CONNECTION_REFUSED, PARAMETER_INVALID, PRIORITY_INVALID, BACKEND_ERROR, DAEMON_ERROR, CACHE_BEING_REBUILT, NEWER_PACKAGE_EXISTS, COULD_NOT_FIND_PACKAGE, CONFIG_FILES_CHANGED, PACKAGE_ALREADY_INSTALLED, AUTOREMOVE_IGNORED, REPO_METADATA_DOWNLOAD_FAILED, REPO_FOR_DEVELOPERS_ONLY, OTHER_UPDATES_HELD_BACK, LAST } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkNetworkEnum", cprefix = "PK_NETWORK_ENUM_", type_id = "pk_network_enum_get_type ()")] [GIR (name = "NetworkEnum")] public enum Network { UNKNOWN, OFFLINE, ONLINE, WIRED, WIFI, MOBILE, LAST; public static PackageKit.Network enum_from_string (string network); public static unowned string enum_to_string (PackageKit.Network network); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_PACKAGE_SACK_SORT_TYPE_", type_id = "pk_package_sack_sort_type_get_type ()")] public enum PackageSackSortType { NAME, INFO, PACKAGE_ID, SUMMARY, LAST } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_PROGRESS_TYPE_", type_id = "pk_progress_type_get_type ()")] public enum ProgressType { PACKAGE_ID, TRANSACTION_ID, PERCENTAGE, ALLOW_CANCEL, STATUS, ROLE, CALLER_ACTIVE, ELAPSED_TIME, REMAINING_TIME, SPEED, DOWNLOAD_SIZE_REMAINING, UID, PACKAGE, ITEM_PROGRESS, TRANSACTION_FLAGS, INVALID } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkProvidesEnum", cprefix = "PK_PROVIDES_ENUM_", type_id = "pk_provides_enum_get_type ()")] [GIR (name = "ProvidesEnum")] public enum Provides { UNKNOWN, ANY, MODALIAS, CODEC, MIMETYPE, FONT, HARDWARE_DRIVER, POSTSCRIPT_DRIVER, PLASMA_SERVICE, SHARED_LIB, PYTHON, LANGUAGE_SUPPORT, LAST; public static PackageKit.Provides enum_from_string (string provides); public static unowned string enum_to_string (PackageKit.Provides provides); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkRestartEnum", cprefix = "PK_RESTART_ENUM_", type_id = "pk_restart_enum_get_type ()")] [GIR (name = "RestartEnum")] public enum Restart { UNKNOWN, NONE, APPLICATION, SESSION, SYSTEM, SECURITY_SESSION, SECURITY_SYSTEM, LAST; public static PackageKit.Restart enum_from_string (string restart); public static unowned string enum_to_string (PackageKit.Restart restart); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkRoleEnum", cprefix = "PK_ROLE_ENUM_", type_id = "pk_role_enum_get_type ()")] [GIR (name = "RoleEnum")] public enum Role { UNKNOWN, CANCEL, GET_DEPENDS, GET_DETAILS, GET_FILES, GET_PACKAGES, GET_REPO_LIST, GET_REQUIRES, GET_UPDATE_DETAIL, GET_UPDATES, INSTALL_FILES, INSTALL_PACKAGES, INSTALL_SIGNATURE, REFRESH_CACHE, REMOVE_PACKAGES, REPO_ENABLE, REPO_SET_DATA, RESOLVE, SEARCH_DETAILS, SEARCH_FILE, SEARCH_GROUP, SEARCH_NAME, UPDATE_PACKAGES, WHAT_PROVIDES, ACCEPT_EULA, DOWNLOAD_PACKAGES, GET_DISTRO_UPGRADES, GET_CATEGORIES, GET_OLD_TRANSACTIONS, UPGRADE_SYSTEM, REPAIR_SYSTEM, LAST; public static PackageKit.Bitfield bitfield_from_string (string roles); public static string bitfield_to_string (PackageKit.Bitfield roles); public static PackageKit.Role enum_from_string (string role); public static unowned string enum_to_localised_present (PackageKit.Role role); public static unowned string enum_to_string (PackageKit.Role role); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkSigTypeEnum", cprefix = "PK_SIGTYPE_ENUM_", type_id = "pk_sig_type_enum_get_type ()")] [GIR (name = "SigTypeEnum")] public enum SigType { UNKNOWN, GPG, LAST; public static PackageKit.SigType enum_from_string (string sig_type); public static unowned string enum_to_string (PackageKit.SigType sig_type); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkStatusEnum", cprefix = "PK_STATUS_ENUM_", type_id = "pk_status_enum_get_type ()")] [GIR (name = "StatusEnum")] public enum Status { UNKNOWN, WAIT, SETUP, RUNNING, QUERY, INFO, REMOVE, REFRESH_CACHE, DOWNLOAD, INSTALL, UPDATE, CLEANUP, OBSOLETE, DEP_RESOLVE, SIG_CHECK, TEST_COMMIT, COMMIT, REQUEST, FINISHED, CANCEL, DOWNLOAD_REPOSITORY, DOWNLOAD_PACKAGELIST, DOWNLOAD_FILELIST, DOWNLOAD_CHANGELOG, DOWNLOAD_GROUP, DOWNLOAD_UPDATEINFO, REPACKAGING, LOADING_CACHE, SCAN_APPLICATIONS, GENERATE_PACKAGE_LIST, WAITING_FOR_LOCK, WAITING_FOR_AUTH, SCAN_PROCESS_LIST, CHECK_EXECUTABLE_FILES, CHECK_LIBRARIES, COPY_FILES, LAST; public static PackageKit.Status enum_from_string (string status); public static unowned string enum_to_localised_text (PackageKit.Status status); public static unowned string enum_to_string (PackageKit.Status status); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkTransactionFlagEnum", cprefix = "PK_TRANSACTION_FLAG_ENUM_", type_id = "pk_transaction_flag_enum_get_type ()")] [GIR (name = "TransactionFlagEnum")] public enum TransactionFlag { NONE, ONLY_TRUSTED, SIMULATE, ONLY_DOWNLOAD, LAST; public static PackageKit.Bitfield bitfield_from_string (string transaction_flags); public static string bitfield_to_string (PackageKit.Bitfield transaction_flags); public static PackageKit.TransactionFlag enum_from_string (string transaction_flag); public static unowned string enum_to_string (PackageKit.TransactionFlag transaction_flag); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkUpdateStateEnum", cprefix = "PK_UPDATE_STATE_ENUM_", type_id = "pk_update_state_enum_get_type ()")] [GIR (name = "UpdateStateEnum")] public enum UpdateState { UNKNOWN, STABLE, UNSTABLE, TESTING, LAST; public static PackageKit.UpdateState enum_from_string (string update_state); public static unowned string enum_to_string (PackageKit.UpdateState update_state); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PkUpgradeKindEnum", cprefix = "PK_UPGRADE_KIND_ENUM_", type_id = "pk_upgrade_kind_enum_get_type ()")] [GIR (name = "UpgradeKindEnum")] public enum UpgradeKind { UNKNOWN, MINIMAL, DEFAULT, COMPLETE, LAST; public static PackageKit.UpgradeKind enum_from_string (string upgrade_kind); public static unowned string enum_to_string (PackageKit.UpgradeKind upgrade_kind); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_CATALOG_ERROR_")] public errordomain CatalogError { FAILED; public static GLib.Quark quark (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_CLIENT_ERROR_")] public errordomain ClientError { FAILED, FAILED_AUTH, NO_TID, ALREADY_TID, ROLE_UNKNOWN, CANNOT_START_DAEMON, INVALID_INPUT, INVALID_FILE, NOT_SUPPORTED, DECLINED_SIMULATION, LAST; public static GLib.Quark quark (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_CONTROL_ERROR_")] public errordomain ControlError { FAILED, CANNOT_START_DAEMON; public static GLib.Quark quark (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cprefix = "PK_SERVICE_PACK_ERROR_")] public errordomain ServicePackError { FAILED_SETUP, FAILED_DOWNLOAD, FAILED_EXTRACTION, FAILED_CREATE, NOTHING_TO_DO, NOT_COMPATIBLE; public static GLib.Quark quark (); } [CCode (cheader_filename = "packagekit-glib2/packagekit.h", instance_pos = 1.9)] public delegate bool PackageSackFilterFunc (PackageKit.Package package); [CCode (cheader_filename = "packagekit-glib2/packagekit.h", instance_pos = 2.9)] public delegate void ProgressCallback (PackageKit.Progress progress, PackageKit.ProgressType type); [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_CATALOG_FILE_EXTENSION")] public const string CATALOG_FILE_EXTENSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_CATALOG_FILE_HEADER")] public const string CATALOG_FILE_HEADER; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_DBUS_INTERFACE")] public const string DBUS_INTERFACE; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_DBUS_INTERFACE_TRANSACTION")] public const string DBUS_INTERFACE_TRANSACTION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_DBUS_PATH")] public const string DBUS_PATH; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_DBUS_SERVICE")] public const string DBUS_SERVICE; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_DESKTOP_DEFAULT_APPLICATION_DIR")] public const string DESKTOP_DEFAULT_APPLICATION_DIR; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_MAJOR_VERSION")] public const int MAJOR_VERSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_MICRO_VERSION")] public const int MICRO_VERSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_MINOR_VERSION")] public const int MINOR_VERSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_PACKAGE_IDS_DELIM")] public const string PACKAGE_IDS_DELIM; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_PACKAGE_ID_ARCH")] public const int PACKAGE_ID_ARCH; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_PACKAGE_ID_DATA")] public const int PACKAGE_ID_DATA; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_PACKAGE_ID_NAME")] public const int PACKAGE_ID_NAME; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_PACKAGE_ID_VERSION")] public const int PACKAGE_ID_VERSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_SERVICE_PACK_FILE_EXTENSION")] public const string SERVICE_PACK_FILE_EXTENSION; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_SERVICE_PACK_GROUP_NAME")] public const string SERVICE_PACK_GROUP_NAME; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_SYSTEM_PACKAGE_CACHE_FILENAME")] public const string SYSTEM_PACKAGE_CACHE_FILENAME; [CCode (cheader_filename = "packagekit-glib2/packagekit.h", cname = "PK_SYSTEM_PACKAGE_LIST_FILENAME")] public const string SYSTEM_PACKAGE_LIST_FILENAME; [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void common_test (void* user_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void debug_add_log_domain (string log_domain); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static bool debug_is_verbose (); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void debug_set_verbose (bool verbose); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static unowned string enum_find_string (PackageKit.EnumMatch table, uint value); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static uint enum_find_value (PackageKit.EnumMatch table, string string); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void enum_test (void* user_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static string get_distro_id (); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static string iso8601_from_date (GLib.Date date); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static string iso8601_present (); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__POINTER_UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__POINTER_UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_BOOLEAN (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_BOXED (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_BOOLEAN (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_BOOLEAN_STRING_UINT_STRING_UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_BOOLEAN_UINT_UINT_STRING_UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_BOOLEAN (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_BOOLEAN_STRING_UINT_STRING_UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_STRING_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_UINT64 (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_STRING_UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_STRING_STRING_STRING_UINT64 (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_UINT_STRING_STRING_UINT64 (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_STRING_UINT_UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_UINT_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__STRING_UINT_UINT_UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__UINT_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__UINT_STRING_STRING (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__UINT_STRING_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void marshal_VOID__UINT_UINT_UINT_UINT (GLib.Closure closure, GLib.Value return_value, uint n_param_values, GLib.Value param_values, void* invocation_hint, void* marshal_data); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static void polkit_agent_close (); [CCode (cheader_filename = "packagekit-glib2/packagekit.h")] public static int polkit_agent_open (); } ./Listaller-0.5.8/vapi/packagekit-plugin.vapi0000664000175000017500000003512512176743563021267 0ustar matthiasmatthias/* packagekit-plugin.vapi generated by vapigen, do not modify. */ [CCode (cprefix = "Pk", gir_namespace = "PackageKitPlugin", gir_version = "1.0", lower_case_cprefix = "pk_")] namespace PkPlugin { [CCode (cheader_filename = "plugin/packagekit-plugin.h", type_id = "pk_backend_get_type ()")] public class Backend : GLib.Object { [CCode (has_construct_function = false)] public Backend (); public void accept_eula (string eula_id); public static unowned string bool_to_string (bool value); public void cancel (PkPlugin.BackendJob job); public void destroy (); public void download_packages (PkPlugin.BackendJob job, string package_ids, string directory); public string get_accepted_eula_string (); public unowned string get_author (); public void get_categories (PkPlugin.BackendJob job); public void get_depends (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string package_ids, bool recursive); public unowned string get_description (); public void get_details (PkPlugin.BackendJob job, string package_ids); public void get_distro_upgrades (PkPlugin.BackendJob job); public void get_files (PkPlugin.BackendJob job, string package_ids); public PackageKit.Bitfield get_filters (); public PackageKit.Bitfield get_groups (); [CCode (array_length = false, array_null_terminated = true)] public string[] get_mime_types (); public unowned string get_name (); public void get_packages (PkPlugin.BackendJob job, PackageKit.Bitfield filters); public PackageKit.Bitfield get_provides (); public void get_repo_list (PkPlugin.BackendJob job, PackageKit.Bitfield filters); public void get_requires (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string package_ids, bool recursive); public PackageKit.Bitfield get_roles (); public void get_update_detail (PkPlugin.BackendJob job, string package_ids); public void get_updates (PkPlugin.BackendJob job, PackageKit.Bitfield filters); public void implement (PackageKit.Role role); public void initialize (); public void install_files (PkPlugin.BackendJob job, PackageKit.Bitfield transaction_flags, string full_paths); public void install_packages (PkPlugin.BackendJob job, PackageKit.Bitfield transaction_flags, string package_ids); public void install_signature (PkPlugin.BackendJob job, PackageKit.SigType type, string key_id, string package_id); public bool is_eula_valid (string eula_id); public bool is_implemented (PackageKit.Role role); public bool is_online (); public bool load () throws GLib.Error; public void refresh_cache (PkPlugin.BackendJob job, bool force); public void remove_packages (PkPlugin.BackendJob job, PackageKit.Bitfield transaction_flags, string package_ids, bool allow_deps, bool autoremove); public void repair_system (PkPlugin.BackendJob job, PackageKit.Bitfield transaction_flags); public void repo_enable (PkPlugin.BackendJob job, string repo_id, bool enabled); public bool repo_list_changed (); public void repo_set_data (PkPlugin.BackendJob job, string repo_id, string parameter, string value); public void reset_job (PkPlugin.BackendJob job); public void resolve (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string packages); public void search_details (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string search); public void search_files (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string search); public void search_groups (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string search); public void search_names (PkPlugin.BackendJob job, PackageKit.Bitfield filters, string search); public void start_job (PkPlugin.BackendJob job); public void stop_job (PkPlugin.BackendJob job); public bool supports_parallelization (); public bool unload (); public void update_packages (PkPlugin.BackendJob job, PackageKit.Bitfield transaction_flags, string package_ids); public void upgrade_system (PkPlugin.BackendJob job, string distro_id, PackageKit.UpgradeKind upgrade_kind); public bool watch_file (string filename, PkPlugin.BackendFileChanged func); public void what_provides (PkPlugin.BackendJob job, PackageKit.Bitfield filters, PackageKit.Provides provides, string search); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", type_id = "pk_backend_job_get_type ()")] public class BackendJob : GLib.Object { [CCode (has_construct_function = false)] public BackendJob (); public void category (string parent_id, string cat_id, string name, string summary, string icon); public void details (string package_id, string license, PackageKit.Group group, string description, string url, ulong size); public void distro_upgrade (PackageKit.DistroUpgradeType type, string name, string summary); public void eula_required (string eula_id, string package_id, string vendor_name, string license_agreement); public void files (string package_id, string files); public void finished (); public bool get_allow_cancel (); public void* get_backend (); public PkPlugin.Hint get_background (); public uint get_cache_age (); public unowned string get_cmdline (); public PackageKit.Exit get_exit_code (); public string get_frontend_socket (); public PkPlugin.Hint get_interactive (); public bool get_is_error_set (); public bool get_is_finished (); public string get_locale (); public bool get_locked (); public string get_no_proxy (); public string get_pac (); public GLib.Variant get_parameters (); public string get_proxy_ftp (); public string get_proxy_http (); public string get_proxy_https (); public string get_proxy_socks (); public PackageKit.Role get_role (); public uint get_runtime (); public bool get_started (); public PackageKit.Bitfield get_transaction_flags (); public uint get_uid (); public void* get_user_data (); public bool get_vfunc_enabled (PkPlugin.BackendJobSignal signal_kind); public bool has_set_error_code (); public void media_change_required (PackageKit.MediaType media_type, string media_id, string media_text); public void not_implemented_yet (string method); public void package (PackageKit.Info info, string package_id, string summary); public void repo_detail (string repo_id, string description, bool enabled); public void repo_signature_required (string package_id, string repository_name, string key_url, string key_userid, string key_id, string key_fingerprint, string key_timestamp, PackageKit.SigType type); public void require_restart (PackageKit.Restart restart, string package_id); public void reset (); public void set_allow_cancel (bool allow_cancel); public void set_backend (void* backend); public void set_background (PkPlugin.Hint background); public void set_cache_age (uint cache_age); public void set_cmdline (string cmdline); public void set_download_size_remaining (uint64 download_size_remaining); public void set_exit_code (PackageKit.Exit exit); public bool set_frontend_socket (string frontend_socket); public void set_interactive (PkPlugin.Hint interactive); public void set_item_progress (string package_id, PackageKit.Status status, uint percentage); public void set_locale (string code); public void set_locked (bool locked); public void set_parameters (GLib.Variant @params); public void set_percentage (uint percentage); public void set_proxy (string proxy_http, string proxy_https, string proxy_ftp, string proxy_socks, string no_proxy, string pac); public void set_role (PackageKit.Role role); public void set_speed (uint speed); public void set_started (bool started); public void set_status (PackageKit.Status status); public void set_transaction_flags (PackageKit.Bitfield transaction_flags); public void set_uid (uint uid); public void set_user_data (void* user_data); public void set_vfunc (PkPlugin.BackendJobSignal signal_kind, PkPlugin.BackendJobVFunc vfunc); public bool thread_create (owned PkPlugin.BackendJobThreadFunc func); public void update_detail (string package_id, string updates, string obsoletes, string vendor_urls, string bugzilla_urls, string cve_urls, PackageKit.Restart restart, string update_text, string changelog, PackageKit.UpdateState state, string issued, string updated); public bool use_background (); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", type_id = "pk_conf_get_type ()")] public class Conf : GLib.Object { [CCode (has_construct_function = false)] public Conf (); public bool get_bool (string key); public static string get_filename (); public int get_int (string key); public string get_string (string key); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_strv (string key); public void set_bool (string key, bool value); public void set_string (string key, string value); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", type_id = "pk_transaction_get_type ()")] public class Transaction : GLib.Object { [CCode (has_construct_function = false)] public Transaction (); public void add_supported_content_type (string mime_type); public void cancel_bg (); public static GLib.Quark error_quark (); public unowned PkPlugin.BackendJob get_backend_job (); public unowned PkPlugin.Conf get_conf (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_full_paths (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_package_ids (); public unowned PackageKit.Results get_results (); public PackageKit.Role get_role (); public PkPlugin.TransactionState get_state (); public unowned string get_tid (); public PackageKit.Bitfield get_transaction_flags (); public uint get_uid (); [CCode (array_length = false, array_null_terminated = true)] public unowned string[] get_values (); public bool is_exclusive (); public bool is_finished_with_lock_required (); public void make_exclusive (); public void reset_after_lock_error (); public bool run (); public void set_backend (PkPlugin.Backend backend); public void set_full_paths (string full_paths); public void set_package_ids (string package_ids); public bool set_state (PkPlugin.TransactionState state); public void signals_reset (PkPlugin.BackendJob job); public void skip_auth_checks (bool skip_checks); public static unowned string state_to_string (PkPlugin.TransactionState state); public signal void finished (); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", has_type_id = false)] public struct Plugin { public weak PkPlugin.Backend backend; public weak PkPlugin.BackendJob job; public void destroy (); public static unowned string get_description (); public void initialize (); public void state_changed (); public void transaction_content_types (PkPlugin.Transaction transaction); public void transaction_finished_end (PkPlugin.Transaction transaction); public void transaction_finished_results (PkPlugin.Transaction transaction); public void transaction_run (PkPlugin.Transaction transaction); public void transaction_started (PkPlugin.Transaction transaction); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", cprefix = "PK_BACKEND_SIGNAL_", has_type_id = false)] public enum BackendJobSignal { ALLOW_CANCEL, DETAILS, ERROR_CODE, DISTRO_UPGRADE, FINISHED, MESSAGE, PACKAGE, ITEM_PROGRESS, FILES, PERCENTAGE, REMAINING, SPEED, DOWNLOAD_SIZE_REMAINING, REPO_DETAIL, REPO_SIGNATURE_REQUIRED, EULA_REQUIRED, MEDIA_CHANGE_REQUIRED, REQUIRE_RESTART, STATUS_CHANGED, LOCKED_CHANGED, UPDATE_DETAIL, CATEGORY, LAST } [CCode (cheader_filename = "plugin/packagekit-plugin.h", cname = "PkHintEnum", cprefix = "PK_HINT_ENUM_", has_type_id = false)] [GIR (name = "HintEnum")] public enum Hint { FALSE, TRUE, UNSET, INVALID, LAST; public static PkPlugin.Hint enum_from_string (string hint); public static unowned string enum_to_string (PkPlugin.Hint hint); } [CCode (cheader_filename = "plugin/packagekit-plugin.h", cprefix = "PK_PLUGIN_PHASE_", has_type_id = false)] public enum PluginPhase { INIT, TRANSACTION_CONTENT_TYPES, TRANSACTION_RUN, TRANSACTION_STARTED, TRANSACTION_FINISHED_RESULTS, TRANSACTION_FINISHED_END, DESTROY, STATE_CHANGED, UNKNOWN } [CCode (cheader_filename = "plugin/packagekit-plugin.h", cprefix = "PK_TRANSACTION_STATE_", has_type_id = false)] public enum TransactionState { NEW, WAITING_FOR_AUTH, COMMITTED, READY, RUNNING, FINISHED, UNKNOWN } [CCode (cheader_filename = "plugin/packagekit-plugin.h", has_target = false)] public delegate void BackendFileChanged (PkPlugin.Backend backend, void* data); [CCode (cheader_filename = "plugin/packagekit-plugin.h", instance_pos = 2.9)] public delegate void BackendJobThreadFunc (PkPlugin.BackendJob job, GLib.Variant @params); [CCode (cheader_filename = "plugin/packagekit-plugin.h", instance_pos = 2.9)] public delegate void BackendJobVFunc (PkPlugin.BackendJob job, void* object); [CCode (cheader_filename = "plugin/packagekit-plugin.h", has_target = false)] public delegate void PluginFunc (PkPlugin.Plugin plugin); [CCode (cheader_filename = "plugin/packagekit-plugin.h", has_target = false)] public delegate unowned string PluginGetDescFunc (); [CCode (cheader_filename = "plugin/packagekit-plugin.h", has_target = false)] public delegate void PluginTransactionFunc (PkPlugin.Plugin plugin, PkPlugin.Transaction transaction); [CCode (cheader_filename = "plugin/packagekit-plugin.h", cname = "PK_BACKEND_PERCENTAGE_INVALID")] public const int BACKEND_PERCENTAGE_INVALID; [CCode (cheader_filename = "plugin/packagekit-plugin.h", cname = "PK_CONF_VALUE_INT_MISSING")] public const int CONF_VALUE_INT_MISSING; [CCode (cheader_filename = "plugin/packagekit-plugin.h", cname = "PK_TRANSACTION_ALL_BACKEND_SIGNALS")] public const int TRANSACTION_ALL_BACKEND_SIGNALS; [CCode (cheader_filename = "plugin/packagekit-plugin.h", cname = "PK_TRANSACTION_NO_BACKEND_SIGNALS")] public const int TRANSACTION_NO_BACKEND_SIGNALS; [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static bool directory_remove_contents (string directory); [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static GLib.DBusNodeInfo load_introspection (string filename) throws GLib.Error; [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static uint strlen (string text, uint len); [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static bool strtoint (string text, int value); [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static bool strtouint (string text, uint value); [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static bool strtouint64 (string text, uint64 value); [CCode (cheader_filename = "plugin/packagekit-plugin.h")] public static bool strzero (string text); } ./Listaller-0.5.8/vapi/libarchive.deps0000664000175000017500000000000612176743563017762 0ustar matthiasmatthiasposix ./Listaller-0.5.8/vapi/PackageKitGlib-1.0.metadata0000664000175000017500000000031112176743563021573 0ustar matthiasmatthias// Metadata for PackageKit GIR PackageKitGlib name="PackageKit" Control.locked#virtual_method skip DistroUpgradeEnum name="DistroUpgradeType" ErrorEnum name="ErrorType" MessageEnum name="MessageType" ./Listaller-0.5.8/vapi/generate_vapi.sh0000775000175000017500000000065012176743563020152 0ustar matthiasmatthias#!/bin/sh # Small helper script to generate vapi files from GIR vapigen --metadatadir=. -d . --vapidir=. \ /usr/share/gir-1.0/PackageKitGlib-1.0.gir \ --library=packagekit-glib2 \ --pkg glib-2.0 --pkg gio-2.0 --pkg gobject-2.0 vapigen --metadatadir=. -d . --vapidir=. \ /usr/share/gir-1.0/PackageKitPlugin-1.0.gir \ --library=packagekit-plugin \ --pkg glib-2.0 --pkg gio-2.0 --pkg gobject-2.0 --pkg packagekit-glib2 ./Listaller-0.5.8/vapi/gpgme.deps0000664000175000017500000000001212176743563016746 0ustar matthiasmatthiasgpg-error ./Listaller-0.5.8/vapi/gpgme.vapi0000664000175000017500000005412612176743563016771 0ustar matthiasmatthias/* libgpgme.vapi * * Copyright (C) 2009 Sebastian Reichel * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ /** * GPGME is an API wrapper around GnuPG, which parses the output of GnuPG. */ [CCode (lower_case_cprefix = "gpgme_", cheader_filename = "gpgme.h")] namespace GPG { /** * EngineInfo as List */ [CCode (cname = "struct _gpgme_engine_info")] public struct EngineInfo { /** * Next entry in the list */ EngineInfo* next; /** * The protocol ID */ Protocol protocol; /** * filename of the engine binary */ string filename; /** * version string of the installed binary */ string version; /** * minimum version required for gpgme */ string req_version; /** * home directory to be used or null for default */ string? home; } /** * A Key from the Keyring */ [CCode (cname = "struct _gpgme_key", ref_function = "gpgme_key_ref", ref_function_void = true, unref_function = "gpgme_key_unref", free_function = "gpgme_key_release")] public class Key { public bool revoked; public bool expired; public bool disabled; public bool invalid; public bool can_encrypt; public bool can_sign; public bool can_certify; public bool secret; public bool can_authenticate; public bool is_qualified; public Protocol protocol; /** * If protocol is CMS, this string contains the issuer's serial */ public string issuer_serial; /** * If protocol is CMS, this string contains the issuer's name */ public string issuer_name; /** * If protocol is CMS, this string contains the issuer's ID */ public string issuer_id; /** * If protocol is OpenPGP, this field contains the owner trust level */ public Validity owner_trust; /** * The key's subkeys */ public SubKey* subkeys; /** * The key's user ids */ public UserID* uids; public KeylistMode keylist_mode; } /** * A signature notation */ [CCode (cname = "struct _gpgme_sig_notation")] public struct SigNotation { /** * The next SigNotation from the list */ SigNotation* next; /** * If name is a null pointer value contains a policy url rather than a notation */ string? name; /** * The value of the notation data */ string value; /** * The length of the name of the notation data */ int name_len; /** * The length of the value of the notation data */ int value_len; /** * The accumulated flags */ SigNotationFlags flags; /** * notation data is human readable */ bool human_readable; /** * notation data is critical */ bool critical; } /** * A subkey from a Key */ [CCode (cname = "struct _gpgme_subkey")] public struct SubKey { SubKey* next; bool revoked; bool expired; bool disabled; bool invalid; bool can_encrypt; bool can_sign; bool can_certify; bool secret; bool can_authenticate; bool is_qualified; bool is_cardkey; PublicKeyAlgorithm algo; uint length; string keyid; /** * Fingerprint of the key in hex form */ string fpr; /** * The creation timestamp. * -1 = invalid, * 0 = not available */ long timestamp; /** * The expiration timestamp. * 0 = key does not expire */ long expires; /** * The serial number of the smartcard holding this key or null */ string? cardnumber; } /** * A signature on a UserID */ [CCode (cname = "struct _gpgme_key_sig")] public struct KeySig { /** * The next signature from the list */ KeySig* next; bool invoked; bool expired; bool invalid; bool exportable; PublicKeyAlgorithm algo; string keyid; /** * The creation timestamp. * -1 = invalid, * 0 = not available */ long timestamp; /** * The expiration timestamp. * 0 = key does not expire */ long expires; GPGError.ErrorCode status; string uid; string name; string email; string comment; /** * Crypto backend specific signature class */ uint sig_class; SigNotation *notations; } /** * A UserID from a Key */ [CCode (cname = "struct _gpgme_user_id")] public struct UserID { /** * The next UserID from the list */ UserID* next; bool revoked; bool invalid; Validity validity; string uid; string name; string email; string comment; KeySig signatures; } /** * verify result of OP */ [CCode (cname = "struct _gpgme_op_verify_result")] public struct VerifyResult { Signature* signatures; /** * The original file name of the plaintext message, if available */ string? file_name; } /** * sign result of OP */ [CCode (cname = "struct _gpgme_op_sign_result")] public struct SignResult { InvalidKey* invalid_signers; SignatureNew* signatures; } /** * encrypt result of OP */ [CCode (cname = "struct _gpgme_op_encrypt_result")] public struct EncryptResult { /** * The list of invalid repipients */ InvalidKey invalid_signers; } /** * decrypt result of OP */ [CCode (cname = "struct _gpgme_op_decrypt_result")] public struct DecryptResult { string unsupported_algorithm; bool wrong_key_usage; Recipient recipients; string filename; } /** * An receipient */ [CCode (cname = "struct _gpgme_recipient")] public struct Recipient { Recipient *next; string keyid; PublicKeyAlgorithm pubkey_algo; GPGError.ErrorCode status; } /** * list of invalid keys */ [CCode (cname = "struct _gpgme_invalid_key")] public struct InvalidKey { InvalidKey *next; string fpr; GPGError.ErrorCode reason; } /** * A Signature */ [CCode (cname = "struct _gpgme_signature")] public struct Signature { /** * The next signature in the list */ Signature *next; /** * A summary of the signature status */ Sigsum summary; /** * Fingerprint or key ID of the signature */ string fpr; /** * The Error status of the signature */ GPGError.ErrorCode status; /** * Notation data and policy URLs */ SigNotation *notations; /** * Signature creation time */ ulong timestamp; /** * Signature expiration time or 0 */ ulong exp_timestamp; /** * Key should not have been used for signing */ bool wrong_key_usage; /** * PKA status */ uint pka_trust; /** * Validity has been verified using the chain model */ bool chain_model; /** * Validity */ Validity validity; /** * Validity reason */ GPGError.ErrorCode validity_reason; /** * public key algorithm used to create the signature */ PublicKeyAlgorithm pubkey_algo; /** * The hash algorithm used to create the signature */ HashAlgorithm hash_algo; /** * The mailbox from the PKA information or null */ string? pka_address; } /** * A Signature */ [CCode (cname = "struct _gpgme_new_signature")] public struct SignatureNew { /** * The next signature in the list */ SignatureNew *next; SigMode type; /** * Fingerprint or key ID of the signature */ string fpr; /** * Notation data and policy URLs */ SigNotation *notations; /** * Signature creation time */ ulong timestamp; /** * Signature expiration time or 0 */ ulong exp_timestamp; /** * PKA status */ PKAStatus pka_trust; /** * Validity has been verified using the chain model */ bool chain_model; /** * Validity reason */ GPGError.ErrorCode validity_reason; /** * public key algorithm used to create the signature */ PublicKeyAlgorithm pubkey_algo; /** * The hash algorithm used to create the signature */ HashAlgorithm hash_algo; /** * Crypto backend specific signature class. */ uint sig_class; } /** * PKA Status */ public enum PKAStatus { NOT_AVAILABLE, BAD, OKAY, RFU } /** * Flags used for the summary field in a Signature */ [CCode (cname = "gpgme_sigsum_t", cprefix = "GPGME_SIGSUM_")] public enum Sigsum { /** * The signature is fully valid */ VALID = 0x0001, /** * The signature is good */ GREEN = 0x0002, /** * The signature is bad */ RED = 0x0004, /** * One key has been revoked */ KEY_REVOKED = 0x0010, /** * One key has expired */ KEY_EXPIRED = 0x0020, /** * The signature has expired */ SIG_EXPIRED = 0x0040, /** * Can't verfiy - missing key */ KEY_MISSING = 0x0080, /** * CRL not available */ CRL_MISSING = 0x0100, /** * Available CRL is too old */ CRL_TOO_OLD = 0x0200, /** * A policy was not met */ BAD_POLICY = 0x0400, /** * A system error occured */ SYS_ERROR = 0x0800; } /** * Encoding modes of Data objects */ [CCode (cname = "gpgme_data_encoding_t", cprefix = "GPGME_DATA_ENCODING_")] public enum DataEncoding { /** * Not specified */ NONE, /** * Binary encoded */ BINARY, /** * Base64 encoded */ BASE64, /** * Either PEM or OpenPGP Armor */ ARMOR, /** * LF delimited URL list */ URL, /** * LF percent escaped, delimited URL list */ URLESC, /** * Nul determined URL list */ URL0 } /** * Public Key Algorithms from libgcrypt */ [CCode (cname = "gpgme_pubkey_algo_t", cprefix = "GPGME_PK_")] public enum PublicKeyAlgorithm { RSA, RSA_E, RSA_S, ELG_E, DSA, ELG } /** * Hash Algorithms from libgcrypt */ [CCode (cname = "gpgme_hash_algo_t", cprefix = "GPGME_MD_")] public enum HashAlgorithm { NONE, MD5, SHA1, RMD160, MD2, TIGER, HAVAL, SHA256, SHA384, SHA512, MD4, MD_CRC32, MD_CRC32_RFC1510, MD_CRC24_RFC2440 } /** * Signature modes */ [CCode (cname = "gpgme_sig_mode_t", cprefix = "GPGME_SIG_MODE_")] public enum SigMode { NORMAL, DETACH, CLEAR } /** * Validities for a trust item or key */ [CCode (cname = "gpgme_validity_t", cprefix = "GPGME_VALIDITY_")] public enum Validity { UNKNOWN, UNDEFINED, NEVER, MARGINAL, FULL, ULTIMATE } /** * Protocols */ [CCode (cname = "gpgme_protocol_t", cprefix = "GPGME_PROTOCOL_")] public enum Protocol { /** * Default Mode */ OpenPGP, /** * Cryptographic Message Syntax */ CMS, /** * Special code for gpgconf */ GPGCONF, /** * Low-level access to an Assuan server */ ASSUAN, UNKNOWN } /** * Keylist modes used by Context */ [CCode (cname = "gpgme_keylist_mode_t", cprefix = "GPGME_KEYLIST_MODE_")] public enum KeylistMode { LOCAL, EXTERN, SIGS, SIG_NOTATIONS, EPHEMERAL, VALIDATE } /** * Export modes used by Context */ [CCode (cname = "gpgme_export_mode_t", cprefix = "GPGME_EXPORT_MODE_")] public enum ExportMode { EXTERN } /** * Audit log function flags */ [CCode (cprefix = "GPGME_AUDITLOG_")] public enum AuditLogFlag { HTML, WITH_HELP } /** * Signature notation flags */ [CCode (cname = "gpgme_sig_notation_flags_t", cprefix = "GPGME_SIG_NOTATION_")] public enum SigNotationFlags { HUMAN_READABLE, CRITICAL } /** * Encryption Flags */ [CCode (cname = "gpgme_encrypt_flags_t", cprefix = "GPGME_ENCRYPT_")] public enum EncryptFlags { ALWAYS_TRUST, NO_ENCRYPT_TO } /** * Edit Operation Stati */ [CCode (cname = "gpgme_status_code_t", cprefix = "GPGME_STATUS_")] public enum StatusCode { EOF, ENTER, LEAVE, ABORT, GOODSIG, BADSIG, ERRSIG, BADARMOR, RSA_OR_IDEA, KEYEXPIRED, KEYREVOKED, TRUST_UNDEFINED, TRUST_NEVER, TRUST_MARGINAL, TRUST_FULLY, TRUST_ULTIMATE, SHM_INFO, SHM_GET, SHM_GET_BOOL, SHM_GET_HIDDEN, NEED_PASSPHRASE, VALIDSIG, SIG_ID, SIG_TO, ENC_TO, NODATA, BAD_PASSPHRASE, NO_PUBKEY, NO_SECKEY, NEED_PASSPHRASE_SYM, DECRYPTION_FAILED, DECRYPTION_OKAY, MISSING_PASSPHRASE, GOOD_PASSPHRASE, GOODMDC, BADMDC, ERRMDC, IMPORTED, IMPORT_OK, IMPORT_PROBLEM, IMPORT_RES, FILE_START, FILE_DONE, FILE_ERROR, BEGIN_DECRYPTION, END_DECRYPTION, BEGIN_ENCRYPTION, END_ENCRYPTION, DELETE_PROBLEM, GET_BOOL, GET_LINE, GET_HIDDEN, GOT_IT, PROGRESS, SIG_CREATED, SESSION_KEY, NOTATION_NAME, NOTATION_DATA, POLICY_URL, BEGIN_STREAM, END_STREAM, KEY_CREATED, USERID_HINT, UNEXPECTED, INV_RECP, NO_RECP, ALREADY_SIGNED, SIGEXPIRED, EXPSIG, EXPKEYSIG, TRUNCATED, ERROR, NEWSIG, REVKEYSIG, SIG_SUBPACKET, NEED_PASSPHRASE_PIN, SC_OP_FAILURE, SC_OP_SUCCESS, CARDCTRL, BACKUP_KEY_CREATED, PKA_TRUST_BAD, PKA_TRUST_GOOD, PLAINTEXT } /** * The Context object represents a GPG instance */ [Compact] [CCode (cname = "struct gpgme_context", free_function = "gpgme_release", cprefix = "gpgme_")] public class Context { /** * Create a new context, returns Error Status Code */ [CCode (cname = "gpgme_new")] public static GPGError.ErrorCode Context(out Context ctx); public GPGError.ErrorCode set_protocol(Protocol p); public Protocol get_protocol(); public void set_armor(bool yes); public bool get_armor(); public void set_textmode(bool yes); public bool get_textmode(); public GPGError.ErrorCode set_keylist_mode(KeylistMode mode); public KeylistMode get_keylist_mode(); /** * Include up to nr_of_certs certificates in an S/MIME message, * Use "-256" to use the backend's default. */ public void set_include_certs(int nr_of_certs = -256); /** * Return the number of certs to include in an S/MIME message */ public int get_include_certs(); /** * Set callback function for requesting passphrase. hook_value will be * passed as first argument. */ public void set_passphrase_cb(passphrase_callback cb, void* hook_value = null); /** * Get callback function and hook_value */ public void get_passphrase_cb(out passphrase_callback cb, out void* hook_value); public static GPGError.ErrorCode set_locale(Context ctx, int category, string val); /** * Get information about the configured engines. The returned data is valid * until the next set_engine_info() call. */ [CCode (cname = "gpgme_ctx_get_engine_info")] public EngineInfo* get_engine_info(); [CCode (cname = "gpgme_ctx_set_engine_info")] public GPGError.ErrorCode set_engine_info(Protocol proto, string? file_name, string? home_dir); /** * Delete all signers */ public void signers_clear(); /** * Add key to list of signers */ public GPGError.ErrorCode signers_add(Key key); /** * Get the n-th signer's key */ public Key* signers_enum(int n); /** * Clear all notation data */ public void sig_notation_clear(); /** * Add human readable notation data. If name is null, * then value val should be a policy URL. The HUMAN_READABLE * flag is forced to be true for notation data and false * for policy URLs. */ public GPGError.ErrorCode sig_notation_add(string name, string val, SigNotationFlags flags); /** * Get sig notations */ public SigNotation* sig_notation_get(); /** * Get key with the fingerprint FPR from the crypto backend. * If SECRET is true, get the secret key. */ public GPGError.ErrorCode get_key (string fpr, out Key key, bool secret); /** * process the pending operation and, if hang is true, wait for * the pending operation to finish. */ public Context* wait(out GPGError.ErrorCode status, bool hang); /** * Retrieve a pointer to the results of the signing operation */ public SignResult* op_sign_result(); /** * Sign the plaintext PLAIN and store the signature in SIG. */ public GPGError.ErrorCode op_sign(Data plain, Data sig, SigMode mode); /** * Retrieve a pointer to the result of the verify operation */ public VerifyResult* op_verify_result(); /** * Verify that SIG is a valid signature for SIGNED_TEXT. */ public GPGError.ErrorCode op_verify(Data sig, Data? signed_text, Data? plaintext); /** * Retrieve a pointer to the result of the encrypt operation */ public EncryptResult* op_encrypt_result(); /** * Encrypt plaintext PLAIN for the recipients RECP and store the * resulting ciphertext in CIPHER. */ public GPGError.ErrorCode op_encrypt([CCode (array_length = false)] Key[] recp, EncryptFlags flags, Data plain, Data cipher); /** * Retrieve a pointer to the result of the decrypt operation */ public DecryptResult* op_decrypt_result(); /** * Decrypt ciphertext CIPHER and store the resulting plaintext * in PLAIN. */ public GPGError.ErrorCode op_decrypt(Data cipher, Data plain); /** * Export the keys found by PATTERN into KEYDATA. If PATTERN is * NULL all keys will be exported. */ public GPGError.ErrorCode op_export(string? pattern, ExportMode mode, Data keydata); /** Import the keys from the array KEYS into the keyring. */ public GPGError.ErrorCode op_import_keys_start ([CCode (array_length = false)] Key[] keys); public GPGError.ErrorCode op_import_keys ([CCode (array_length = false)] Key[] keys); } /** * Data Object, contains encrypted and/or unencrypted data */ [Compact] [CCode (cname = "struct gpgme_data", free_function = "gpgme_data_release", cprefix = "gpgme_data_")] public class Data { /** * Create a new data buffer, returns Error Status Code. */ [CCode (cname = "gpgme_data_new")] public static GPGError.ErrorCode create(out Data d); /** * Create a new data buffer filled with SIZE bytes starting * from BUFFER. If COPY is false, COPYING is delayed until * necessary and the data is taken from the original location * when needed. Returns Error Status Code. */ [CCode (cname = "gpgme_data_new_from_mem")] public static GPGError.ErrorCode create_from_memory (out Data d, char* buffer, size_t size, bool copy); [CCode (cname = "gpgme_data_new_from_file")] public static GPGError.ErrorCode create_from_file (out Data d, string fname, bool copy); [CCode (cname = "gpgme_data_new_from_stream")] public static GPGError.ErrorCode create_from_stream (out Data d, Posix.FILE stream); [CCode (cname = "gpgme_data_new_from_fd")] public static GPGError.ErrorCode create_from_fd (out Data d, int fd); /** * Destroy the object and return a pointer to its content. * It's size is returned in R_LEN. */ [CCode (cname = "gpgme_data_release_and_get_mem")] public string release_and_get_mem(out size_t len); /** * Read up to SIZE bytes into buffer BUFFER from the data object. * Return the number of characters read, 0 on EOF and -1 on error. * If an error occurs, errno is set. */ public ssize_t read(void* buf, size_t size); /** * Write up to SIZE bytes from buffer BUFFER to the data object. * Return the number of characters written, or -1 on error. * If an error occurs, errno is set. */ public ssize_t write(void* buf, size_t size); /** * Set the current position from where the next read or write * starts in the data object to OFFSET, relativ to WHENCE. */ public Posix.off_t seek(long offset, int whence=0); /** * Get the encoding attribute of the buffer */ public DataEncoding *get_encoding(); /** * Set the encoding attribute of the buffer to ENC */ public GPGError.ErrorCode set_encoding(DataEncoding enc); } [CCode (cname = "gpgme_get_protocol_name")] public unowned string get_protocol_name(Protocol p); [CCode (cname = "gpgme_pubkey_algo_name")] public unowned string get_public_key_algorithm_name(PublicKeyAlgorithm algo); [CCode (cname = "gpgme_hash_algo_name")] public unowned string get_hash_algorithm_name(HashAlgorithm algo); [CCode (cname = "gpgme_passphrase_cb_t", has_target = false)] public delegate GPGError.ErrorCode passphrase_callback(void* hook, string uid_hint, string passphrase_info, bool prev_was_bad, int fd); #if 0 /** * Set the default engine info for the protocol PROTO to the file name * FILE_NAME and the home directory HOME_DIR. */ [CCode (cname = "gpgme_set_engine_info")] public GPGError.ErrorCode set_engine_info (Protocol proto, string file_name, string? home_dir); #endif /** * Get version of libgpgme * Always call this function before using gpgme, it initializes some stuff */ [CCode (cname = "gpgme_check_version")] public unowned string check_version(string? required_version = null); /** * Verify that the engine implementing proto is installed and * available. */ [CCode (cname = "gpgme_engine_check_version")] public GPGError.ErrorCode engine_check_version(Protocol proto); /** * Get information about the configured engines. The returned data is valid * until the next set_engine_info() call. */ [CCode (cname = "gpgme_get_engine_information")] public GPGError.ErrorCode get_engine_information(out EngineInfo engine_info); /** * Return the error string for ERR in the user-supplied buffer BUF * of size BUFLEN. This function is thread-safe, if a thread-safe * strerror_r() function is provided by the system. If the function * succeeds, 0 is returned and BUF contains the string describing * the error. If the buffer was not large enough, ERANGE is returned * and BUF contains as much of the beginning of the error string as * fits into the buffer. Returns Error Status Code. */ [CCode (cname = "gpgme_strerror_r")] public int strerror_r(GPGError.ErrorCode err, char[] buf); /** * Like strerror_r, but returns a pointer to the string. This method * is not thread safe! */ [CCode (cname = "gpgme_strerror")] public unowned string strerror(GPGError.ErrorCode err); } ./Listaller-0.5.8/vapi/PackageKitPlugin-1.0.metadata0000664000175000017500000000011012176743563022151 0ustar matthiasmatthias// Metadata for PackageKit Plugin GIR PackageKitPlugin name="PkPlugin" ./Listaller-0.5.8/vapi/config.vapi0000664000175000017500000000277012176743563017135 0ustar matthiasmatthias/* config.vapi * * Copyright (C) 2011 Matthias Klumpp * * 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, either version 3 of the License, or * (at your option) any later version. * * 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 . * * Author: * Matthias Klumpp */ [CCode (prefix = "", lower_case_cprefix = "", cheader_filename = "config.h")] namespace PkgConfig { /* Package information */ public const string PACKAGE_NAME; public const string PACKAGE_VERSION; public const string PACKAGE_URL; public const string PACKAGE_BUGREPORT; /* Gettext package */ public const string GETTEXT_PACKAGE; /* Configured paths */ public const string PREFIXDIR; /* /usr/local */ public const string LOCALEDIR; /* /usr/local/share/locale */ public const string DATADIR; /* /usr/local/share */ public const string PKGDATADIR; /* /usr/local/share/listaller */ public const string LIBDIR; /* /usr/local/lib */ public const string PKGLIBDIR; /* /usr/local/lib/listaller */ } ./Listaller-0.5.8/vapi/rdf-minimal.vapi0000664000175000017500000001071012176743563020060 0ustar matthiasmatthias/* rdf-minimal.vapi - Simple bindings for Redland RDF * * Copyright (C) 2011-2013 Matthias Klumpp * * Licensed under the GNU Lesser General Public License Version 3 * * This library is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This library 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library. If not, see . */ [CCode (cprefix="librdf_", lower_case_cprefix="librdf_", cheader_filename = "librdf.h")] namespace RDF { [Compact] [CCode (cname="librdf_storage", free_function="librdf_free_storage", cprefix="librdf_storage_")] public class Storage { [CCode (cname="librdf_new_storage")] public Storage (World world, string storage_name, string name, string options_str); } [Compact] [CCode (cname="librdf_world", free_function="librdf_free_world", cprefix="librdf_world_")] public class World { [CCode (cname="librdf_new_world")] public World (); public void open (); public void init_mutex (); } [Compact] [CCode (cname="librdf_model", free_function="librdf_free_model", cprefix="librdf_model_")] public class Model { [CCode (cname="librdf_new_model")] public Model (World world, Storage storage, string options_str); public int add_statement (Statement stmt); public int add_statements (Stream statement_stream); public int size (); } [Compact] [CCode (cname="librdf_parser", free_function="librdf_free_parser", cprefix="librdf_parser_")] public class Parser { [CCode (cname="librdf_new_parser")] public Parser (World world, string? name, string? mime_type, Uri? type_uri); public Stream parse_as_stream (Uri uri, Uri base_uri); public Stream parse_string_as_stream ([CCode(type="const unsigned char *")] string str, Uri? base_uri); } [Compact] [CCode (cname="librdf_uri", free_function="librdf_free_uri", cprefix="librdf_uri_")] public class Uri { [CCode (cname="librdf_new_uri")] public Uri (World world, string uri_string); [CCode (cname="librdf_new_uri_from_uri")] public Uri.from_uri (Uri old_uri); [CCode(type="const unsigned char *")] public unowned string as_string (); [CCode(type="const unsigned char *")] public string to_string (); public string to_filename (); public bool is_file_uri (); } [Compact] [CCode (cname="librdf_stream", free_function="librdf_free_stream", cprefix="librdf_stream_")] public class Stream { /* [CCode (cname="librdf_new_stream")] public Stream (World world, void* context, int (*is_end_method)(void*), int (*next_method)(void*), void* (*get_method)(void*, int), void (*finished_method)(void*)); */ } [Compact] [CCode (cname="librdf_statement", free_function="librdf_free_statement", cprefix="librdf_statement_")] public class Statement { } [Compact] [CCode (cname="librdf_query", free_function="librdf_free_query", cprefix="librdf_query_")] public class Query { [CCode (cname="librdf_new_query")] public Query (World world, string name, Uri? uri, string query_string, Uri base_uri); public QueryResults execute(Model model); } [Compact] [CCode (cname="librdf_query_results", free_function="librdf_free_query_results", cprefix="librdf_query_results_")] public class QueryResults { public int get_count (); public bool next (); public bool finished (); public int get_bindings_count (); public Node get_binding_value (int offset); public string get_binding_name (int offset); public Node get_binding_value_by_name (string name); public bool is_bindings (); public bool is_boolean (); public bool is_graph (); public bool is_syntax (); } [Compact] [CCode (cname="librdf_node", free_function="librdf_free_node", cprefix="librdf_node_")] public class Node { [CCode (cname="librdf_new_node")] public Node (World world); public string to_string (); public string get_literal_value_as_latin1 (); public Uri get_literal_value_datatype_uri (); public string get_literal_value_language (); public unowned Uri? get_uri (); public bool is_literal (); public bool is_blank (); public bool is_resource (); } } ./Listaller-0.5.8/vapi/libarchive.vapi0000664000175000017500000003027112176743563017775 0ustar matthiasmatthias/* libarchive.vapi - Bindings for libarchive * * Copyright (C) 2009 Julian Andres Klode * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Author: * Julian Andres Klode * Matthias Klumpp (some minor updates) * */ [CCode (cprefix="ARCHIVE_", lower_case_cprefix="archive_", cheader_filename = "archive.h")] namespace Archive { public const int VERSION_NUMBER; public const string VERSION_STRING; public int version_number (); public unowned string version_string (); [CCode (instance_pos = 1.9, cname="archive_read_callback")] public delegate ssize_t ReadCallback (Archive archive, out void* buffer); [CCode (instance_pos = 1.9, cname="archive_skip_callback")] public delegate Posix.off_t SkipCallback (Archive archive, Posix.off_t request); [CCode (instance_pos = 1.9, cname="archive_write_callback")] public delegate ssize_t WriteCallback (Archive archive, void* buffer, size_t length); [CCode (instance_pos = 1.9, cname="archive_open_callback")] public delegate int OpenCallback (Archive archive); [CCode (cname="archive_close_callback")] public delegate int CloseCallback (Archive archive); // In reality a "void (*_progress_func)(void *)" parameter without name. public delegate void ExtractProgressCallback (); [CCode (cprefix="ARCHIVE_", cname="int")] public enum Result { EOF, OK, RETRY, WARN, FAILED } [CCode (cname="int")] public enum Compression { NONE, GZIP, BZIP2, COMPRESS, PROGRAM, LZMA, XZ, UU, RPM } [CCode (cname="int")] public enum Format { BASE_MASK, CPIO, CPIO_POSIX, CPIO_BIN_LE, CPIO_BIN_BE, CPIO_SVR4_NOCRC, CPIO_SVR4_CRC, SHAR, SHAR_BASE, SHAR_DUMP, TAR, TAR_USTAR, TAR_PAX_INTERCHANGE, TAR_PAX_RESTRICTED, TAR_GNUTAR, ISO9660, ISO9660_ROCKRIDGE, ZIP, EMPTY, AR, AR_GNU, AR_BSD, MTREE, RAW, XAR } [CCode (cprefix="ARCHIVE_EXTRACT_", cname="int")] public enum ExtractFlags { OWNER, PERM, TIME, NO_OVERWRITE, UNLINK, ACL, FFLAGS, XATTR, SECURE_SYMLINKS, SECURE_NODOTDOT, NO_AUTODIR, NO_OVERWRITE_NEWER, SPARSE } [Compact] [CCode (cname="struct archive", cprefix="archive_")] public class Archive { public int64 position_compressed (); public int64 position_uncompressed (); public Compression compression (); public Format format (); public unowned string compression_name (); public unowned string format_name (); public int errno (); public unowned string error_string (); public void clear_error (); public void set_error (int err, string fmt, ...); public void copy_error (Archive src); } [Compact] [CCode (cname="struct archive", free_function="archive_read_finish")] public class Read : Archive { public Read (); public Result support_compression_all (); public Result support_compression_bzip2 (); public Result support_compression_compress (); public Result support_compression_gzip (); public Result support_compression_lzma (); public Result support_compression_none (); public Result support_compression_program (string command); public Result support_compression_rpm (); public Result support_compression_uu (); public Result support_compression_xz (); public Result support_format_all (); public Result support_format_raw (); public Result support_format_ar (); public Result support_format_cpio (); public Result support_format_empty (); public Result support_format_gnutar (); public Result support_format_iso9660 (); public Result support_format_mtree (); public Result support_format_tar (); public Result support_format_zip (); public Result open ( [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, [CCode (delegate_target_pos = 0.9)] ReadCallback rcb, [CCode (delegate_target_pos = 0.9)] CloseCallback ccb ); public Result open2 ( [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, [CCode (delegate_target_pos = 0.9)] ReadCallback rcb, [CCode (delegate_target_pos = 0.9)] SkipCallback scb, [CCode (delegate_target_pos = 0.9)] CloseCallback ccb ); public Result open_filename (string filename, size_t _block_size); public Result open_memory (void* buff, size_t size); public Result open_fd (int fd, size_t block_size); #if POSIX public Result open_FILE (Posix.FILE file); #else public Result open_FILE (GLib.FileStream file); #endif public Result next_header (out unowned Entry entry); public int64 header_position (); [CCode (cname="archive_read_data")] public ssize_t read_data (void* buffer, size_t size); [CCode (cname="archive_read_data_block")] public Result read_data_block (out void* buff, out size_t size, out Posix.off_t offset); [CCode (cname="archive_read_data_skip")] public Result read_data_skip (); [CCode (cname="archive_read_data_into_buffer")] public Result read_data_into_buffer (void* buffer, ssize_t len); [CCode (cname="archive_read_data_into_fd")] public Result read_data_into_fd (int fd); public Result extract (Entry entry, ExtractFlags? flags=0); public Result extract2 (Entry entry, Write dest); public void extract_set_progress_callback (ExtractProgressCallback cb); public void extract_set_skip_file (Posix.dev_t dev, Posix.ino_t ino); public Result close (); } [CCode (cname = "struct archive", free_function="archive_write_finish")] public class Write : Archive { public Write (); public Result set_compression_bzip2 (); public Result set_compression_compress (); public Result set_compression_gzip (); public Result set_compression_lzma (); public Result set_compression_none (); public Result set_compression_program (string command); public Result set_compression_rpm (); public Result set_compression_uu (); public Result set_compression_xz (); public Result set_format (Format format); public Result set_format_by_name (string name); public Result set_format_ar_bsd (); public Result set_format_ar_svr4 (); public Result set_format_cpio (); public Result set_format_cpio_newc (); public Result set_format_mtree (); public Result set_format_pax (); public Result set_format_pax_restricted (); public Result set_format_shar (); public Result set_format_shar_dump (); public Result set_format_ustar (); public Result set_bytes_per_block (int bytes_per_block); public int get_bytes_per_block (); public Result set_bytes_in_last_block (int bytes_in_last_block); public int get_bytes_in_last_block (); public Result set_skip_file (Posix.dev_t dev, Posix.ino_t ino); public Result open ( [CCode (delegate_target_pos = 0.9)] OpenCallback ocb, [CCode (delegate_target_pos = 0.9)] WriteCallback rcb, [CCode (delegate_target_pos = 0.9)] CloseCallback ccb ); public Result open_fd (int fd); public Result open_filename (string filename); #if POSIX public Result open_FILE (Posix.FILE file); #else public Result open_FILE (GLib.FileStream file); #endif public Result open_memory (void* buffer, size_t buff_size, out size_t used); [CCode (cname="archive_write_header")] public Result write_header (Entry entry); [CCode (cname="archive_write_data")] public ssize_t write_data (void* data, size_t size); [CCode (cname="archive_write_data_block")] public ssize_t write_data_block (void* data, size_t size, Posix.off_t offset); public Result finish_entry (); public Result close (); } [Compact] [CCode (cname = "struct archive", free_function="archive_write_finish")] public class WriteDisk : Write { public WriteDisk (); public Result set_skip_file (Posix.dev_t dev, Posix.ino_t ino); public Result set_options (ExtractFlags flags); public Result set_standard_lookup (); // HACK, they have no name in C. May not work correctly. [CCode (instance_pos = 0, cname="gid_t")] public delegate Posix.gid_t GroupLookup (string group, Posix.gid_t gid); [CCode (instance_pos = 0, cname="uid_t")] public delegate Posix.uid_t UserLookup (string user, Posix.uid_t uid); [CCode (instance_pos = 0, cname="void")] public delegate void Cleanup (); public Result set_group_lookup ( [CCode (delegate_target_pos = 0.9) ] GroupLookup lookup, [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null ); public Result set_user_lookup ( [CCode (delegate_target_pos = 0.9) ] UserLookup lookup, [CCode (delegate_target_pos = 0.9) ] Cleanup? cleanup = null ); } [Compact] [CCode (cname = "struct archive_entry", cheader_filename = "archive_entry.h")] public class Entry { public Entry (); public time_t atime (); public long atime_nsec (); public bool atime_is_set (); public time_t birthtime (); public long birthtime_nsec (); public bool birthtime_is_set (); public time_t ctime (); public long ctime_nsec (); public bool ctime_is_set (); public Posix.dev_t dev (); public Posix.dev_t devmajor (); public Posix.dev_t devminor (); public Posix.mode_t filetype (); public unowned string fflags_text (); public Posix.gid_t gid (); public unowned string gname (); public unowned string hardlink (); public Posix.ino_t ino (); public Posix.mode_t mode (); public time_t mtime (); public long mtime_nsec (); public bool mtime_is_set (); public uint nlink (); public unowned string pathname (); public Posix.dev_t rdev (); public Posix.dev_t rdevmajor (); public Posix.dev_t rdevminor (); public unowned string sourcepath (); public int64 size (); public bool size_is_set (); public unowned string strmode (); public unowned string symlink (); public Posix.uid_t uid (); public unowned string uname (); public void set_atime (time_t atime, long blah); public void unset_atime (); public void set_birthtime (time_t birthtime, long blah); public void unset_birthtime (); public void set_ctime (time_t atime, long blah); public void unset_ctime (); public void set_dev (Posix.dev_t dev); public void set_devmajor (Posix.dev_t major); public void set_devminor (Posix.dev_t major); public void set_filetype (uint filetype); public void set_fflags (ulong set, ulong clear); public unowned string copy_fflags_text (string text); public void set_gid (Posix.gid_t gid); public void set_gname (string gname); public Result update_gname_utf8 (string gname); public void set_hardlink (string link); public void set_ino (ulong ino); public void set_link (string link); public Result update_link_utf8 (string link); public void set_mode (Posix.mode_t mode); public void set_mtime (time_t mtime, long blah); public void unset_mtime (); public void set_nlink (uint nlink); public void set_pathname (string pathname); public Result update_pathname_utf8 (string pathname); public void set_perm (Posix.mode_t mode); public void set_rdev (Posix.dev_t dev); public void set_rdevmajor (Posix.dev_t devmajor); public void set_rdevminor (Posix.dev_t devminor); public void set_size (int64 size); public void unset_size (); public void copy_sourcepath (string sourcepath); public void set_symlink (string symlink); public void set_uid (Posix.uid_t uid); public void set_uname (string uname); public Result update_uname_utf8 (string uname); public unowned Posix.Stat stat (); public void copy_stat (Posix.Stat stat); public unowned Entry clear (); public Entry clone (); public void xattr_clear(); public void xattr_add_entry(string name, void* value, size_t size); public int xattr_count(); public Result xattr_reset(); public Result xattr_next(out unowned string name, out void* value, out size_t size); [Compact] public class LinkResolver { public LinkResolver (); public void set_strategy (Format format_code); public void linkify (Entry a, Entry b); } } } ./Listaller-0.5.8/vapi/gpg-error.vapi0000664000175000017500000001540212176743563017570 0ustar matthiasmatthias/* gpg-error.vapi * * Copyright (C) 2009 Sebastian Reichel * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ [CCode (cheader_filename = "gpg-error.h")] namespace GPGError { [CCode (cname = "gpg_err_code_t", cprefix = "GPG_ERR_")] public enum ErrorCode { NO_ERROR, GENERAL, UNKNOWN_PACKET, UNKNOWN_VERSION, PUBKEY_ALGO, DIGEST_ALGO, BAD_PUBKEY, BAD_SECKEY, BAD_SIGNATURE, NO_PUBKEY, CHECKSUM, BAD_PASSPHRASE, CIPHER_ALGO, KEYRING_OPEN, INV_PACKET, INV_ARMOR, NO_USER_ID, NO_SECKEY, WRONG_SECKEY, BAD_KEY, COMPR_ALGO, NO_PRIME, NO_ENCODING_METHOD, NO_ENCRYPTION_SCHEME, NO_SIGNATURE_SCHEME, INV_ATTR, NO_VALUE, NOT_FOUND, VALUE_NOT_FOUND, SYNTAX, BAD_MPI, INV_PASSPHRASE, SIG_CLASS, RESOURCE_LIMIT, INV_KEYRING, TRUSTDB, BAD_CERT, INV_USER_ID, UNEXPECTED, TIME_CONFLICT, KEYSERVER, WRONG_PUBKEY_ALGO, TRIBUTE_TO_D_A, WEAK_KEY, INV_KEYLEN, INV_ARG, BAD_URI, INV_URI, NETWORK, UNKNOWN_HOST, SELFTEST_FAILED, NOT_ENCRYPTED, NOT_PROCESSED, UNUSABLE_PUBKEY, UNUSABLE_SECKEY, INV_VALUE, BAD_CERT_CHAIN, MISSING_CERT, NO_DATA, BUG, NOT_SUPPORTED, INV_OP, TIMEOUT, INTERNAL, EOF_GCRYPT, INV_OBJ, TOO_SHORT, TOO_LARGE, NO_OBJ, NOT_IMPLEMENTED, CONFLICT, INV_CIPHER_MODE, INV_FLAG, INV_HANDLE, TRUNCATED, INCOMPLETE_LINE, INV_RESPONSE, NO_AGENT, AGENT, INV_DATA, ASSUAN_SERVER_FAULT, ASSUAN, INV_SESSION_KEY, INV_SEXP, UNSUPPORTED_ALGORITHM, NO_PIN_ENTRY, PIN_ENTRY, BAD_PIN, INV_NAME, BAD_DATA, INV_PARAMETER, WRONG_CARD, NO_DIRMNGR, DIRMNGR, CERT_REVOKED, NO_CRL_KNOWN, CRL_TOO_OLD, LINE_TOO_LONG, NOT_TRUSTED, CANCELED, BAD_CA_CERT, CERT_EXPIRED, CERT_TOO_YOUNG, UNSUPPORTED_CERT, UNKNOWN_SEXP, UNSUPPORTED_PROTECTION, CORRUPTED_PROTECTION, AMBIGUOUS_NAME, CARD, CARD_RESET, CARD_REMOVED, INV_CARD, CARD_NOT_PRESENT, NO_PKCS15_APP, NOT_CONFIRMED, CONFIGURATION, NO_POLICY_MATCH, INV_INDEX, INV_ID, NO_SCDAEMON, SCDAEMON, UNSUPPORTED_PROTOCOL, BAD_PIN_METHOD, CARD_NOT_INITIALIZED, UNSUPPORTED_OPERATION, WRONG_KEY_USAGE, NOTHING_FOUND, WRONG_BLOB_TYPE, MISSING_VALUE, HARDWARE, PIN_BLOCKED, USE_CONDITIONS, PIN_NOT_SYNCED, INV_CRL, BAD_BER, INV_BER, ELEMENT_NOT_FOUND, IDENTIFIER_NOT_FOUND, INV_TAG, INV_LENGTH, INV_KEYINFO, UNEXPECTED_TAG, NOT_DER_ENCODED, NO_CMS_OBJ, INV_CMS_OBJ, UNKNOWN_CMS_OBJ, UNSUPPORTED_CMS_OBJ, UNSUPPORTED_ENCODING, UNSUPPORTED_CMS_VERSION, UNKNOWN_ALGORITHM, INV_ENGINE, PUBKEY_NOT_TRUSTED, DECRYPT_FAILED, KEY_EXPIRED, SIG_EXPIRED, ENCODING_PROBLEM, INV_STATE, DUP_VALUE, MISSING_ACTION, MODULE_NOT_FOUND, INV_OID_STRING, INV_TIME, INV_CRL_OBJ, UNSUPPORTED_CRL_VERSION, INV_CERT_OBJ, UNKNOWN_NAME, LOCALE_PROBLEM, NOT_LOCKED, PROTOCOL_VIOLATION, INV_MAC, INV_REQUEST, UNKNOWN_EXTN, UNKNOWN_CRIT_EXTN, LOCKED, UNKNOWN_OPTION, UNKNOWN_COMMAND, UNFINISHED, BUFFER_TOO_SHORT, SEXP_INV_LEN_SPEC, SEXP_STRING_TOO_LONG, SEXP_UNMATCHED_PAREN, SEXP_NOT_CANONICAL, SEXP_BAD_CHARACTER, SEXP_BAD_QUOTATION, SEXP_ZERO_PREFIX, SEXP_NESTED_DH, SEXP_UNMATCHED_DH, SEXP_UNEXPECTED_PUNC, SEXP_BAD_HEX_CHAR, SEXP_ODD_HEX_NUMBERS, SEXP_BAD_OCT_CHAR, ASS_GENERAL, ASS_ACCEPT_FAILED, ASS_CONNECT_FAILED, ASS_INV_RESPONSE, ASS_INV_VALUE, ASS_INCOMPLETE_LINE, ASS_LINE_TOO_LONG, ASS_NESTED_COMMANDS, ASS_NO_DATA_CB, ASS_NO_INQUIRE_CB, ASS_NOT_A_SERVER, ASS_NOT_A_CLIENT, ASS_SERVER_START, ASS_READ_ERROR, ASS_WRITE_ERROR, ASS_TOO_MUCH_DATA, ASS_UNEXPECTED_CMD, ASS_UNKNOWN_CMD, ASS_SYNTAX, ASS_CANCELED, ASS_NO_INPUT, ASS_NO_OUTPUT, ASS_PARAMETER, ASS_UNKNOWN_INQUIRE, USER_1, USER_2, USER_3, USER_4, USER_5, USER_6, USER_7, USER_8, USER_9, USER_10, USER_11, USER_12, USER_13, USER_14, USER_15, USER_16, MISSING_ERRNO, UNKNOWN_ERRNO, EOF, E2BIG, EACCES, EADDRINUSE, EADDRNOTAVAIL, EADV, EAFNOSUPPORT, EAGAIN, EALREADY, EAUTH, EBACKGROUND, EBADE, EBADF, EBADFD, EBADMSG, EBADR, EBADRPC, EBADRQC, EBADSLT, EBFONT, EBUSY, ECANCELED, ECHILD, ECHRNG, ECOMM, ECONNABORTED, ECONNREFUSED, ECONNRESET, ED, EDEADLK, EDEADLOCK, EDESTADDRREQ, EDIED, EDOM, EDOTDOT, EDQUOT, EEXIST, EFAULT, EFBIG, EFTYPE, EGRATUITOUS, EGREGIOUS, EHOSTDOWN, EHOSTUNREACH, EIDRM, EIEIO, EILSEQ, EINPROGRESS, EINTR, EINVAL, EIO, EISCONN, EISDIR, EISNAM, EL2HLT, EL2NSYNC, EL3HLT, EL3RST, ELIBACC, ELIBBAD, ELIBEXEC, ELIBMAX, ELIBSCN, ELNRNG, ELOOP, EMEDIUMTYPE, EMFILE, EMLINK, EMSGSIZE, EMULTIHOP, ENAMETOOLONG, ENAVAIL, ENEEDAUTH, ENETDOWN, ENETRESET, ENETUNREACH, ENFILE, ENOANO, ENOBUFS, ENOCSI, ENODATA, ENODEV, ENOENT, ENOEXEC, ENOLCK, ENOLINK, ENOMEDIUM, ENOMEM, ENOMSG, ENONET, ENOPKG, ENOPROTOOPT, ENOSPC, ENOSR, ENOSTR, ENOSYS, ENOTBLK, ENOTCONN, ENOTDIR, ENOTEMPTY, ENOTNAM, ENOTSOCK, ENOTSUP, ENOTTY, ENOTUNIQ, ENXIO, EOPNOTSUPP, EOVERFLOW, EPERM, EPFNOSUPPORT, EPIPE, EPROCLIM, EPROCUNAVAIL, EPROGMISMATCH, EPROGUNAVAIL, EPROTO, EPROTONOSUPPORT, EPROTOTYPE, ERANGE, EREMCHG, EREMOTE, EREMOTEIO, ERESTART, EROFS, ERPCMISMATCH, ESHUTDOWN, ESOCKTNOSUPPORT, ESPIPE, ESRCH, ESRMNT, ESTALE, ESTRPIPE, ETIME, ETIMEDOUT, ETOOMANYREFS, ETXTBSY, EUCLEAN, EUNATCH, EUSERS, EWOULDBLOCK, EXDEV, EXFULL, CODE_DIM; [CCode (cname = "gpgme_strerror")] public unowned string to_string (); [CCode (cname = "gpg_err_code")] public ErrorCode code (); } [CCode (cname = "gpgme_strsource")] public unowned string strsource (ErrorCode err); } ./Listaller-0.5.8/LICENSE.GPLv30000664000175000017500000010437112176743563015747 0ustar matthiasmatthias GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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, either version 3 of the License, or (at your option) any later version. 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ./Listaller-0.5.8/TODO0000664000175000017500000000020512176743563014527 0ustar matthiasmatthias*** Timeframe: Everytime *** * See blueprints on Launchpad for future plans * All bugs listed in our bugtracker should be fixed :-P ./Listaller-0.5.8/docs/0000775000175000017500000000000012176743564014773 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/0000775000175000017500000000000012152724406016442 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/Listaller.xml0000664000175000017500000000212212152720307021110 0ustar matthiasmatthias %BOOK_ENTITIES; ]> ./Listaller-0.5.8/docs/sources/Author_Group.xml0000664000175000017500000000103412151524472021600 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Matthias Klumpp matthias@tenstral.net The Autopackage Team ./Listaller-0.5.8/docs/sources/development/0000775000175000017500000000000012151470545020765 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/development/relaytool.xml0000664000175000017500000001214712151465664023534 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Relaytool A program to provide a more convenient interface to dlopen/dlsym. It allows you to easily soft link to libraries.
What is Relaytool? This is a program to provide a more convenient interface to dlopen/dlsym. It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime. In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result. If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1.
How to use Relaytool? Replace -lfoo in your link line with relaytool –relay foo -lfoo, assuming libfoo is in the standard search path (/lib/, /usr/lib, /usr/local/lib). You can pass entire gcc linker lines to Relaytool, and it will interpret them accordingly. Most options will be passed through unchanged onto stdout, but -lfoo options that have a preceeding –relay foo argument will trigger stub generation and compilation. Note that Relaytool will invoke $CC (or gcc if it's not set) to compile the stub file silently. You will not see any output. Alternatively, you can use the –replace-all-libs option to cause Relaytool to generate a stub file for every library given in a -lfoo directive. Because Relaytool parses linker options, you can feed the output of pkg-config and other config scripts to it: [earth@sun] relaytool --relay gtkspell `pkg-config --libs gtkspell-2.0` The above produces something like this, for example: -Wl,--export-dynamic -L/opt/gnome26/lib libgtkspell.so.0.0.0.stub.o -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 Note how -lgtkspell was replaced with libgtkspell.so.0.0.0.stub.o On architectures that Relaytool does not support, the -l is passed through along with a couple of defines to provide libfoo_is_present and libfoo_symbol_is_present. Ensure CFLAGS=”-fPIC” if the library exports variables, as GOT fixup requires your program to use PIC code. If you want to use Relaytool only for part of a shared library (for instance to make use of symbols available in newer versions only) you can use the –partial-map feature. To use this create a file with a line for each symbol, with F for function or V for variable in the first column, like so: then run: [earth@sun] relaytool --partial-map foo.relaymap --relay whatever -lwhatever If you want to hard link to a library but soft link to a few symbols, you can use –partial-map and –no-replace. –partial-map is currently incompatible with multiple –relay libraries on the same command line. You'll have to separate your libraries in different Relaytool calls. If you want Relaytool to only generate the symbols required by your code and not the whole list exported by a library, you can use the –minimal-list feature. It takes as argument the list of your object files, from which it derives which symbols for each library are actually needed. For example: [earth@sun] relaytool --minimal-list "foo.o bar.o" --relay mylib -lmylib This will generate a file exporting only the symbols used in foo.o and bar.o actually found in mylib instead of the complete list of symbols exported from mylib, which can mean big space savings in the final executable.
./Listaller-0.5.8/docs/sources/development/ligcc.xml0000664000175000017500000002106712151465540022575 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
The Ligcc tools Unlike Windows, Linux generally does not support "build on newer, run on older" development. In other words, the process of compiling the same program on an older system and a newer system can produce different binaries with different requirements.
What is ligcc? Ligcc is a wrapper around gcc. It allows you to create more portable executables by doing three things: Forces the linker to link against older glibc symbols. Users who are using an older version of glibc will no longer get undefined symbol GLIBC_2.4 in /lib/libc.so-style error messages. Allows you to easily statically link to any other library. Automatically removes bogus dependencies. For example, your program uses libfoo. libfoo uses libpng internally, but your app does not. Yet the pkg-config file for libfoo specifies -lfoo -lpng is linker parameters. And tadaa - you now have a bogus dependency on libpng! Ligcc automatically removes the -lpng for you if your app doesn't use libpng directly. It is recommended that you use binutils 2.15.94 or later to compile programs, recent versions of ld support the –as-needed argument, which does a much better job than our own dependency stripper, and is faster too. Add $ORIGIN/../lib to the binary's library search path. $ORIGIN is the directory in which the binary exists. This ensures that your binary can find its library dependencies if they are placed in the 'lib' folder under the same prefix. You can drop any dependency library you want in $PREFIX/lib/. Your binary can find those libraries without messing with $LD_LIBRARY_PATH. If you set $LIBUILD_PROJECTNAME, ligcc will also add $ORIGIN/../lib/$LIBUILD_PROJECTNAME to the library search path.
How to use ligcc? Use ligcc just like how you use gcc: Using ligcc [earth@sun] ligcc foo.c -o foo [earth@sun] lig++ bar.cpp -o bar Recommended way: or make CC=ligcc CXX=lig++ There are several environment variables that change ligcc's behavior: ligcc environment variables LIBUILD_PATH Use this as the include dir for the ligcc headers. Default value: $PREFIX/include/libuild (where $PREFIX is the prefix in which libuild is installed) LIBUILD_CC Use the specified C compiler. Default value: gcc LIBUILD_CXX1 Use the specified C++ compiler. Default value: g++ LIBUILD_STATIC_X If set to 1, then libuild will statically link some X extension libraries. LIBUILD_BOGUS_DEPS Specify a list of whitespace-seperated bogus library dependencies (like: X11 ICE png). These libraries will not be linked against. This option is useful if you want to specify bogus dependencies manually because the automatic bogus dependency stripper doesn't work correctly for your project (see below). LIBUILD_DISABLE_BOGUS_DETECTOR If set to 1, disables the automatic bogus dependency stripper. This is useful when linking to libraries don't have correct DT_NEEDED entries, like GTK 1.2. GTK 1.2 uses libX11.so internally, but it's not linked with -lX11. Instead, gtk-config –libs returns -lgtk -lX11 or something. If your app doesn't use xlib internally, then our bogus dependency stripper will strip the -lX11 argument. Linking will then fail. The built-in bogus dependency stripper is not used if you have a recent version of binutils, which supports ld –as-needed (it'll use binutil's native support for bogus dependency stripping instead). So you should get use a recent version of binutils if your ld doesn't already support that argument. LIBUILD_NOT_BOGUS If you want to use the automatic bogus dependency dectector anyway (using ld –asneeded), then you can specify a list of dependencies here that are not bogus with this environment variable. Example: export LIBUILD_NOT_BOGUS="X11 ICE png" LIBUILD_STATIC Specify a list of whitespace-seperated libraries to statically link to (like: popt z). You can also explicitly specify a filename to the static library. Examples: LIBUILD_STATIC_LIBGCC If set to 1, link all binaries with -static-libgcc. See the gcc info page for more info about this option. LIBUILD_PROJECTNAME If non-empty, ligcc will add $ORIGIN/../lib/$LIBUILD_PROJECTNAME to the library search path. LIBUILD_INCLUDE Prepend the specified directory to the compiler's header search path. The compiler will search this directory first, before searching any other directory. This is useful in combination with the older GTK headers package. You can specify multiple directories, seperated by a :, just like the $PATH environment variable. If the order of the -I flags is important for your application, you can replace paths by using /old/path=/new/path. LIBUILD_RESOLVE_LIBPATH A space-seperated list of (Perl) regular expressions which specify the libraries whose path must be resolved into absolute paths. Internally, ligcc reorders the linking arguments that are to be passed to gcc (for various reasons). This can cause problems when linking certain static libraries (for example, static WxWidgets libraries). But that can be worked around by using full path names for static libraries (e.g. turning -lfoo parameters into /usr/lib/full-path-to/foo.a).
./Listaller-0.5.8/docs/sources/development/Development.xml0000664000175000017500000000176212151470545023777 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Developing Listaller-ready applications We created several standalone tools, the libuild programs, that are designed to help Linux developers write better software that runs on a wider variety of distributions. Most of them are independent of Listaller itself: you can use them even if you don't provide your software using the rest of our software. ./Listaller-0.5.8/docs/sources/development/relocatable-apps.xml0000664000175000017500000004433512151465643024741 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Guide to making relocatable applications
The problem Listaller supports relocation. This means that a package can be installed to any location, like how Win32 installers let you choose a directory. However, most applications are not relocatable. The paths where in they search for data files are usually hardd at compile time. On Win32, applications and libraries are easily relocatable because applications and DLLs can use GetModuleFilename() to obtain their full path. On Linux however, no easy mechanisms exist. There is no function equivalent to GetModuleFilename(). For executables, you can still find your full location by resolving the symlink /proc/self/exe, but that won't work for libraries.
The solution This is why we have developed BinReloc. BinReloc provides an easy-to-use API that uses dynamic linker and kernel magic to find out the full path of your application or library. Highlights It can be statically included in your project. It's small, only about 20 KB of C source code (I suspect it's only about 10 KB if you remove all the inline documentation comments). It has absolutely no dependancies other than libc. It's public domain, which means you can do anything you want with the code, including relicensing it under a different license. Portability to other operating systems will not be affected: BinReloc will fallback to hardcoded paths if it's running on an operating system which has no executable relocation features. You can also completely disable BinReloc with one simple macro, making your program behave exactly like when you were using hardcoded paths. There are two versions of BinReloc: a plain C version, and glib version which even has a glib-style API. Tip for KDE developers As of April 21 2004, BinReloc-like functionality has been added to the KDE-libs, in the KStandardDirs class. If your application uses KStandardDirs to lookup data files, your application will be automatically relocatable, so using BinReloc is not necessary. Libraries however will not benefit from this, and must use BinReloc directly.
Hello World! Let's begin with a BinReloc "Hello World" tutorial. We will use the plain C version of BinReloc. The glib version's API is only slightly different from the plain C API, so don't worry about the API differences. In this tutorial, our imaginary developer, Joe, will show you everything he does when writing the Hello World program. Generate BinReloc source files Joe downloads the BinReloc SDK from the Listaller Tools section of the download page. He extracts the archive in his home folder. A folder called binreloc-2.0 appears. ]]> Joe's Hello World program doesn't use glib, so he wants the plain C version of BinReloc. Joe runs the following commands to generate the BinReloc source files: ]]> Write the program Now that Joe has generated the BinReloc source files, he continues with writing a Hello World program: #include "binreloc.h" #ifndef NULL #define NULL ((void *) 0) #endif int main () { BrInitError error; if (br_init (&error) == 0 && error != BR_INIT_ERROR_DISABLED) { printf ("Warning: BinReloc failed to initialize (error code %d)\n", error); printf ("Will fallback to hardcoded default path.\n"); } printf ("The full path of this application is: %s\n", br_find_exe ("default fallback path")); return 0; }]]> He saves this file as /home/joe/helloworld/hello.c. Compile & run Now it is time to compile & run the program: Yes, it's this easy! How to disable BinReloc The -DENABLE_BINRELOC argument enables BinReloc support. BinReloc is only enabled if this macro is defined. Let's take a look at what happens if the macro is not defined:
Initialization BinReloc must be initialize by calling one of the BinReloc initialization functions: If you're using BinReloc in an application, then call br_init(). The definition is: This function returns 1 on success, and 0 if BinReloc failed to initialize. If BinReloc failed to initialize, then the error code will be stored in error. The following error codes are available: If you're using BinReloc in a library, then call br_init_lib(). The definition is: int br_init_lib (BrInitError *error); This function returns 1 on success, and 0 if BinReloc failed to initialize. If you don't initialize BinReloc, or if initialization failed, then all BinReloc functions will return the fallback paths, so even if initialization failed, it's not fatal. Initialization will fail if BinReloc is disabled (because ENABLE_BINRELOC is not defined), or because the application is running on a platform which doesn't support relocating executables (non-Linux platforms).
Basic usage There are more functions besides br_find_exe(). Here is a list of all relocation functions: Relocation functions Function Returns br_find_exe() The full path of your application or library. br_find_exe_dir() The folder in which your application or library is located. br_find_prefix() The prefix in which your application or library is located. This function assumes that your binary is located inside an FHS-compatible directory structure ($prefix/bin/ or $prefix/lib/). Examples: Your binary is /usr/bin/foo. It will return /usr. Your library is /usr/local/lib/libfoo.so. It will return /usr/local. Your binary is /Applications/CoolApp2040XP/CoolApp. It will return /Applications". So basically, it returns dirname(executable_filename) + "/.." br_find_bin_dir() PREFIX + "/bin" br_find_sbin_dir() PREFIX + "/sbin" br_find_data_dir() PREFIX + "/share" br_find_locale_dir() PREFIX + "/locale" br_find_lib_dir() PREFIX + "/lib" br_find_libexec_dir() PREFIX + "/libexec" br_find_etc_dir() PREFIX + "/etc"
All functions in the above table are declared like this: char *br_find_something (const char *default_path); default_path is used as fallback: if the BinReloc isn't initialized, or failed to initialize, then a copy of default_path will be returned. Or if the default_path is NULL, NULL will be returned. Note that the return values of all of the above functions must be freed when no longer necessary, except if the return value is NULL. All BinReloc functions have inline documentation! So just take a look at binreloc.c if you need more info about a certain function.
GLib-style API There's also a BinReloc version with a glib-style API. Generating this version is just like generating the normal version: The API is almost identical to the plain C version, except that it uses glib-style names and glib data types, such as GError. See the full API reference.
Useful utility functions The plain C version of BinReloc provides some utility functions for modifying strings and paths, because many applications will need such functionality. The GLib version doesn't contain these utility functions because GLib already has its own utility functions. Note that these utility functions are fully portable, and can be used even when BinReloc is not enabled/initialized. char *br_strcat (const char *str1, const char *str2); str1: A string. str2: Another string. Returns: A newly-allocated string. This string should be freed when no longer needed. Concatenate str1 and str2 to a newly allocated string. Example: ]]>
Autoconf/Automake build system integration Most Autoconf/Automake projects use macros that define a hardcoded path. Let's take a look at this piece of code as example. In Makefile.am: In main.c: xml = glade_xml_new (DATADIR "/foobar/glade/main.glade", NULL, NULL); How to use BinReloc: Use the special BinReloc Autoconf Macro (binreloc.m4). This file can be found in the BinReloc SDK. Append the contents of binreloc.m4 to acinclude.m4 (which is in the same folder as configure.in). Create acinclude.m4 if it doesn't exist. In configure.in, put the command AM_BINRELOC somewhere. The AM_BINRELOC macro checks whether BinReloc should be enabled (whether the system supports the feature, whether the user explicitly disabled it, etc). The variable $br_cv_binreloc will be set to 'yes' if BinReloc is enabled, or 'no' otherwise. Copy binreloc.c and binreloc.h to your source code directory. Add BINRELOC_CFLAGS and binreloc.c/binreloc.h to Makefile.am: \ binreloc.h \ binreloc.c]]> At the beginning of main.c, add: #include "binreloc.h" Somewhere in main.c: And that was it! Your configure script will now have a --enable-binreloc=[yes/no/auto] option. The default value for this option is --enable-binreloc=auto, which will automatically check whether BinReloc support is desired. It does so by checking for the following things: Whether /proc/self/maps is available. Whether the user told configure to use a different location for a specific directory, such as by passing --bindir=/foo/bin. Users can always disable BinReloc manually by passing --disable-binreloc to the configure script.
KDE integration Note to KDE developers As of April 21 2004, BinReloc-like functionality has been added to the KDE-libs, in the KStandardDirs class. If your application uses KStandardDirs to lookup data files, your application will be automatically relocatable, so using BinReloc is not necessary. Libraries however will not benefit from this, and must use BinReloc directly. In your program's initialization function, add the following code: addPrefix(br_find_prefix(DEFAULT_PREFIX));]]> Make sure you use KGlobal::dirs() to lookup data files througout your entire program. If you create new instances of KStandardDirs, you need the re-add the prefix. If you want to use KIconLoader to load icons from whever your program is installed, add this: addAppDir(br_find_data_dir(DEFAULT_DATA_DIR));]]>
Full API reference ... will be available very soon!
More examples The contrib/binreloc/tests folder in the Listaller source tarball contains more examples about how to use BinReloc.
./Listaller-0.5.8/docs/sources/APIDoc.xml0000664000175000017500000000141112152723772020225 0ustar matthiasmatthias ]> Listaller API Reference A reference of Listaller's public API can be fount on the API reference pages. If you want to use the PackageKit API, look at the PackageKit reference manual. ./Listaller-0.5.8/docs/sources/images/0000775000175000017500000000000012152000514017672 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/images/pkgs-listaller-situation.png0000664000175000017500000014236112107256364025401 0ustar matthiasmatthiasPNG  IHDRQ/2IDATxXƗ^6,b=c1ƨQcQc[`{7 8z}އgۛۛ~3;Alp|(%@P25gC;vɓt8=JG?KwΝ};mF[ЦM~=]KkЪUl-YBт4o__~3ht:&Oi7Ǝ1chÆѐ!4x0Կ?}5+תW/у>uΝcGSj׎ڴ֭eKj֌6 ܜ$)H'N܁<jb(۷ц܆ n]V+hrm͞06Ly~!7jCoiР+r{SϞq҅:u>{?!׼95mJ~H˴_֥Z-Ǟ?APdޮ]r!Cn Ki`!7s{MD?LAnh9ӂ7Ѐԯ_B סoOmAE 9x]j֤V>̃<cƍq미K5.s 7kV\~=NԂܗ_AGޝv{,D0ǐk=4FA8q0W *UR%X(OLWځyAYya999eXN@N=,@NS)S1a95գ:u W:UJ+ː+_ʔEL+ @ywXN@N=,' S ȩrra991,ȓSʕeח<<(G23HԁyAYyZrrʰ'a9CsOrrZr 9eXNs ҥ%C:0 (0аa9}eXNzX!רu a92eT)*^\末+Y[g:΁yAYyra9jXN޹'aVbsO ɯV" \P+&[:;ksUNyAP -2i%!{"Z!W)"OttLVeIO$ ̃LtOU H+[eĿ%\ixTbu)8a&I^֛or~_{! I{H8s&=Og^%iGJ$KR2G$sCm$S]y5-raa1XL8Ͱ'%K28ٙ+/Gr4;TJ6HRлVy%& /F'΋4Iz!I%@3gJsI KbM<0̃<9÷-xɻ[Űo.߻Er~~Isϰ23|v⯃̖^ZÞ޴e4P$ T0 (zĨKjM%\3$nX. ,hofFLnsLħ[E]=^$/fh7q UgdMthƌ(מ={<0҉y%\W;7$`$9cZ'I#1/Rj$#VQr m_]LI${IRSUk9,z<j3tKa9GŅlmu՞4kmU0o @T+V \ 2cPk1$I<0̃ Sd^/?!;799Mfy%A`&00 ̃<0̃ 0<0<0̃<ʤ̛3K%`AYypyz JWi„ ٨߱cAի%#t +(ŗV...|XyL*U*&iӦ8JPh |(y<(z<JPAyB=y`m <<00CePAAi!ȃ2O ̃4 A'CAPچz! ( C=yP y<(z<JPAyB=y`^c[?ouNϜ}.p>'.]kWZfXG#/fP_gt؍/{Ĉľco<ā7F>Dԝׇ|_y4q|ҧg``^<y>'%Nu{4˄ ?_}$y83f“-7D`^ٚ6m:bĈs/:ڔO4OXdo-y-OOh$/O i+NЉwpviT1/&&->sN)닖fim+?vF1&%L 2O] o'M[0/~+>Eӗ:wFҭAoobfҧ~̛8:u4mڴ2%}ŃkrҎGSvjycf̋H)Ryf_شj?W+Ϳ)G<N9CZ;:|Cou.{!.- 2GPf ~S~vOEFնSμlNJg+lem[$_Vxi: k}9uޓ VN=&~7O{'JvYnxҪowŗ h]r)7r枰1ez.n\033ۺu֭ՙOmu7N3ʘP}-?>{M[ ޠkނ~ݕq*?j-zgO¿h'\0O/gb؜PCů|6\gsIk%>5XِQ/UW"@Ѡ~Ob5ZQiׄf&_76L)P*5Q|rw"9Wǭqu_Z]m7UDwJIgnGFcR'SFMQiG{- 9J##;JV觍7D&y$'o3S)v>7fߩ$[2~,)|;H+q*߰ЀJ +vr/?'/?wZ<} : _$4_~Fq7ߊpNc_3|Ayo0 ;$=}Gy^oW"MC?Z#?+I=Kc7fߩ$[2~,?괥M;eRN \}Y qVvWn;XW3Ja1p8/Sϒ/&srs;Dgz㙧wZ5S ]Y[x&z> }t}:|+2T=]Jfϛ<"y=;~JD gTߩ$[,Fl yItfZ 38ք?N%g^?3uN;7QkuE7'iM{.V6d_Wy|r/8LJa?tCP|`xuټ>μqwqp\$]nЌPwOׯ=|03v[Zɐo'sCwj> |}z;hyWm]=FrH-&*$F,Cn}xͲCYof͚e$0TNSR |T.2=Ƽl;-TLOS/8o&{}0 oF0`^k40gZZwvZd85}0 !΃Mcσy0 y063LvDAx$`^Vbp^j!-}{lYosIk>S'7g@QCUH %Se“X#[nЅ3Vegh)8?KkӞteNŞJQw;kBMF4}MJSShd̞H'Є4=ƱX#W=FG#hwPBC8LكhP(reiПQ+vӌ鏽^ l3Wdݾ͘6\yL7t)0 ˄}Uhcfom[h {3mD6 a=_G5/k5^EV?߾NS2Z.%i"Z.i<~Csؿү/4s`3nq? h|<>8`[HOY5ؖ3f۴E>KTs#9ڻx_o 2y&ckBM2!D_([tE/(1'ؖϋ|D/{tNm%UeM4PF -El7&z#l7&z#[-`c }G }K R(WL ~^_%}y4$cϋ~Lp*;<UƬ'(Jll6z>mli,l ,e2oE l}A_޽WOكz|Nwݨ[*yO~#ϋz$ҼI%IJƻ2Sq"*1 1?bLo`c ll+uLٝgS ~^J6yOw)q{z+Q2xJ j܂G6;CFy`^dDd*7R-`M66D`B]:RGԁ֞ڷvmmj1}ܚZVM ـyR<. > 7naCQ/~ [+o>%_|'16r ,w~ncX2%8[n,,밳2DlSI!x `kI-[PԼ5c}D+lsə"u$O*Qy5.__hӹn>`gбw(ks8_2\R433_+lfT'4o>~Grc7+rwzJz}+p![Nny ׻SƼk3e+ZYY`2f<<J|W/jC>7>bc ؼ15f7F >կKunܬ[KSuӒKyL;nݥ7[puS%CDŽ|S9_.QRyK*cb]Wkk-hl/91{*imVImlDt'j g[Q]y1uy=Q*U\P/hw.e8YehHW=ꭨփz'ʜ7=5204mlluQ&I^6Wb^}̬׼Ups[6ծ_-;o B(:UBU E2 4p=$ T|oK`^dbz珈զL5NW^P 6`raZ?o]fj䜒a%?o85%EDl awwu˔XPۚ5&kP [5Y.徕r@Fb 楼d! *PI`:5@%&#3tWm [2Y暷rYo?x&64L@yUϔS<=qEvy@ w7ۼXSJѭ2Ziݝ2]%ʷ?9l+C 1 }LǕTrq2||R6 6oBMkԀ~QVy-s;ZT^frTgfalD7mC%V*JSinN.]Uy)In,&G&3C:vy&~.>Kn{GJsk5CY^q>e$|cs|M>˼:Rr&l5w u7˲vmkoE52VՁVѢNa{"[0qG`G|4ۈ,خl\9ع 60?pTp9EgOc#wog勭)Ưr,-CeoE~W ܖ=-͖I5gToMhfj rZvJqIgJ1ӷx^Urj^g<^x$m3],̓3e}B7UQCOSzTVꈠ?RUZ`]` rVJ7HT]qǟFn9(-ʃs ̫{ )%!\yX?O:BRG{ҶH{XQƬ'gFf-[-`+G8h`+I%8hcQ**q&g{"+x#iBI)amnL{Ҿk4({GҾteʾM6ɗ|l"hllAm^U 䥼9)'mvde)mo÷їTh?K/SS` KG~b-|wrEjN@dkIl`Iw)-:Ec{R9w:&y+σ<\?}-=-c=nw]iO4펖w:-;KXH}0gj MOqޫ?ʓ`b| ^st楻_?Lp>1g-?Ga9Z{ޢk@#0/#dyŨxP-`m@ZE~ y&Ǽ !5Y`[[?l%cc/7yϣy[\?<om/|Ll~ y<6`V2f<6)]n>[pr}_^Ǎ `<eZp.ܗoK_}^'giyy9@>0̃ѷ2f<xO) m,*t<Odc:uK~xߑ҈؃y=5P ]}DW`>;"e]{&y+cσa]?t6mD}8H.L`6amY?/mD8}M1)E_5&ڽe˫pPqNeG>yiϼJ9fϦYh 6&Oix;F~h<>}W/уw.]cGSjߞڴVysjTn 5NUBBjU\*V NGp_L1类Sw #W زyQY;I$IxW&w*TC^Ő^3ap!h;B7i { /_/x|~I_#|A_{S^5EԳ|@ew/dw]ˍ.s'pwH?؟ҧx6dN~3o).ӷ͟G94g6~~Ef4#¦_4u MaOIP}0F̼RT l~vfIqDzcؒ\y)f<$16r ,w~ncXJ1ظY/u̿Ko<3G䶔[џQ7fᅲQàq=={ơeԵl)wl խK5kʨ\*TeT)![TkcSyƬW GZf3m`@Zմ:`c lli4Mm2M`swG~14f4E~{Pl{۲y5.__m:||:|wq\K*fff y-۬ޚҼ5*e[Op*ҫ] "_V@oG::9q;+\Nheemy<n2Z(u҆*ɨuCʨ8PyݻǡOa\EkV¨Cj0u!!F]rT:$GG23K6ݙ7 ll4Wm6`EDo$MF2Do$mM0ll62 Wr<+y`!~ގ(]^A^t$OANss?oec/qb/^iU.ɉvf2-&%SO5 qn*VoٳŃknV)tl>cEO*WGzhuwʘwy(ߺ KGqLQOԚLTLQ&a*3Sʖ%eVQJG(P`֬YUTiڴu޼y8g)AW66ʴOe§1`NݻV71L4|WO\r{;zU _w}B2U.%9#sk]?3a˝;\Yo^g~+G ܐ4*twʘw ?!y<t'afpSLQ&agȨ+ZTLOyzzę3g 0hРd3*l ܷܽ `J]:Q'O0ԾkKmPVʁ<۬]6rߋ11ӷkR0OJ4_Y.Id'I 3և kϞ=Zg[L+ G/]L0޽{F2of ]W)ã=Wi[$,ڵ{?3E= I<۩ZޒC5f iUwfRsHwҁyܜjMT?d1ꔙ)>>3r27%;*cŰOA GV]4Tqbɿdί:ZQ+gPN6>~V X:Xr|$ q&9BY8X88 aqЦ,{ٗ\SL`WϾZlTUlmKG.OۑHM1@wps19'k&.K7gw?]UZbn$N+ӧmڴIvFM֯_5~[T4_F))P40&NLarKLa&@MBI:u"]^'*PE=OƘ_ҙwȑ/" [eHߘ8;?W궥B;r v-VM V䈍sJT?`'jSmj(}ue/(^mT転k3W>\Eٻ9NH9@uX4zgRo%&$̾~|rRG_}z1}מҢSt0F^썱h/s<xK`R0/$DK|1OF q(;4$':ݻ7}+5M=oqehHM-)Дr?|6 ;z/5uTW95&:*vU o[/[3K930#ԃQ9GleLiV ïzf"ySN$GU |GrK%X^3Hϳ7Ǯ I%i$}c8{ emۖC|xSCFsy8^A- 4JOGŋ˨.k.㞷iIL aM#61V*GD l7#@#<)!9s'3%$I+Im5$H aha`7P66FHgyylhl q[I*)@ 6/JE=3?Cy\ՑmT '<%}<.NUȭ"/Ya94@^䬀̤͌p<^?<ۄ<\?<0Le< 򭫻;Rey0Cǚ3G~fֵΒ@iy7x]l< t_nI7:nTHoAIa^Cj%TlZ}ƬNߦ5+dܓ<툤)_~BZLϿȏ2y<=Y;]y"pRݡi9c`^chL=Gl YyяЄR$2dq| 2-Gӎ4y<~o>&|d@طiyמҵG=h8|_=F'C{"iSe“ߘ"ёҦӅ{p}]1pV\?/U6<6:.>}[X2e& gMcϋ|(I%IJƻ2Sq"39<0/]ey0-3fG$8%ӻ]VTuxHUclV6^>_}~nbF?t1p[?/69[|J_v_`CƦst_~ [y`6amY?ﲆyܥ7`W 4cM>VV^oCޡ.|~pI%,!e[SO~Grc7+rwzJz}+p![Nny ׻SƼk3e+ZYY?G`2f<6"t{ 99[{@;bʂrڿdp蘰a*%J*rI%pL+vzjmM e9'f]V#*i޸HPu^M]z|3jھ+/.ޘ;ޝ2]1qXOƬܟ7f<ܟgR&˛.<ȋc-inx#m%N;ūB"%9y,,,%ss w B٢9ՕQq|EAt3ss[fXuwwq+Z>GnK`^~sX\?oG.,'\m [Ney r7ʫɯ S s*[>SO5]V6v6T޲gˋ,y}Ɗ|RU: T@oN.[o,`٘M|Y*ۈR@q}/\R]:TG6fעZ5p T]UcWUpe,\* @KSiwr6FvѮsN9g+mB[6M6쵴v aիhOV,ed]LًhZOѼ47m͙M_-hL9fQt>MShd<&M_A*u~^Zy).Yck;2)V<0/yyw 6F( E ll.-ƃ-`cO i<'=Ǝ14c<ܟr-9)'߁gkg n ?Z<>`'I/G2~#iN=}?1!4u:L@Ƭ-R~ƋQv(9,oK`^:ʘzSoc`c lhd,3,6 H? Ql#h.ؾoA4(Bo4?G y)6] iU *?G1y`^9bM668h`34`A`c ll6W/C}_',D<{M3G{ ORҚt c`^dɘ#Z`c ll68h`M66ؾ/8`A=>ϻSnԭ+uB]:SNԩ#uTF"avcؙOH`^&dP邭ixӜsZYF+bc ybM-֕ uNlҧl[j`-VlͩGчajҘ+ȗPV~1$IRw9T\$)Xvy&~iEyn_Ip:2FƬ'q~;~ѻޒzGؔa62&&6-qĦll0$ӳcIvCy|2RƬ'Ǹ2U+j م0[3kb`666sWjM2o.T )lfe^W쾲~c5'mوRTʝ#ͥ@Iz#ItK&œ$=R^}%I+$)3`3ѾMŭj]@}+.mk[J7{ެR9a,:TVl2;se|V}+?l9,hy*/G)=DZg$-$$$MLQ$$}U$Lb<󲕌Y?O095;֚Z7Ѽ>\ћ,,hЈ18>WTaU{^μUcekf)Guff"'ʽ)l'pGeKSi|.X[y7si ^ͯ2o RQ3;7s:c"=5\'I T6*LifqI+Iw5oY&IK.! ٘ Z#I%ia|0֫t9蝽x=T>dKwerN]y([y`^dwZnA-l~"Oх{tV .nckWdo+w*f<$16r qy3hoSiS/?mc` KG~<׋z5&|LP-wEütfpc–ʛO5!W[\y`~2_MӝR|>楻Y?MvvtF<z5E8hӹl:`gбw(ks8_2\R433_+lf {kWQ#1\ sWzJz~p![983\N ,SPűX2_& ybvy[$q\G/= b̂OwC{۩~(%gbGߙWkk-ݬpwꍴ6yֶv"Wj1x 魀2]L[rŐ_6лSƼ'\A&ۣ%0/ey0l툒UxEQKᴼ,ա7"Ǝ_Ĵ9_*$ʫ\ena/[hmMKx 9QY~+.6t鉼fz+̬ñ- e1ɮ˼ZmNzu2׼z3նa|ʫN}Yk.*6T޲gˋݬR}Ɗ|RU:nJ1,Qua_?oFٙ\r{;zU _w}B2U.%9#sk]?3a˝;\Yo^g~+G ܐ4*twʘw ?!y`y'cc-9o3y֥`` j?+/v*F$v@Pk|[_{_0/+$$;P@\ \ \ \ \ \ \ \ g>}իq( u%B;AAt֭keyfРA kϞ=NێիW'ceO>vvuy_b{ǎÇK ѣGN6ÏEuw%KK˄7KWw*i;y&n12lӦMaX ? &Z=8 4  JLn (K+j ̃)؃ ̃=䕲Ns ̃l%<<  ({z`yd`-[<rqqaP@A`yeYm۶󢣣O:CA`eM4q…Zlmm_|CA`e1uNNNț7/SUT 0Zn 0n߾mff @APAAAZ?~< y j*5𬭭qL ̃l+1iSu8 APՀ̢q@ ̃l/_p4 ̃l.ЪUp( ̃lSN8@gZ&,{;jg?4eɉLf<)Ro~<)|(m,?ⷧ?.zB04~5_-۝`6M9zB04j+aoy&Cg+WtϦ#nZiY31LyOn`enfa^է oK~z-Bd0} WTGYy]Bc晄>x8$;7Pe*ds|`b.nK Ve㼧h Wis [k…mw:+ctgJ+.Pz+169 oKJ9*`vSѿ_ ^-x;N.Du$ߤ⤍S{_ ՖSSzqOvyss]*9zoڱ{C&'.r|+щj,ikk[pٳgU<~o| hsIˍ 7;j +|E&8\],* hYAb{p9LY޾H*[%X5f\<f#x{eo3X;(1o0o6saQs VpyNkG Wƣܨ!m.G J]%kyONx u. lưw*_zի]tAegp 89h9O;1 &q_45ݵl]|K>l3XE6ѭhAҝ[龅 jP <ݵHkZU*a V63˼Ή6N WG LE[{6;K"%ZGE){g5i=ڵkhv*齒儘b yp W (aL` |q|w*_S܊-a`]ӿ"C ?Vcb_ge6lD#-eX! 8d,-U -ӧm TlµMxfV֎CՓ;UR?8 Ԗ?Z?ﳇ ۴qSu4T2]^[>\YUOnٺyL` |9˯;?Ke4Py-]*y` BUf&C>ڣpffÒַ%llrx%~O 晆pO:jc{:S-8'+E_+o׉!gjhTi%3s1p4ڡ]\JwNx MML3 rq7a6eO[C0$e13 ۻlZB`ik A0RVғkMGHa v϶{ I>8sgdV}!AQڿ"J4̧ *l;a^W(8*vq>LɎ9H'98õз ,Ӈ픆mjӇ7f; xt"Vy*WUI%uChM/8AY7{nAĺql+RKڹ[ ɂtox}G,QnSѠ̣̣Aj!]5nȘ6]4DimGlas>cĐQJG;l0K_KI:,#'>FIEaڵW=$> HE gGRϣQWs+gm9&LnS袀5~s1puY3F lR1^ohapD1~7-Y7A:?x۷LKmT+ c|FY?׵s/ _ X\Gm5݃6g˄,G]#TdGRϣQWK 2'WUΝ "͕X7civ Jvj}?駵tAӆ}/+v9SKuLBUkQ̣(ZJy4y䖞ox[76!I$GȲkaKf]"MS/5ʱtl2ۤтdBMސm<{˲k~x{ǘGQ浔h!, ?fۓbl"/nx{ǘGQQѠQdѱM<tle^3սɴ~ ʼw?h<5gnܸqԩ&6w`@'~ ʼw={X[[ǹlZL6iPѱM-7gC3C]xY_;<^͇zQQѠ̣ldѢE#GTSS4iƍϞ=Pɻc/zV@ |MTh|3wZ?2T__ܸqW__j}N&H; #L_K+iOoNg@}ey4ٹ'N200@C?tңGBKE?,5[O|3Kz/>ZutHDGGGEpppuō7Θ1C]]}zzz{N]*bΝ-BwWPPW_UӚuyy-%hy%;97dܹ#6wO 5r<Aua7o0Ç[Jr\i|ޏk'|fְ8(h-E٬a3\l,9ĄӱM<v67^Lw[ eQ1?̙3=zީS'>\\\˖-9r$;ԩS՝{RW䚶v"" ~4C(;M(0,$FyMIUf3JQ;&Y|cGe\psU^wi̙Ǐ_z5MMMmܸq&d*YRy_eH#zRM 1 M 2yKHe@y995ttl2m6pLx]LJ dz JyV$3Py\rXٌ2zf=2ﴕ:!gnT/Ljnݬ8ư͂a96cFqo' 8d_ wQTh>KH6I?BH 6y)y*/2\syy-%E-!2$u:1d2-Z +4XeF)Rost"o#b_sf0aȺ9Y7!n ~aZu;L[AH90k䧑;NWy_Q{H7B !~o>Np"3CXvьh<<ʼ&)/4̰]4 #-A*LPM$A5~c˨7s{&wgKadɽOy'6n‘Ii붊KҺ-nY#$x.%\0oq -kJm:۫d2&A·7#/n˪U22~m1v@KGGE31#E|!4lAq݊Uh]NEaڴi |zU&(r)~%Ko|Q OK͏_Vnx!0KW$ngAT"fo0l[m>nĽo&y1-*r5,cA–ec8'[-٩J}cpŇhsv7wM}YYQQ;6oʧW3ϣk),q6%,ZT Ei<`l6dKm ,RȾ5ȳl}-q3#tgK 1z>㩰Gl%[1<Z .InR-vyRKM{=ֺ9ٽdX{6Z*g"H" 2cκc'PQhӊaghݘ jw  Oc3NjVYA0z uP&s=:-Ͼ2~/ѧ 8M{;9BJU[P~f)5˧Ӳ~ec1<<*u )a [W b|P+ A}T[&K[n]@u}U`P8pu:LQҙk؎Ns&\|`"Z7g ;j#xB7i?l!*hHZ=gh Y7r6jp3kr(osǸ#c4y~ct  #beĴlR$ӂi*og aw;m+7fZ #o##54zXi4=:Ո>2221jY0fg |!&0 ϻfXolPEG>(wht!^ olG%iRa:Sgu)ҔtvH#4ykm)>y䤒E/c2]Wx%/f=f()FFZܧ箟*)I${ [;FXMMkrUѺ{2̮?tKmYԖ  z{d|\Iґ{TV} ʉ*Uծm{ںu+ IƳy~e^KfQ?e $&f3x0ǯnoqTjy@ 6(wҵ J$N~+MJSJUky,Bg.rgח?3im:]I%|hMQvYdgf(kYgZr_^se!-tKny'FM/um$b׏H;n.Z,Iqk\jh`>oN# h<ʼ͢~y-A͘yv'cxM*M82 Κ 9]?֓1p,!yy-%E<ʼf2Fe,qn-CBYiFҍu}lVO~l6e0L 3ON ۖfC3m<j\%'׸4c2eD($n``>={Uu?ٳһOujv*&<宍E@Oxx#S ̣ۤc-=lBtqh Լz*.6jkk9s9r{3=]g\(I7*? xWAFޫWka(((Z|b]lS'1:3." =Z3ٳPw2Y Uj/s_&T{/?n9Hh:Ç;Z?2Dǿ_:zVXAˇQ9/-~󗬒Tah|L滤uE%eRpîC5NZ]H!Zš >2&G;Ol'8Q#}2O#t>9b_6p_ iNCm+sn``Ea&gnWI!v&^{XHi i_/Քyy4%£b/'s>UH(J+*B$Qո2rpr.[%a\z2rYtM|5= >iҤǏ7SD'6)g5ҍ~)> ]Wԭn9-Z7ZdEMj"Ogyy-%EҮu!|c |F Hˠ~1 GHeMHagOzS3N`F 7AxܹsUUU׭[׌F_O|/OޓDE$&*ЊS|cG1ԑާF-*U>2& ,N&J%Mg|A!O(r|حG.>mXdъH+9C62ROޥ=Qy زpO2Hh^Zظ RװS_)/ДHT  FSnQsMm-ZCȷKo y! z^̣ۤkB1mN L&?Pyr(gfH'YAN)|K)0롱Cl1gtk}U?ZS}1H#3ΔWl_<^iVZ@9䜃mgޤ]cJ/@ϐÐjgj0*{ϣk)ь||<˓i,o! p<.|Ǵ2H}X.LEOH5ZVKvv+.X&z%g}ƍ355mjh<1yvq8vsN=2/-=qo' 8d_ w,~ Ɛ8 GH;s}3U^(ZJ4ya*LpRH#  y&3"q݇$QD;Q2D۔nQX4L. [Xm:d|ِ:,v/'X/v}jSg [f3~WGΖH|jں< [}< ׭>hHmh& gSPP1cŋ.wQҔ߭̔GȔcG[aiS^]ԕ3/ΕoP_x#C|I32;]&2 ^[__'̣(ZJ4y,*Lp!<3l4 y-+1xd>WPTc]lpТ{UvױV[co  ӱN^g=ixYm>5`;bRȹ3ٚ-?ڵk۶mG|\֭[V&b)|yc/Vǔ2x򅆧er<*Ҿc~m̋qdF9$L"xF3|& m*r5,cA{=;&elr̻Ax̃bm>0Hl->q/ix1Tc:]sH{~^.6LvgY]gtܽ϶ aFvipإV`nΡ˳3Y<@XBϧ6}}};u$QV__?Fϭp1BܥMyXݙ=)?z=zDIS~:qEDӿ55U~BV >CƐX]1dxrqRs 0L :) zt8Ҁ&/ RQxwGC>UQNIx`_NQ`㮩,\v!m2QIkat.LwtSb^"t]?4yKvd^ث?otRUUEogJں5;i%ר S^R)ϔ[W*2~o;3EWnEmN@yDSx&Lrcłgfcwv9AfA/Ib=>-A)aiS['̣(ZJ4y.NLp^"aCyO^É #p!z\$&JEgYUvpK,_K?5~>[JYwʝy;z(kȑղ}lxI`gZܳSMժRS>}햑+)%x=t{,^Iaҁtޓt~Qx} ɄI S̙>Q-g aF yVm8d EM|v/FQ6i RSSCgmm]#Vۇ/2؍%&+tMܺ:\Uky2MRNZ8}>Wo$,]GGWE?8|N駼csiGwI&UI0׻<:IGׄ-VO|Yw:T_S>]=(:Iwwu֩֞SḲ(ZJ4y˔r~1b5xaCs>mnMMMCCÀ _CDIDAT.PnR5;yy-%E< ¦=95{lt{d_55WSUU;wnQ+vmRѠcn9$խ,rwJSK0^icﱏo|4vJ ^F:fGF68sԩSη}Q1H<'ϯxGQ浔h/0Sc2RRR|]ѣGڵ&&&& ^e``>{l lɸޕN_5qyy4(m Y,k^Ɩ-[~_ҥ %_޽k}-M49bo~x]<ߣ .͔|SUU:t(uuuf3k9CQQQ%&<K7:ćyy4є!ڨyH-QٕV/.|GG~T6'!:M`yP0 v[eѢEӦMcmo^ <g0XsI ;tiʼM~^lEof2u8?Vd;]X.z9RUv `.&|(Jo w qDcYl?(>/Y;m"H7UDpf{h`sh-[fggǵ#yH3fkGJ?dKՉ!r@:IG69=6cuF=ap?3 p_ J=nMޛNPx_hb{e!Lw|! /AETY/mZWCd d Y!d㐰1Lւʂ#u4u^0k{ƕ6AΫW"ug Ngu/osk+]WP%:|i߅ݻto222l!d$aG7"d-W:]B[(Bk(+Yb#6#l>s`&@9elҎ@aH5dc{ i F t0cS }nƍ2oׅF_O|`'d]|lGkIOB yy-%l2Y$t&0C3Qo]k-vr- 2ZϧI,y/2O MyO"[@@.y?G#$؍p I*2;Ua8z~-[ d ag RB_3OrU,_Q"[B x_8F\c82Pe"-)P!UQ$$tRKG6)h4y!ZnI6Y# ވuo"QhZ7B3l[⍼%h>̓ p.M7./c8EGg0S;NNyThѤ)t?qBV"M'Pd2?x'G1'5F l =@}@.NJdgN͞b:P dԩSXuNNy;!Ni,̰=FgQx~(LPMJ*M T;fx3۲4od_ y~e^K&[KH:l"J->@cyIIIұ̋djkk?~o< G#]0Kc`"m!s͆ a?Ţ]] bwyO?E0n=:#&Ζ< Fo6Sj߭ftlel ~ğTxcm:]I%|hm;2y~ÐnFu#-^81_^kݘǣՔϬ^ :*! Vp! }o7jض4#-0'.dzNNe5̰ y)a ^/#󹂢C57d-QmݚҪuk{,Atl3`Y,ty+e޻M~yz's&uw;7Xk5ܽrVȶԓкݙ_j'qFNYUGRlZ[kIIг! ,C1c\1I]3W/TtZpwwWSSv&kur2*,3gE3 f!iaw|\MKNj4|P袟CڳGEsM>I`iJM_me]5Y-y s>-y~e^K&[?O wdW/l}^E=4s vNN\rIK CwBу9~fw;E~ GD-d~'=l8 1Dw4T ۶Y\zSjSuV:I2m6P'7vR" -8kqv}o~Y]<>zIq .˪U{汷z٩Scǎ5gJ]@֧b-OdH,](\p!eLlv9l$fY.x;j]Z22e^2uI&>R=7)'`io%'*+gd͘12222Fe9W<b[ROMŤ%qPVd|UY{ܿ-Z׸w2GRϫ+mZ (gaXn @ءɄjryTo)ry\˿%K5:XOQa<&0mRѨ7߾;'._|-]^w=xxPˋ@d5 ^d!ԭ`^Gtl2Fݏm|y!rjjd8>EKb( S-WZ|HF%eT? WVCZ3fC`&ay2ܦYa +e"!&K84vAeF}%~RK'R,܁Dy$uoV~ WiUoMX !v"#N?E 7%&c!>EFyGzз91ϣk)!O<I@.y()G.W$"J!hY~U~A ʪ؎ǒ`' $*["VW@̳)falU3,_>[ENd^C^dאyA: APt̻Myt}ey̋ ڵk5Z×"/o%;Doժ _;v -gu="ϢvTμŋGeg~|'R*)3I&R(&Q75$+X9qYu'Ed`lnu[ŹVHx=|XvB}wҮf5˶q<}BD+n;fxSj4\dP=tUŽ1iS#PvĎ(:IG1/ZjIe6!Y~f|2tI8,b)?>+ٶyToF"^ ie,Qp4”xfEЭz'ν8N=k<3:{_o~s[hxZzK>>P7D#euodR΋ [yG6mɼ&{DGLӁs/]ҫqGQ浔~y)>PYn nއqlrTUtXȉuv5 #g%%G *,v/'aj.@ " [fsp:Z1EO̪vZ,[جs>cĐQJG;Y,uH-%HB^bŬ1'Z֚ԮmL'DÅ2XZ=4毎}:ψ1o7YU#tgK85FOx<Ԯ˱cX&~^M*a[yG:"HVGDG:[#yGގyOAјhf_`֘vΦݎʝw'Ԍy>]PZg:&_kx!\b1X,,R.M&NUkR ;2YbQuXGcG8qO'ZY`/Ayj̣ۤ6*T)q7·!pG3Yga=\6N֭r+9ZXRU{WSII?ƢKyLR.9=kGҙK.g RaY)yS,MX>U%¬:}ܼogobBuSTPp}!b;ȩؒjs.溒Eo1Z4vD[#/Tk0am;!qҮMi#ee ʼ&'S3m_xdyh[ 齦S:!7桦}7ŶPvn&<{t<2a[n統+" 15 b\?8Z5c}(77).I&elB{9l,*H(J[lSV>W>eCsw!xK.)#Ch= {{"݅0 OP""oB3*GB,?+Rf2%ݼ {}I>p,ߙo "Qyȵ\s99g!WӐu 2OBqHCʁ;^K7<Zh<ʼj+ TO=wD tc)~`_P, ]'3JvYnvGސm<śm G^9ؖͰM2 .4xJ n9:$ʏ-ی6o H7Ҏ@aH5dc!?eft_QGܣ*/6x,o^!'\-go<|*ɢ| Wr~lFep=[$nnɲnb6)ɴn2>Dl#J)rD7'ݍ==#KQBgmGAAH9@ n#J@F:]"=w(etMF%Ō 3B( QLF錒 rr|&e2P$N'LEiAԥyϰDudEMr~"K$C3# iK`/bX%lC%ĝ m~"B\bT*"\!p2!'A84FR`S̻u˭^yy-%䩟DS MI4T7 8E>cZ>,WC.z8x@RsnrLƷnMo" wbEݎ"Eyu]-iomcض61 'Z ,eJjj2 "$F)3s敖24e^y5ݪiRH#  y&3"q݇$QDϻz)Yu62y7u[n3x#$*V8)Z߫;aF3x[G"WEC X߁!2"\p5q,c (1mRѱͦȼ,ZH3"-I i |%)ubDf]_Kΐcd2:#q<[)p[aB eBPjo+x _F--%(A"Ba2kj dȇ22e^mrACQGiliѰh -v"QS-ՄgX$8|,۲'۶Sꯩ2R~HkRк=2)7<bx X %A"eE~ QgȺaBo !h>̓ p.| ~3R[!rkjqQ"ȱ c(̘GQ浔~^a^`q ⣎H ۅH8D E$ ɯHT;fx32e?>bNyIrO*Ae~ȉ۾N`̑I l,@N3k>n-VHx-=@m%=M@,̆/s9oLkVAHi'\@e܄FA PTWAѥuw3ArQ1;3)$$&(jZHI0b H+(l@GC/h`Lfjb- >}M#"n_.jls> 2bBF!P7;O[KaFG`XgG;;zx~\RreYUf.|y0(܆<͗uFV <rerGJ?!#9$qaAڸj3ȝ  '^W@!0̃0oE+Eߏ,ᑶ.?*g=9t1Q\w+f]Lw~d* "'wwK6l|g7=I_7}Aʩr;_9W̃ϳ:s<;.3v7wS5Qv\}oŞy3Hm%.] u]t"kL'kOhuT)]Xz78q2/hzd˙WYa2/I%|7VD{XKKQ^C>ɅR3{ZsH[ \s617q# :<cƈdX:nG}{NrTyNrtcQvl7iu$;zp'{퉘7|2F F2CRvl\Rn5W'la.KzݺM0c- ~G$ M^+7ˎeLϳkyeɯEWLxA=?iSH5\`Ueಭ2~-g^EɤoI%mpZizr8oNoۚu2k.uoۺjomzO8z[S&4qjSwcyPn_\;p.뻋Btauo, 2:,|L=='J Ị>o{X5y<pI1n\(q}}:r*qN !ٌp2umJ}DuvF( =vt U]jj6[IE"?O`^bT7 EZrZ{yvUfh|[Z9tsoz.*,q Ch߹he&JLI@,G \K7DhNR떽Bz;z쪧YWyUrwϫ]4m>5qU>^qoUen Y/ l?օqأ,-b8s{Hf ^=q*j8[io?Bݙ*CZ~`+66P6&YIE"?O`-J&*u#,VH+$ʳ:h C\˺/ @^yaR8Nx֚so޸⊂F5=C\ ;@jFAlGj ınq|[]Sߌy*/,}WWVݣ86-3]]Nܺ+8xNRWPܰ!/( myzC3O +M30ޚe-I,b 4|oTVA۫6."mBx[jI!!3IKDį "Y~};484t0lʔ ,Q]m]MyRѨk4g 0iH#SےF{{Kr8QCJgRX&~kHi!??)=2 SVɄjwDvϠ%.H81"ȥve aUz`$ަꪤW qESdu,CDtf-`<0).ܓR+ '@XtSa {Lyhσy BAlqSj& =yڸj3qJ>iR9-22Go3BrJv~:gVx~˝;ѵmku<0̃<10/al\#9sfFE=Ʊ;}[Ļ۲h//_а_unn 0!?̓ yfMiT2q<='DD g:d !G$$%233{Բ`|AyS 4ШbחP*c/aQ)SI3: @IO豣c7?aC0 0z\˲`I4#i^go塚SVS`OoC b~.CZiz>M^ll <y6ʣO^ewwFMMߌy*/,+U e~]ޥ뺺bߙ,8xNRWМ^y<<yQA&U MrF%ʩj B6!ADDDDDD*s;opm,""""""Ŕin C""""""M)G$X\z饬Z{ Z'>ײeKx ڷop%N P(9$"""""""҈tЁ>(C""""""""L=N)9$""""""" RrHDDDDDDD 'A䐈H#V]H!F.T(DDDDDD$ |h.˗RPD!PZ>^ہ:`5_؍Eq&.oM TrHDDDD.(.I ź? d#|c`1NIDz9sٵkוTA4r 㤓NO[ntܙ,ZnMzz:iiiƒCEAAeeeٳ7lݺuֱrJ֬YCii%Ca13D$ 0x?3m4PrHDDDDnHy\x\tE\puY$%%Dl2-ZĂ XxNY vH#3c ֭[ֲk׮套^RrHDDDD$.ylða۷/F' ݻ5k ,O~,f,9ݬ}ǣTyرcٿcB]rTnn.{Voe"""""xX\ڪU+}Q6l9sc-Yv-?WK)@zxx[yX+..b[~N~~۫7X|ZPC+й RԩS/T/~QU> %2/rUsy;rH(9$""""R{%111[o]88iبa¡!2eQ3ĵ\䐙٠AlѢEffv7ls}r={?Bͣ`x۰aCȘO9{g7-!!rssmU33T,]vsj|xW^1cϯv{ŗk=z-[YsHjj\fϞ]rss-!!F۫|Mut̪+Zi}K!+(oMÑj l-_X+Ԝ+R<NQCϷ믿va^zUXgҤI֢E*m{Ŗ{$~njc !ND뮻"1c[zz͘1 -33JJJUVVXXX 80 ׿%$$}Wa{effk܄:`U:Wf`ӂoo79?9 `VVVyyy$$$p|Ǝˁx7#Kru1qD~ӟ\XIn?t҅}, QԿ\zMہ40y睮&*kӦ ӟ;w.ׯg$''W_M~~on233iժn777;?)q-ТE ڵkSO=s7R|AڴiCRRC ~yCm~egMbx`yl׿;蒒 ocC_|Ekݺ-\0`lƃ8U_{rjԽHI&Y˖-K!+W]ysҡC6m۷ʬըټySOhYYY!ku%wczwUV;=Pq7c|GO\w-}]O=%jԅc=/SNSFr,Bnj3SNf?|o߾?_km,7orHm"ٳgGHEEE$$$ |mxr-Wb˖-۷1cT߱cG.\ȋ/!C;v,vb׮]#ȑ#ȑ#| 2J w[oe1--5kք<g L8q՗w};###VZ~k~m0Նۍzr,`ժU\">#G/ 6mO);vO0-`b"""""+ʲ"W%/oubcc-;;۞y >|Fm[VZĉnwv'?v8`7t%&&Z6m췿5k7Ԟx ܹ5kN>d6mZc-++Wq}$i>XV[r=W /`ÇAً/hf|͖bZi{-!!y33{-33B-#xi۷W_}5>M[`egg[ZZZ Tױﴛo9:W>}ذa|; 7W_}RRR즛n ll;v찲23sjeddXFF:ʲM6ن CActKς@@\U>H_Wg/0+0 )\DP󀗀'HC87J7|c]vu;&iĈrr7> /C=df osεnݺYfYnnYRR=sʕ+-###rx≶`[beggWX.XylС*\Z{6{l;wo{8bܹ͛7}ݐʕ+n֭[ۓO>iff]vyU{T6p@>}ԩS s t^ u]"EɡNx؋I 5>~ӥh3DDD9(_ݵB}뮻lϞ=}v۷3퐚^x[<Z6>|M; 7.]ؼy { ߷d3sjyKu5?<+xlAc@cǎb Ϭcǎ*oVv#}EC ,fm۶6|p{mݺu%ܹx կ~eݻw(Z $tMH< XllM0A?9b=y<o0joNҬJKK}>馛,99B-UGq26~x1cXBBo;I&Y-BN[xOxBMy@rӦMd:tKMpcyW-99BI<Ӗj6i$3sJOO UڎuPXXhVRRbZ 1^2m4_,oVvQ!R&ǂrRRR:t(?O9sQGpӧ/uV8ͧqC˘ 6}nt`޽Yf+`λf#Vs(>s?"5Pbp2Cmɞn혤 elٲ`NݨDDD$  袋 83UXXȧ~ʢEX`/;:{ i!ǹ'[o>j3g3Dl"uAɡ= ܗܹs9ݎP6LwC }]$G޽y֭[[6! 2,>>>:>n"ƍ}n>pm!""" M?_G[JC Ӽ@+" tr\i{%$$#}ذaêG>KKKsW_53+VX^,66>^{5˭8ກ[`egg[ZZZ.Ga&Lr;"nve_- qƹ">#%Rۋks5c8۷q!""" x 'N-F~BCԽĕl֬YkϘ1k׮6o<;wu֭ʶݻwٳgܹs}ӂ#Pl?_aʕ+-##N=T{gСC֝7o}VPPt@x≶`[begg׮];2eJlH}Srz֩S';|,"QmC;R"h;pz߼6X=ur<9{kV\\l/--/9hff6n8KOO7㋋TYUVjZ7P|qqqcy<֯_osN1sE79S: ;3f͚KP̙'L||<]t^㩰0`$$$pW_>KKKyiӦ III 2~BLO?4:u"&K.]O^]7+Gr- O&#>>JHıff…,\Ν;ʪUx|u҅hѢQq1w\/_v'K/q ~ <Êۻ-[l:y\Zl%#ÅH4ZOǶ~TV 1cXBBBZ=^͜6-==ٯkKHHϷi,99نj111n_ywy%&&]wgi?8p`uŷxb6Pa{Ϸ믿>#iu)RXYVXX*N:ٳ>k7o68`ܹ^zǎֶm nݺ5*o{∋nHU_z}{CDDD$=ygvx0ѳ}$=QXthԔCkpɡ˗[-==ݺuf3g %Ko-Z}yzx\\\w‰; ꋒC""""U +03aÆYbbn0fQ&jʹh^~eC ( %+*++ٳg[vB.סC6m۷ʬ ꡝ:u-[*jZC8DDDDj %&&Vj6qD;D@G)HS[ Nc ō7_JJJ039⛗ƚ5k*,_TTDBB lذ#G9<9—_~ɐ!C"z,q֢Eؿ?j`ለDWEEE|'[f̘1,\.]x'ip y^SN=zX\\{=߼qjx[֭[7l{gªaSZZjOl-[ 8px\1irssݻ7Jv1a|||̜9sKݎGM6۷܇SZDDDDj 쉍m3{$? IDATln6> Pp5cyyyn!".ꫯkAXJJJ… ݮ%MԆ Gުj/LDDD$O-&&Q2ooeꩬXhР 9T Kxn$M˹ضm*"ݨDDDD./{].ʐHb?QQ曭$9rƍg͚5fsinDDDDqN'K-{d""(܆%cYYY6yd+))q; мyO&ʀ @37/~9Qy8eiQ}(Ec/n+))7xz.^"""" Q'qZOO8""y87XJJqh"+--u; W_}e>u?)=p7-$"""R.p]p9שAc\ ضm[j.".;8蓟ϢEXp!>k׮-w`+4 7SqD{q`+3Πstޝ222HOOu$%%ѢE W*..ٳ={{n6l5kشiVbӦMWۍ{4iiW2?#"%I8\ tr72{O`Pf@Q@  DDD"W8 s7Phi;h7$IE't8 ydlZtKɡA!ibqjq1ODDDq Gp~Jq7 n .AdeeyJr:+Rﻏ#"Rb@$}W`$%'""""qjz_LAJ"҄OO&s{aI]xy<P"T"""M.jnp74V`3Nી .%dNSEfr͏ !Fz8pDDꇒC8/+ JB+Lc=.ziZDQSrH`4p8x'qŸDDDD$:<ӓ٫9#"""@uNo{qGn%{+˼[?]z饖lvgop`׿e999ּysKlÆ .@9b=mmРAVPPPe֩S'KJJ!UӸB?&NhlIIILDDgp]EDDD"=N/ޛ\E%[}ہСCh"0`@(7tY:d&LK/F뇚[>}l˖-VXXh~5ʺ7ڞ={ w9 dڵ*x{NDDDjhOgɮF4E49ԱcG{m…m6+--Ybbb6?;;֭[{sNkӦMulV|5 5ڶm䐈4e'8߅MDDDD1K+0̀&+>|~閔dkҥK .-Z|8͏HѶkpȑ#YYYJHS>niNp@gW#j:"WRRbedd\;ڔ)S|W\\w;wq{e`qFkNMqt9R[/[]@?8 KjO>̙3S\\IJJ\۶m3gN>䨢"HHH`ƍ SO=ɓ'SZZZ#F`ȑ|wtR Pˣ<wfϞ=H4)~n8"""RZ2_>~jD[C`vEYͭe˖veYnnn2/k׮6[NNYnlڴik,Yĺu`KKK,;;ۚ5kfgq͘1#Z=8؄ uLDDA@)pr,"""R.©=d8)@5Nǔ 6DDDx("+ m!pN7_q{<ӱL pDDC"+it`.x8ŸDDDD=c7qz2dH)9$u 8=U\W,MT&J!{S8>n%""""|t%""|^m\a Ö t8`']EDDD\~)-_M u1Hr6p;]EDFےHt\_:UWB33OKZ+"IHSيS| 'aŸDDDD~>_ GD$_`6W#82^XCD=%DDӁq~NUDNk+NWTlN8rrrh۶-;vM6BJJ IHH8ư)((̩8TRRBAAݻ{}voΖ-[Xz5| BCPıK7 Cz|| \`HM 0gtIs9Ջ^zq)rQDqFV\ʕ+eɒ%Vhs'A208Fp*7_y}kU&<O7?ϥC""Rҁ%@4 "R'-zqS[nM~۷/_|1m۶0E^ii)+V`,[&p709'tx W0M"9T 'uE!iºKq"qE p9͛%%%СC߷inj'NN;ͼ?cf/ധy2W# ̀j'.WSO=SO=mEu_mN}we5N]y'Hc؏r˱H#z lhP.v7Z\\-No{ 8NSL7ĵPiiu՞y֭FtYvPrHDDp籲]EDxIر+vz(zD<[-&&{E!Héd8ʍ$:}q-94k,;3쬳βٳgWO>imڴ$~f@1cXFFل |ֲeKk޼]uUs /**#FXJJnEEE_j;wf͚駟n+W z*'ԺӚ5kf;w>dܡ5;r=i6x`+,,ĉcǎx[M:74 8.""M@k`1`qqq#RiL-[fz#\}L07=]P߾}^23_~[e\sܹvi}F?C֧Oۼyݻ.߼N:>C;x۷FmC @Ǝk};wڎ;+{²-[7uYAQcnFFv!۴ivm!ɱ?vW͛ІnwqG8WM:߷4~مPHh;>ӈ*q>~<F!758p)WCyyyUSTTd~ o}׮]k;v@;v5kք,333vMʲk^Y:tPaݻwW~\\\W>Pvɞ}YۼysX;wlWޱcm۶²[nv5Q~B""x|4T-"Qr8 ۱cGD u:Lڠ䐄aʔ)qmI rq q{<ؽ[aG.)) g~ؠ/Y?|kѢ/&G7PӪ;@Ӗ/_nt֭͜9359Vq>G*_X߾}m߾}4M "Þ4RO*B EB]tI'YYYYeeev'*A&M d|+X䐷І *L_~}DTVS@juMf2+((Q&++BLk֬5/ul֮]X;ud[l +H t͙3ǒ >}XIIC""Rҁ-ź4'G/xa:hɡ%w~73{뭷wJE-!|۵wi~9}Qɡ_~pW_m'Oo֯_*5hP֭߶CY^^ <ºiii1cTh骫;ಡUw 2ľk+..YfYFFFȸ;`oo߾n:+))/VkLFRrHDDCW`_]ED6bĈ#0oZZ/9KΫs9^P=Umذadm۶'|NΩonhz~GR7]grxݻ͜92grKh6zhkݺj&N[oYn,66ֲgqe˖A}A[-99ْ[o\6Դ!дSZ=,..zi^ȸ;`㥥O>N>d6mZXS[vWn 0ԥ~1.""-\0H!̛KN}TZZj999d33裏,''JKK+S8"TEխ?vXk}+_'m\o|Ѿ=9W{_>}I )9$""rZ)c{]0C %iҤI6`33+{c,йIFС^?>Ro::s\[qz94%$^B${FDDk$Np^'iMr!S$:tڷooo;Ru=)4%۷m,@n_!z̮PlSp5 8w6{LDD|z $gP"Ұ4ʼ7zI?~~w YsȍB#{_ pMm|!/n2hN2PW;o;K87# @;EDXwMυDh4 R7^r%)59Yﶁo}6y(QiS{p1nS!z>p;Jy"Nqj é1N )8>I*`J˷8I,Ti E8-p~H(ӮE'"Qוv; ~J/9nHmEm?ptMhmڴ֬Y3|7zFЕ}M6sgF-D=oڴix|/5ku$$$ozr44 8ɠmcb`:{ڮFqj H_5aɒ%dffx<8#V^M߾}Y~ۡDwF)@՛$>A?On zxzKV?~<=o~ZZ:W\qoz+U=NZ&W}L߉ӫԍSqj'&&k֭[s:|>x IO?YfѡC%ƌã>Jqq1v=z`ĉnu^|EFEii)pw#r)8xB_iV87JIT t~ t҅YfѳgOrD'%:PF+P-Lۉ#~"".x8>''9spqf^vee(9$"TU5NXƎ˯k㡈K/nTQ-NC7|9GA+N-#׀kէVT9A[R>gHCrcfYYYY,[;VXO?Ț$E Tpmȑ#>|=R233ٻw/q8]ދ gg?)))HXb&L`޶<>[0$+,SĀCݔj=*ԖϤ VK)TrigH$t~y\5 /Ǽ[/D 18pZ'))|\r%M$֭[yי=PR}HS{p% N:L.\0 >OD](UV\s5\tEӇ: S'0|Ν˲eowqXV 'YP!fJI5R 'Tk)UVD4=]qj ݊S3+D]3S:6N8=\zE^ٳ'ii}_i&VZʕ+eѢE߿}l ԍrLƆ` nE\DPNg 5y N 8wNVG&"&SSq~9k'`N"-+/ANNwdggӱcGRSSIII!%%TiѢ1#MYYYPPP@aa!{e|wl޼ C IDAT6n:֯_s=k(! oC(9$Q[K)GZkC(w.)zV/DH\Ӏ^=}aDb\|Sjjϛ22b8(9$Q*XܡLuR8 &hԥ8?HD.8]%v.SHR9THf8~)lO l6wlV|n~2PrH%iE s2)JB=,"i*H]RrH }5Q^4>|%PrHB-p}K徼Ij&yيH(*HуkׂCTppyp QizHSSH¤PrHV=*Ԗtk(X-P 6ISrDCTp?Yt9N!z?tE/K0i4W_;ΏKj/o(G[årDCTp 8Ǽ>8YO}ShB4JDʵK.y ZJ< T.SrH y{*:m8\Ts ah(9$(%٣omp~PsK0jud%qJISUɢ pz:kVclTFC!㭥o@|-uk'(3JT.SrH %rVTlrh٤&C"r5]]r̩\K)^f߀uy*H)9$NWh њEA>1pclTFC!qI+oSB=,h\Q*HPrH "Ue?ir *WK9Zh%zXUqM S]"k)[*>_ޤRn~N4{_JIPrH "k \N4`GE+(/THؔC!i=V]r-ke+P-K ^;xm@6$vCYJISU$.:W,chJUF! ^JT(hh]>߻LZJCk7$hȱ놓,: t4NA`ίRRCwk)[H<'*cD;\E"GU(xTE'%$)9$" t-pQM6 hNEslH!vyWDB[rd`Np~L64|8 FZG""""87KY+˄hN=oHKKn￯ͦFKTL.ĐJ^xyi,[eMep ,85F^6s4Y4 &H$xݸaf]͛3jԨn*,]+ &0vZo(++c۶mKٻ({IH! $ňWϱJ{ˢ~=TV-.]AhZ XplV=EKB! Y>? 3{efGfs]=3}vt|WmVݣFR]Ktlv&‰zF.M;Yc<3SXbff۷o#FXNC6tP+--=~M4ɺuf]tܱO>rrr׿uD;vnfرeee#233-99 ^jV^t̘1Ǝ}_k۷؇~h/ڵkgnS^^n~u:wl?ϬܯΧ~oڴ)h_quctF 8,ŭE[-I%9:a69Cy =N~w<3%5$=pLC|79tYgٚ5kرcڄ o/i?mvA8qbzWXa[oyׅwʔ)vW[YYو#|衇+ݻwÇ'?k뿬wV\\ϑW2_~#~E?Ǿ+;z=ÖjF[v%ígC SYXXh{f͚e_|q>"9hy.l=_P?Tdhh$zFpsO =櫑ɡ2[ꫯv,{Qիmٲ%h-lCXoNNm߾z۶m~q͛gYYY~mn[lY؜ǭ]vA W$qiζ[z_oٲrrr_N1v<=~_|Iֹsgl߾}ffqF8px˸\.ﶉVUU|ꭋj몪*~z}^ֵkW[nclNC/zq";}9o':C!9Xv䈤?xHRS}rrr[oUnt5W^ȑ#ÎCC iӦΓiƌڵk 3fw\j„ zwOGyDZ@ `Sꢋ.w}3RJJN;4 2D6m_ ;R?.̡QFiΜ97E":\ReihP\&]ʊċor9E$ZV7ydov%iΜ9P6I[HH'(R&NZ*Қ(U V$.%E$l޼YÇ׎;JTPP[JRQ@,,r$:9h]MfI.1ɡ{Lw͛WۯjMK'\.:,}gqo'a{IЖK͒Y)O?'|R5e%$4Z;jʕ1bwo(F}SL$1$yN[8kz1%~0KCO_$[F38C9rzhL<nWjyquvIʓ< ض\R[V+W /.bz<#ֽ{wر?wz~q4iuͺtb?wmĈ֩S'С :JKKv[Νs>Ӗgڵ?6mt$YQQ]ve~/[t_ۡbp;vnfرeee#<~uuM>233-99 ~?֫W/[6KYwO<>ɉǦq*O&%{Z|ǽ>\o1F'%:yk6qn:ZhJZ,PdQWI~' `ECÇ^z^~e>|xvJ+--R>|s= Z?ݻwmĉuguYƎ;f~M0nFzM2ņno>2dM:կlaaٳǾ;5k]|AHX~lƍffX~ƯHbvLbW_}YYY1¯zȮ ۽{>|~/~z헕o$(O| O8YIOLfLdN&N?qI;1@t_/hJ$U<߶/઒>| Q"--33;233mǎ~l۶z֭֫WwzޫW/۲eKDq=z233qZm[n޲e=p_n;huu?6rH332d=sA {C>''Ƕo}m6l,H.+,W(?SFpɓ< $IoY$$mE'y/όHۢ?EZ.S:1m4vwzhUUUqmܸh)))~IziL={kf={>mccS|wgOE]݋/vErlN]%I9t"Q*X*&{4%C"5p"-L,;w-߱cl" ڶm[Y8;=5s(''ǖ,Yb~ڡC,;;/-[XvvvۇZ7o\ɓk]sÇ7VXXq_"x֡CD{HhT?;y8&~O O(ONd&DI:DChr$mY{6N傹袋wq\|rE%r-nǏۄ k׮nO\;vhvk׮;ӯ Jʕuw{^:)LvI}3PEEFz(!@HGKHg|}QѴDŽMbjh)H,ObjC ~WoΏoҧ-$~N39XWb!M-5~WdC3ʛ8֎hN$8 hZM9"ig4C@幸sO$}9ı#2lK$􉤁 "9x$sq`lIڇj|簤m =iCHq@|h'B+Iv$~4Tى$8Er \'X'_%~B_`!TcvCrs$N]<wMJZ?>;D@"99 :\?NP($~v 󷯃<f(AzJdHjNJFCJ"9Z_$Zqr(URB_'=zHڭx&GgI]U67{DNY|pкBs:JJJ4i$-YD={+"9*K %44{噁ʗ@@r1/?/XvRvv.]K/%C%U?U 6ۇ Ѝoek%7/hj3Fv$}4h.\TM[>,S-+O@M/)!H狒"1#;_k۶mںu+͘1CɻZ K٣ۛXn*I1b&N2@'OOJJJT[[+I;wURRR%''{mY~>SܹSzf̘kΝ_oP}qHw$$ 'ruA>} 0,77&L`|Lvvmݺz˖-k`~m+,,43[ff=ff6zh[|clGLzW&//6o}o> PcNm۶z֭֫W/뜜[l YS_SKCӖży&⥗^)$Z˗׽OGX TrWmm}vn__9rrsssα+Wڥ^jffwߙƍm ZMP&PBB__TWW[BB_[4&5G_ZxhqRo8?Gp DZ9Ch 8 Bp\:3`i`;wz_رCݻwN:)??_EEEJNN֕W^j:Ӕ"I=z.ݻW:tiWNz={ꔫ޽{>rssy׮]ѣz-hm8 H@AHݻ5}t]r%2甕i„ 3fL:t-[-:t&OcJnFu] IRyy;wjܸqa?~ƍ۷Z~iƏnMUYYJ}Gtwl٢+iTB$ <%KС.R=zTEEE2?tOWvv̙ΩSꢋ.א!CTZZMv3FӐ!Ce^|EM}zȻnJOOW^^9 4op}q󕞞H%%i@OuB{@, LRSP+rGz|o9sf͚%I$͌n4h\ϛsBKih{+Vȑ#%iМ9>~I,vG[r4tPECNec%I 1aƍVvv>#2u&X*bv7@ArEsկ~ hUc D-Z͛7-c9RJJJҰaTVV&-p7|L}Ծ}{]p]_YYJIIQ=c#Z1DÆ СCU\\,{Qrrx>W_}UWW;');;[/$mڴI^xn?Sy7LAc={w򔸜}W]vW^u9mK`u)//O ;-[xtM7؝/oYiii!cZ.]gM7ݤ*2#F=TXef˿ [~ڴiv}9 tQ Yn_|aVUUeffUUU֧O/޼yw}YVVVȘm}uVիWı˶lEYvv}~)wѣGv{_Že˖˗׽7GU 94XvRSSȑ#vaoBx5\c}WAۘ3geddOmGuܗ%&&ZeeUVVZbbbИ/^l 4;c7o]uUvgUW]eo8#ضN ,v-!!$ ,!!*++! ]`9XZ;CqQɡJg~au7nZJJ]eÆ %K 7]v}}Ij몪*$LX*dn ErAr1iO*?KZQQ]~:={bjζÇl#))Ɋ?w9… үlmΝ}ڪU Vؒc[f\.{Wr|~=0`_ޛ4 O>zj{w1u`s#923ϭvau999do:}޳ffv%XIIw]޽mϞ= wζm,'''Xڽ{~裏 g19uVCD !ļQ|?Ū~zѣ6lO߱z}s+;Òmĉm?;PL4ɒ}#ۗe˖YFFeddزe˂\Mff͛71Ç[ffUUUYzz>|ر`8#r*aׯ\^{5KMMn)>`,cZΝ_KkGr(n5:9df`[uz-۷[aa.]rTl…6x`? >YUU11ʬ̮*6mZıWǶ{n;xM8^{;wnq:ﲩSz.--Ç JH!58)V5/T;x`Dɡ$ɡZ2dߺ7|-11rss[?gԩSD?o {-sZ^^k>l)hb~G{ֱcG[Jrm LR[&\99Dz%"zD{z;wnĂ3gj֬Y4K$ICXB#GFF9@cD;s=T[ͦ%h˚k|o8#9Z3g?ԍV}@2qo~8ٷo?hU.&V֚ @Kb .K7|TTT$IZn򔞞]VWvdq]ryTff|͐^|źuiwlwJKKM7.KZx$i޽_|ϩN| 66mڤ /Pn;dNlY`N}sZ֘ E=Z q+`¾%{gV|33߿]JJJ,77ׯemo߾zjd~gN˳իW;M6Yn̬cǎh";p@sGE7>v}s=.\h!cvgeɲo[ǭ?i HQr*++]vffv-!!$+[]]]o{_n[Ov***BeΜ9a}^x 4; ;9#Tqϩ`cvѣG94N˂#eoP܊cBkie f[N֭S߾}%IZvjjjT[[W6111d]SZ~֮]r9shժU㏽ƌ>@^|Őԏ`}k߾v 5ﯗ^zIǏsc9-pYc5usS(CcǎT{lÆ ֯_?s\f8mkٲeaN#sSM7/wq%''ĉ̴͒ypַI&YRRRsj7O 8[շeoCq+=!@,0[u.c}s) 3gj֬Y4K$ sZ+VhȑB(N+hHAri>v>B-;z@Ðq.^z)H5x`@il"%veR/޻`ݱ>%߼@K[7P_ǩHsJɡDJKLLx;39sXFF߾svzۦ?r{c/!!$ַcKɘDgX/^l 4;uMMߺHpP4նNPCKH5k?@448)VE4~۷;wz_VZ̡@IIIV\\lw9c .Jmt38~뽉XFe~a9Rؒn` ׆Әӊ \l[~t 5Zi\z^>~EzP0ߤI,))[vٲealٲ;d8qw'|bwwi\sMm,Ybv7ZBBmذg.^}]wu!Oy oD`HL7o^vym8ٳ>k)))!ַ`t 5p=$qaĴ Ԇ;N}.dX}?Q/ ژ3gj֬Y4K$MRJJ-ZP !OCҥK%IFr$35gFs9cn6@h7FѣGG; q%!5gYws%Ʀ7Y|ƍVvv>#%Khɒ%r.@k!qC*fz|O?fϞ#_WZ`$ך5k$Io&7TTT04Zx$i޽{Y999ꫯ$IvR^$I֭S^^ӛwǩm{Gz8c%X,G6|Tff|1S,NL>@RT%%%6lbZ߃i$CYjeeey5u+c$rQ{7ŮM[nffֱcG[h8p hkƊ_~xbk̬vZ+))\}"!V\iŖ`\Sn۷o_[zZ'K82dz&?y}\.KHHmرrN۶|ݙ-ZN&E]dW:X="=N%CA9sXFFX/^ diiivw:n7o<ꪫ3ϴϟoffnL\.}9!jjj/p[X"[cMLLJI$i,Nw5I6f+,,t755Վ9b&$ԩSmԩ~ɡh!9,lȐ!V[[븮)}6aӧnKOO?4d ISTQPcAi]輕bZKJJb-..$֬Yc.^}Us\ـlDC={ZqqqeM_m}sΰDҷ`W߾}mժUfE'K`|Nk>;:Ж.]jEEEv%qܜH5$m…Ґ!C;;vXuu믿n/Ҩ6[c㍥cWi]hb\;,99&NXL7ovLt;|mذg.˯g}RRR.k${--I&YRRS,-ضmyٲealٲTi bqҡCڵI={ڋ/G֣G۰aCؾErL75ChOwsd/꭫S]]mӧOLKNNB?v}g޲g}fvy ?rHXO8(?.}~]vvۦMy0`kmĈ֩S'С :JKK]'ו}'W^~ 5;1C?CA.]3覛nRUUcs窸X%%%*--Urr^IҐ!C~zIҞ={twȑ#znwӨNm:rs\.R33͵^_nv'e#HmĈadWm7nh^wBj#WSiqxɡ_TφH @۷~;7{ZX={jϞ=~o՝ԩS'竨Hɺ+U]]~[vRRRrtgjS҂q:v⋵|r߿_ IIDAT .;ѣu]wi޽աC":#/Ǔv0:,?^w}kܸqھ}駟j̘1Cɓ5vXIҍ7ި{!I4hTZZ޽[ӧO%\-ӥKmٲů;O?;{jzdfoyy;wM& 7@S! թ!Cszugے%K7mdn̬nYf]{n֫W/[m߾}2s̱N:]RRb\pn˳-zZŋn 0}ݐ曖okO=T2-q<48,LϞ=^[>j(k׮\ҥ!6m%%%ٌ3snݺYn7gaO )fruƎԷ`F_tL3,N+@kS!1Dr(߿6mnݺe˼ok׮ﵽ틕+WZqqY߾}mնj*+ɾ )fryyyzj{wB&lH 6VirrrqA!9֌Z  &wΜ9Q.ɪn%$$Ի@Ӿ>73KLLJDbv*`VQQ29Է`F_tL<̰ゖCr\+tWD;VmΜ9Zj>z vZԄ@yBG\[N֭S^^wyk׮1,fvׯ_k-ٳJJJlH 5V_|Mh BkqS ;~wq%''ĉCήٰa\.Wķv{l2Ȱ Ӫ&MdIII )frM7g26Ucne1s\5X`ֹnB$i!"zn̙5k$ "@rG;A@Fr #9І K.ҥK 5=z$և5jTChvU^^+$pqa\@,C@ځ̖gI|1B)BS  N}$r, 0Y@]}EJ$< F94v&X@ [Gzyq<H:yQQ%y(bhyXмɳHʊn( V?ywE;OE;}"O`Q-\I5K:=ʱ([!OrhKj%=ʱeT!$hyA#F;DQDAOyfH:#ʱ :%}#Ohhc-ayoE;D/9")!ʱI'g r,dI_s,X@ O2b$un(9J&J-O2h(3yiΑ4XRh/YlIGqDRFBCFFI%8iJT?)('GF-:`E ~cND(Td w NT?$)):a"FE+&(4h2Ivti3Ƃ[ KKsD!UA .\w !ծ?A .T7|YDTo_0%U)k NQdhX ZKID#hۺJBo%|,vhVHp"RIy3.H І̘b q"{N?9b30Cm!6@Fr #9ІhHa$0Cm!qr9>%9/C@C@+cvkL\.\.%$$(--M\pO74Pjf#8HHmm~i=zgT[[퐢T[[Z/uk׮] !t}лrGUVVRRRt뭷2u=3ӧڷo .@b9վ}{G/w3%vء#G*55UIII6l5))) `vm1cFD5&Pn`c&I555Խ{wuQcƌё#G5>w[ 7.KO>z29M$YC >^z%33{m~%ٕW^iVZZjÇ{A}ڞ={ᄈ{id8~ZUfAQll-(>*malw+ B5 *@PA#ns7H3s7sr9|ϟ?kss/--ՅX,i'AV///uttT{zzL6cbZ^^|ʟxAmkkC~1C:pXVoRcde|OԜLf52~W߯x\UU~F)HʌO/..z~UU~MV'vss~tn3f{jLXnUjjjtgg?99Ѳ2k|*C/U?vy=>>3GsCa)?爈& c!$n;ݱ mooגp8l9v}}][[[иvxnX,ӊdU[>D.5^~9s4 {=t'W F)? "cI<ݶձG]^^Ny&y@@C^^^^]]gاO72c?IrVUUGGGD.5~wQsh B!iiiڔuuu$Ʊ 9??s1vqd{{[DU%HbM9?'288ռO榌ܜAe{Voa}I$%+?+5x.hjjҕp8lQyF XU4n;ݱ߿۷ojcc/_hQQQZ__yyyZ]]_~z|H߿zzzr|^U[Ǐ:55555޽P(dtC>ɘ\4\p1C.Fsh!9b4\y_x<} -mp|IENDB`./Listaller-0.5.8/docs/sources/images/listaller-design.png0000664000175000017500000011465212107256364023673 0ustar matthiasmatthiasPNG  IHDRbJsRGBbKGD pHYs  tIME*u IDATxw|WweQ"Ȟlو,ق_AL폪"l2^i&ΥmJ}'νϹȲ,W61q$""""&DDDDđ8G""""bHDDDDđ8G""""bHDDDDL#1q$""""bHDDDDL#1q$""""&DDDDđ81q$""""&DDDDđ8G""""bHDDDDL8G""""Vl">'6 | Cl6,[Rx4^dk ;y%]_2FV1(s@ 0Bđ;n_Cj uuY7|%ìKtmd`=omֆY_e(vI?@k.z)]$mbmٻq.ݽ;zrl "&DiW>D@'IDeBǖa-Qd8'Ue ˰fw2l+Q-À!i)l"&D% D%0HFTIjD5;]yB$*MM&ّ K&1) H"bHV38zѬ$UU:%jVݱ~u4+ afN+MTm-Cz& ɚT$SҤT:8ZjQ%6T,%2 dXiS%YFAFJ4A4Q$8$)KT~҄2&WuN("UHCZԤ'hDDDL(qsV̜}w9[[/GO;;e jA'i6AH4!1q$*HԂ`1λ%&κ/ru_vϩ5O 5$@-j !"&D8stǓ}.g(@-i ߂$@#~0XPО׽nX]Χ~؅vBP eX:%駍5RFr("DItBTD5z]0;!SȢB劣dǺ(Ҡ.Zmu~ W4ۮ'l eA9:y yoVW*"-h?P81G}[I.níIU\Zh67ܽ?9 tO"%&]L''.l?èV_sǿA[ٝ'F#Yo_P%}P4II$KDWq]6G"2JUqMM+DDđM@dt3QAx#1q$""""&DDD/W!6G" >^lUj6DԾrT)R AdCDdh޼9F+VA HDN7}v؁ϳQ G"t֭7Ǝ ooo7Nbj""QQQU9:u7oÇcذal ""&DDZ#F/^ѣ_@6xƑ ӧOcݘ1cm۶8z(5j޽{#$$DDđ : 1 .XU;w.o!"bHDqC;cqx`` fϞqƱ# (L:nc֭[F#7QTb9<{ለ#QA Ah(/^ GDOUQm1iUmI#1q$""""bHDDDDL#1q$"""<"8G""[A@RRqcG"hڴi6mqϟ?ш#QA4aϸzqǍSш#QATxq̞=|֭[6l8TÆ Cjj*6l`qx\\Ne˖# 2www,[ 'NxKHHzFc?DDF???,^XѣG\~l$"bđBZpԩSмys >6j""(ḇHDN4oC ٳF""n_|/ܼ"E|q(U*Ǐ_{K^=w_}Uw ~?>>|9<[_-[6oD߾P~;,[OшyYsϣGѹ<<ܜ9X1+(rtg'DQQF}W;2<4 I/mzD7}Ӗc;%xhroI!:]XC[~1{|^w˹i*wA aW4,mrz/7 |DDDD$o-*yfT#"bbJnnֵ A☔ MJ~ēKBΝODDDDy$83#qy RcT144۷64Q^}vtÆf#GDD8qF0Q6K;c=Lkɩ$" 6Nwタ'.e($DD3n8Z8eUenQÊ#U'cG]1M6W|fF5rJy_-}0SIlz,ԩ*Ep.~>6qr:u<})>z9mpUF5i)+^4f+D)8 >Ӫ+K'❐8p ݪWRX|$Ss~b%0f.v燯b,>gLm_؏ 0l,=_?G+Z3)8b8jor#LqXL?DDopDŗ`mz#4<<X {\<ޝ۾wO/VfoӍzTn޾?_jwOToa?W%g:K-^:%n\ԏ#GDfXqtLj,FDD[k ڽJuf(Rccw!~$D=$i+u.v ~+?ck6U Zvt,M!8b 'ÿXpE^;eoe$w_X=]cmDD٤'д 8{WOEӻ!O9<eOVFR Q`L3O˔% K'xn9t,M[mv"#ÛQdȊ"e5+gQ0}Yb|Kb=ֿvQe˫7.z6N߶[@f2xT}...8hn]DhЮw4"Ê#&bG]p$#Mgxpӫ慣ecV}7 1Фf({LjQ3qSiHKIƍl|l߾_B4w ~z,:hwl4þк(sg#,ktumzgtgW{4=P77>F|dd9s6yc?t>d(U&(٤=~;$IT):)Hq6hr:|*{tY>pusG˞C囏1p2DeGYݻ/5'POO 440{'o!"ʊ>x?}DDy̝'qhecQ[q^:"KwQHDF5rA`P0O]:-A([V]+ϙ[6b!&""""{j""""RYk4@L(wJ"3 CDDDDƖވ9sLfőLHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDdxQ} RSS6v<v9ÇuCr*;{vnCVmPAL&_΋/k"=у0{᥺`KfpxPBEljr8PzMֱ3 fݻ7]q}C޽{ԩ|}}k<ॊ*p8{kyxZb- _[ƼyTAyD28M‘=;M6V~gjTQHKn{KD7cU$ԁGQ|n*^(ݻ;v;kD$''c̘1K(E8DQD:uTܺu ~Rኣk#=E4}G-p3E3_DܼJeKQ@Zt)ݼ%?lT45`ӺU@JBBB&LΝ;|( I"r^|Ҥx䉾أGX߷'LkMO:Cpp0Q{!́_D΋/J*p^hhMDDC+qFپAAAdɒڵ+Nھ};LH&\z՚yRe_1\Z/Mދ{ڧsS2Ê+8ο###Ǐc۶mx&NwA_|BCCir{e#dӗA 1ovcn憪Ubɒ%hؐOqԓ'OШQ#6ㆈ x{q]ђō۷m۶E2eРAlذ[նmбcG+W*T@߾}qu:t]vEQB 2FӇqFƍO?bccQF ƚ0{h͛71p@T\eʔAcEf,D s[e0x`iP^=$''޶m[\pAwdd$&MrʡVZϐb;wF PdIĶmЮ];)S+Wo+Wk}&M 885¦M۸q#5j`4iu1{1cVލo_x\Ê+8!(sƏm ;rƍ'޽{矱l2K,ٳqߨX"zYfa}6o/^t-[dXŋc۶m(RulCCCѭ[7)RD:2d:t˗/޽{X`vܩh D[c^zȑ#HJJOi&b=z(4h@ZѠAܾ}Fbb"KmYx1fϞ۷oٳgw;,]ý{p9O>QZهbP^waʕ>VZ ??h"^Z/]l>1[1cVގ-'GEϪREL< ˔)csa? 444Ce-[ɓ1o<k͛?NJJBfpUP~}2./ʂ ьKi ސrIT^(VիpE#[ڇøɛ/k\U1bϑce"Ç`}ҥKL4l\ʎ}{֏eE:ԏcV;|t;Jrr2??{A/_!Cxm@`yBe7ne˖Fl׮]ԪU UT]ov܉UVZڵC=РAnQ={Į]oѣ(UwuرchӦ ߏ1c觉¬Yp<(Zܶu-/S(r"e6]T*5J!7ySnyKn͛Kjɮ1ĞC8.3 ,Ke?9]te˰l2a$FeH}iY_uq8ok;bĈX*㚂UVaȑYfa(_<<^{ K,qZ;BJJ ֬YC k"11W^EV۷oGxx8"##If̶ˋҥKR^dvU)Ÿɛ/_P1Ŝ=___@LL }Y+ Ne]չѩS'̞=/_Fz˗ѢE ,f͚믿Ю];kj׮sΘ:u*Ξ= YN:ge֭j ǏWnYJ*J*Xf _ 1m4_mڴџ3g`ӦMҿvIE.ew?s-~}q8{ 4Cзo_a2;%z)ЧN2֩S8ƕ}Ǭ{}b >Ì3p9jT*?~oV,oȑ4i.\F .`ҤI5jTFcbXbV\Ç3 ѣGRcǎB %Kɓ'-~ٳ'ΝqcРA;wѵPvm|Ejj*ߏ?PQ:nY_wYه7?n_I0m4lڴ EشiOn> /^4?ǎ>fq>S1k4Y'm?0e@֭1sL̙3/^$IhذQeER0zhO>EٲeGdO󘕷c/8ڽzќpרRLݩ:㋘3bMWT qf/dD[~@>ìtcCɡq$)%a`?Ӊ 0_X#"r\QIa0ɡlJqq.A_DmEQYE,G82{XbM^X#&W㨻[q%tcca݋`ﱙNeYݺP,A!򠕯dGݗ&yĚsKckPԓ%Y7/j q.W'VodڪviS>m Xr Qxj qEXݜgN2L&}ǻ/ji!ct٪!O(z^ic3ֆv+Jb7?gPrhČj e,a?D9y8B{ZC_ƍ+gx~@3fKloJ_y|~s8-+C _'.n<2⢱aQ}_;ݭk1jTШrk_||poh ԈɡaL`8)cf8mH{7ri CF*ow  h|_[ШS$=Фu3kxxzA݋/r&}0o |zNWN@T }=D5v4gn( >V{0$A#xt26.vF .*LE'!T =,qAV}>ōM:Ƒf+d$خy|rԩɨV3ZOo?IC8 PQ/t0^[~_H{O;Wo3.JeOP;V{]mLÙ+IKFFnn';$8S̉wU;f^þQB~cؽuQ? 3{i JL> ߝNpu4"7 ;VB﹣Kuq {ˠ3'zkj}޼%Q#•3[!K"Ztvl9O\Ư߿>crq$zGW]ű^Y,5흆 Gj6}Uj*NۉU8}t'RR:݁Bd%]1to`X4lوz9/U</W]B|s^6&欻bS!ھvmѼxbDkK!I)_ DqqQ/JVmx|<$`W0|1<}ƨڻO/c_xx‘'wER3u<8k8.`YT:}hc&.Aw7oƈ0HN]_+!+9tuXXXT0xO֏#H0DZa Q8.6 7,@ي/{tߏt|o(Q~#{M` Dڭp`Z$$KMY86FLS4Fĸ߾rB?crZNWSnِٛ8'#Fbz(ZJB8$QwQh@(pý_q߰y8sW| q2_5ZA-zA#Uɸv0x+h+GaQ?TY'PF+{xëPa=6}n:>_ }iƗOn@ǁs_$~x퍩?'ݎgǿ8| 〯pvqtS<< (.Z]/vhѭqt? Ml_~!IPzrO#37@{-E0ih]ܽyJ? cR/o<ʡFT2U$D'd$M:O‰T̾ /i4Zv;-}޼ފNCDyS]<#ZvxKEp<o+A2e&E" b5d *H Z8˿,#:A$7Yx 4i*..뤒!0ն8{p%^n>+b;p|u#hYu,g4}bSZ,Mo*91Egg`P$'DPo{`Ϩ= U0:ju_X,S`Hxxf/$[ -/F.ºEm(\]#*N(~o kh,PW{ߒ$(׬v? g MGdN*>9\<°rȌR;b? nPT*YcGGp/U jp0*p-Yb; Ou}!>M%g{XZ(qvϲJW|}2{?TE>CNg!@Jr埊fTKoqt7֭FwRc^/(Uڤ( {j}wG>!)8ڽ3ixi0?'mE6jg V1X=^SG~FV}ۗAR!*2V| nIAF!D< #%MFRƦ!=xBPao$H]N*1h2 /5铑jRwoE?ޟ'm#ld$F U[ /AwԾ%[qouRbC&So={$cڌ[wӇ~~ziP%FA[v6G{`jQzr(?Y#bSK8s{h)H{}>5lOH|We&d\'hoSҒk#5k#-68U-@G* q"DD ("QFR66-GwYWmqFqlWY޿"l'^9?cq@!UQwՃU-oD2.q8ud#DQƀqL\tAZ%%hi ~ ,?` ,+5@)be6Ś/[) Qȯ(^~XXQElXVib4'xjX7-VLm~2;8"Emsxz⻐X=UWjW7每CMqX0"vt=AX1v0eoLU{ ~[>~TGBϡ7yi/}\? 5ZMo}7<3״ɡ9֏ɡPwsZ*!>IBL)c$dlڍzˠou ܿ~}q>՞؏#Q38Ȳ,Tj}._!OV\Yw!1"ǯBkěD@(?c^M.*e:l&.Ǒ *Q7qV2tT U~7tWTxqÔ4m8b6%ӐCrs Tץ@C^uڵYN]M-HQHRIO֞Nמ^I$"9UY㋈28jFFZ!?>OtUCV3 (V+7ICzj :UaaaxN_Nr oOY{ëAƙ fğx|9_DyO/MuCn>XSHۍwN($#2NKMIsC~"z2ۏc>9Fx\Fԯ,xyEs$k5ƚceKY_gjDWArEw+R?Xfuw42GcH()/k#53yQBdiI|eX\/>nea&1*[]y[uX.J2{1{O]rE1G+vqtDɢ(Vh= ,`ҹe#Xd+AlC 6="-bsxXX^nSׁX+D^ʰDm% i9*A#0pGTel^,m`o:_ did52R2//$5KE'T8Q ڽWA(٩۽\buұj:4ij7e qZ?ҽb{_K)1:XJOE}EKwhd0^XcQdGQmǟ7ɦX?֮59+(AqMM;*/i/]@ʪ㘽Gb}',}G.?`^odဥ L 2 C#jKér9c *l!2rBJI Ny[`m˟+R %jAOj8Tqt9IKҵFҵF,#I jO鯿թS'fGc53ݏ#ҿ l5ATrdI3sQvtgi<|5'm%&BνQt+Wl=<$iTM m,ȉ~k5Wn8>m%Jnij ʲvQELeуF|NyҵF6t;` %r ?ˉ~r k%Q.lFg1$  ӿxї/QZe~r Gs}Dn|1[U"DW}C GH:A^`a>FN`aB#Z:d_{1qXS Û90c^nMp1߭޼ɣAeYGE;(楖J,"&ABd1F $b i2w K{c'1rya/ܾr 9kmnj*?֩Qݽs#6ųGZV-Z63]XU2F^'u&ֽFbp[ZrPYW ǺR48. 84n-3]RmUqaqJ<} Z7BѠBiXAL:s!%)guafY^z[͆_95w_@bX_ {qe%YZԞ y1;T*z3-F~4ů7?߀Rjd|3sax}4'i#'J ޿/5 }KTnԯIC8 PQ/t0^fn{㚊wowo@-Pz tK]mLÙ+IKFFhmkK=qOo(bM@_}O¶ K뒿3'@ɘFPbfkB_D8Ȳ!]ݱňy2kQf_\AЮh\pB;(Z ]ND~!@ZZ*oRsGoǩ}K A5%(YNY["E *hCǿ~5W.aSc3oiMT횇'7@j:Ez$jpYrf+dID.Cӎ-дX4n7|M*m7.Oo?40G~o Ymn睫pyv%Ѳ'xw7pd@IÏ}snw!t=hȧudwDQ@:0x(}oլ\e©j]WhtwA9߰.NKl4)iaVםb} jhTUn_;cT?G:cmC5&#QMDDƉϟA2V8o?qFv|\$=Y1SHyYlcGو݃oƈ0HN]_+d}#]YH/[rczj*&& G/c ?wtZ.f龀ƚ .֮'>z?p4e}f?|/@뮣 2 ~ G_Ɲc->Id$M]c;y''n+]wC5H[B0~5_/[%e_O7N'%_{ie | B8}Vzk"aSa6W`y({=kRS0 >>c4O{Ѻ$L\r&{s,De-q49%r3tJw|OWe1I|2bcۏsl+$GaK]>X B1gM^{A"%Mܟ"3>ǔU_U8zspNƾȾM;G*eѐ@4 ;(S ε`[Kw@_yzYe:Jhesũɏo u)Usnq|bAy`x)zVtiIz"9][Wc1q;C {go7/:w0hH$t8Hzvf"k͠H4x sjO6.^U5ܬ>vo|`U#,Nn^U˕q ٚz~"(EPVC=lޗ3WR֌Q0C%w?M"B.@kɡ=kѬ0x6G|ޠ1_o+pd2TrAРi-iд:#W7w(ss8k!DCܩz6C/%J({z;jYf5egʙFߡuhnBB[7oF|jh>Vsz8 wXd!n[ 2Aĩ=rjMVyW246߀Z|@%/.\!-ܫژ9r4d RO_fb-nS=DsIyz~nsdoqhSX:zz.5q GS\ D߀`o oܺ}$%!FYQ85[T4:;=AIq̿,Gs;|fmh "hP>ʭ*|yViY d*C%*!gɑ@^F"ж{kܻqrA{7Nh"kn ]?tFNfr2Yx@4V (`Y>rRpjjlRh5_BV̴=jZ<dd&hz֖W&*v;akcNoB+ ƍg!c5@-jkjahSw㟓ii,\PE>)fRrZ .R%SWÞOlQhpg:["51 ćb1&b̕Yۡ8m&2S!/'v̶0ӭιJAnV 2WOkoGڗEQaYXB܄???lDZwPP C;ض??\9 ;6G x06@V 7_$ .\{ZLj5Z>~qoh=ѦGh|ٿwZϡF  3jƺxԨ G,g %.A+Pnq ]c z{f胨ߴx7D3qjvʕW(Jc{>pq b[5}^[__U^Q 6.Y~6=nq6c˒(j mMe cEA8Ex3Bo[I*[˷*^ Q+C!hТ7~^&RcPҪ8)vAQ6X|6zr@wz3^Bfz<*C>&b̕SOyQg"Hsv!~53 G,5wiCA=d~ݶ̴xVAX!h{q!u[c c̖pzM}PܫAoU\.3 =Nxz>J΃f{q%(99x H݊l-Q7K QU(ʴ'E7 f3{d|u|'R/so(kozM[z5,ZiQ>ŝXm"RV,9&wYc_&srAl\%:gpW.TڟaN[7h{Vkh7DŽ7^_(ֹ΁OX;qDu'nVm cKS='Rɡ) 8s ]!-E8;*~ hzѡ2[(vșs!OoQ2 8K4F#W(EaY3LoEAk싶FJ#kaݜv '?L~bFQYcML L@$cްX81RpvV劢""OE8(H[Pf;k"/5(e yʷ89I<)ZUr|^ڪ+ Xڗ8"5zIyg˖Vo!(Bh_k+mǑRzB"؂{/ Gz !B*qǑ MyT*\k7cEL=/m֞uv%Oou*}o,>Vh1go}b?2"'Dq )Ԯ]ٖ}HHE #3G틐WUbGg! z !B*0H!B,Tq$B!qtǹ9q/B ǑTh&yC^iѱ{^Ĕ)Ha9Bh_'Ǒ;828b9Ha9Bh_';8sо)OH!R)nG5\uA \% q4I&ӊ\F,fZk6LE%ɤOE @\!VxCsvxD$mM486"wEk\2mXv-Oxl B셵qի]1hөi q vAC"T E T1z6~M}cDU&2>z*Lh\z[M*V;+WWxC+KpLۑh2lkb 9uu%S6^ڙIɔnٻb'vD}cq8q pAerH'Q뉉C^4 h m:m1)@,qm'8ˏ0YɷqIEqmqH\8,7OHGƼ8y Z8"\ql͐7$tbq}ILCvVR%!cҤIf3E(رò844ec) Pg1 ƿr@^jCgnLA>r90 EmMg 7_R3HJ#>Edirfʑм~?cϡBv^Z#H_G(_fbÏ+Wahٶmڀ‴ǨU?\77C{Cj8b^ 8Fl͔O}xDHOƞk|(|=+}k?y܄ w,-SD瑜{~bR]^3#)qL{uzKsq q~ݹyYhi0|o%\* c?k%Fз_"-Cծ"ݻ/ |G2 ct\>"ǰ%8AػYZ̴ǘU_/?Gfz<5ċ&-m{7NB.vx[~`5OM#/m;[G|'Pa=gJIz:|Y~6Dfp煈>BzOFNH.Zuyl,GM{&Bnp煚r}0y>R7D"ëVف8E rmLp WaSu31eQW =?Ɛ7Q.T \ ??lN(UA: @8j!V# ャw+oɷ+1Gw}=k#XcTء m3p@>l \\+Y39khΎ G;Gѓ/Bq)tfEeru.wO{Kq=$.'Naշ -%of sDE>Exxg9d=*?WѪ{l0zQ:z2}{yv7bc?T=d"šzFjJ2v|)jis} jL_Uk6 +gpzX浳x?ɏ1oy[sI X3 EhܲL9lJй3sS_E. kl[0edž؞JǸg0vid<ı=[%6g%q=I"8Gq,aMrr1sBOS D|Cͱ@ᐒ\U鯌Y w@{"%8uda;ARkgˣ(>8|}u:μٹ"2UHH* %CY< dso ]@xŸvnNuޕMcW/<Цx߿I{{qn.RTrAY4};K'CXWOF{xW / ~5ށ6t!rFفÔדzݎ__c֩h|ۭic:dN*EVzؠs&?_P-| +7? 9ZA#Ceσ\ҳy yBFn%uzboFڅ),cmll0es~*Oy#B*2"~!=s"Vc70gU/GГy p?CZ~4 e"ښa6ZHOUpvlNhd+Deg&?vaj#;#Q/ߪfq+|C4coÑ]  Nг~ Gw/AnV DQݫG̴8lQEl~kvzJ_Pmy:4k7 !-t7#54}+9\=?m}m"4hޣ1[32JZ\Ư—?#fC1v, џ鋌x U̴D8{@Rr[ud%"=pO Z0ec؂%vlg)sTyʋR)q CzWe xuR[89 ''nndeQܣԅ( /H#6 =$<o 0oރ_P"ށw R┌ǹBZ})ˑxO3gV6<utF%7rR}Εz^nEwWIT_eѮkzxY\N/`%C@p=yQ+Cዶ=޵8_O OI'? M3$^ }0~v2,.Fo -"CF@nήX1?ڎutSZA+} !%W;qNJbl0esldGTTșs-^=|=\졸 !5% 54 u m~999HJxoLxpYHKMDZj"vl϶Y3v~= )IHJLŽ3ѬKHɔ#1M-`3q</#4hrECg#'3 9Ic,@L4p&0_nhܲ?: a.mǖ%=Pmq\ZvAQ6X\FC.ڴf^́/êоOɲԨtԴ[\Nş?E!@# x5)r0r9ڿi6ߎ?QSf3pzU1}lТ7~^&RcPz8sl\y 049T{$ /}/&CԨ }^[?_LP[pԳ9R6=I"8JDQsr 89ؚ8s[je3oq1=ԥ*@raBQ6OkEly&ӝ- R85AP˕Crƒު9^&a-\uM)1u44sh_ϾL1{ <} K*'OĬ:G(EQ)\@f$Q.c׎mI{ѣG\v ,r.ә^{š/½؇Xb <2Jәn?2"7/[ HڨQワLgzO' ]_mFn=-ڇ)S]gxWuZpK÷ȹLgzO\g/.vEb:g_prFFp"iΕkN3̧[{OZQ&xӇK!Bٙ984Fo+lB!!^mUGq(#!Br ͛rlddQl2rsi!xx?!7b!uwÍ+캽 ÅS:l[# Z=С^Cn~mrb]Qr JmZuqq.-~OYQO-?F*>W4E?=JA^`r @ Tr̶ dy1V|\ut= >*9v+_j+yfOim}ϊ}RvnUo!G LDEXB)d8t9  GB1 SbccMQ!DB 9pbcck׮eB8B{Jx10z !DCLLF4@^^6 !P8B.ׯ/o͚5lBQjBһXfM$%%I۷o^|E6!C#!_ F^GBQC#!h׮Μ9c4͛_>RǑRrI04!P8B /WWW[lAVVBH!,lٲP~},[L֪U+1(6!‘B**QQQfBtt4ZjIsssw}Ǐ#<h GBTZ7ŋgÇYfغu+h GB9RfBfpIMZAA^{5t ׯ_Ǹq` _9HL6 ˗// !z !w}~h#FP4B(Nhh(kz EpdB0aim۶Bp$%={DF qQ !P8BYaÆq!‘B 9r$t=RC!Rx }\C!b$e޶E>)\屯 jՀFpae`2H?\LXϦo2;:>:ڪM*z&S:ff*dRyxڕmAXZ?˺e9Y]G{ $kZYcyc|6p,!j^˜u,[¸"ױ$K@ǰ#:K ^Ǟu@&+eQB#C.WeZNVGyXVXD`Ycy:kj1(+,Bhp ܱh._8GܓڢPCBP#!֟k//ϓ\R~~i3ڂPBp|{qpqHHcHğBQt? !eD8[coD:K.)u,/?pJk BCA~Bp,Gh?ܹ8t c.GQ_"AB#1;T!mTG{.)]u6&՟ !‘Ě8%Xj\hɵ8ıuԞ7hKG1H!6PGk:V.)u,M"Q_BDQwP\RXqy1! BcA{U5:Z#rK7@D+?#BX՚CJ@*ouh~P;Mw@a1c\# G;ahC,/GYH ?Ad^h۷SeQ/Z?ۣۯj(n !eccJ,␲UGC?m=G T <Çq~rX97 Q]u* r&8|Qua}QX Jݲ%>|YNF&>#APsjP S(0Y|w&ZĔ͋}!) 0Lllq'N`;vuEd~FEΝב%_66voWWwO㗞=@QmUo)( !eQ8!5Ǘ:^(D7ѐh|Ѿ=usϟGڥ `ޅ K//WW̿pHǨƎ1 4Ԣ|g? xQ<\ IIKus'ObٳC1_/:Eo#x`$P8U\:C4S_jk{Sب=n..xjUxChvuk~f߷}'`Uv:yzK.]¯{UPx6 ];wOuGsݏ۴AΝ:q̱c8ֿAH!I8rqH1o!H!LyNcٳlhD+qNf+1tD%䠶V^^:?A;E`}ǎ8|ӪajBp,O\h(f `aCXѶ-zլ 77dwMzdf]}_?t޻*aZX^f&bt P]q4ۍ ]o{e` PBcš8\b:i[F=3θ餏|)w$6wꤙ=\]GG} "fhaQcʙ3ر# iqcP aKk"=={`t?77HKCC??~ل 2)qtҺFY{~1O`Y9LcsNX0i ARN>+1)/v0=`.cyagLR ӧ1eKr BB#)Phx8M Am!c bPooI={65k/2h B*<۶mCDDN>m۲!RQ5k4:T 8wRP5!ѣGSi Ӭ_4r㍕X^_ I3o_PMA#!>D}H qD8K3_??3QbBܚ/j >u$īĄοO$JP8BHz!,-bHXƶk$FDĈHٜL~X(8aZĂ2JOp$3!‘bGRS#SBɐ+iΛ'1"LmNjdZ愩P.F& GB^ zM0u*0Raj&mN< !G%LP77w80Q&Sй)1!L m\@Hp$8 U\ѤO(P4Y3ј&3՚9 l:ڞ!-L&c n"P2Vg-olE7!P8Bđ#X20>OИЕa@*~k򍯄 GBCE)qdd>M 9\ Cꖴ]q2! 6gQd@PJ_!5u|LdA9M HJ |VX+z@B( !OL@J )d ڴ"I"Yl@SHD2߈82% AX(M]˘ d-+L\I%= GB<N:۶k3F(΃^NsOX!@ueJ'׀"Okc%FB#!IG}o^Qo0{( ;wп^ t1z TEQD._GzA Ŝ(Wo'r3@*c""#3ؔHfaٲ^ O5g5߹{9{  _()>V8C F%쳓ZnlH3ѻHH+`mU.eA"Iˁ3~C*!""eFwGD2 ={.c\9!!pпZM_ o!޽?GBBN^ChL3,?\F?xzUaٲHjrf؅*Uc""6"33OVB͚i͒ GBH!6mΝ`sT~cҤvHHаa "#@YT GQ\Q\oXXw5y>|h޼*,9 w!]1}AǐnُI{w0gaMZ~bҤHHаa"#<;WqDܽ!bc3ww{oڵ1qbGU&uDBO?uN=qcdg% WW_}3g\"pMl0>@&)(BUBթ\Ne:uӧK('qJ9+WȑhժN:ҥڵ+>LG&aBR%"AUۘ>g\Ze+xxYu~\\nP @>LE&L֭BHqx4PMaak1aBsCaŊի>||̇"{ ??wbClr~~o>=ի Pw囹<$!8[sС[bE_P5yxΝT-n=:;OLC~+WqCff|}gh{T^9'ĤRUzu C7`Ŋ!իV'`ܻ8$oϺBHH7aKV+킙3䔛+T wa̘_t'ō0zԨplx6èQ4iƵ1?T8DDS##!11٘G ޮҡC4mKP',UΡ Oϙyڷ#ƍu.FZjV5}w ͛#sh߾x7R,\8^^Uk&4mյpˇBѵ*xxL0h367o~:w^ ˫ju#c)kdȆ{ ~,<04$mhD2@ѿ^1hH;hh#\>};qq !ez )P X3VM$wң*PN6hN!VJH6_K _7 2[hzerVE7P87љ52t,X A#!#dɹSX qg2ƮU%XtW-۹MV/866!o֯* x 5!,ZmC #UITDHJիaغ, GBHF;~ q_c&HJш:L*U !!I$%ShADH\sKF32݄08jns'o$HwϑPjd,-;|F}|AZeS?(h 4(b*2M^\@.W`ƌ]Re*<<& "b#23t_jNN,DseΒ1}ӧ?й ܺx(t""ZYt}S顡3qD4l @XB}9OPe$O6YC><O=lQ.W} ,A. CHYx){pCre/@ݺhݺvgpM\9/; *j}*Ur (,ͩS1}ϸtUGwO::ť=Jû~{'R%U[b΋Ǒ#7rPo*T4i2O)E X~ֈFKtԭd0--4GB( ! C2 mq7{FSbğPvڵwJrrxxpBrr7=[r݀+W&"33u{7IыIBpO/ "bT^(ئN큉ڢ]-_>εJJq ŝ;68^x-ZԤ9RAGBo?gXV`:mڄ3g^k•XrrD<|q㢊/s,Z͕A*uTꊻw1fwE܁L$&fb>&7n[|qꫭѾ}=mԁ3fܭj ˮo.}ܸN3;ܾAP :!""6iMFlHKۍ^gعmNS$‘R@s9}#GŮ]ѣTG:'nN /<7ݻDo ]4[M6o~:w^9Cht>BCgreO)O-^Ue)0};/K^С>v] >| zDmf.OCm2wn_4n[#ԪP?z]ƈmhT^c)kl0_W*pclΝ$|`<,Z޵އA({{Qq"Q%*Qaץ(WV><,,{Dⅇ;Ć{tD6ZH{Үx7!:YT7){q)KzSˆij$07RUmGeV,r[(>a) z •Jc8j->Z5 _j#@;iϫְ[;(ពM~JB΅{$R31c8?̋"sԲ!,_S+tyvXV.rB7M/r0p(ob Vܞe򯖎Z9 j%wj{x(Q^Zx>Nr5q5 ~tG2w,H3V4rBty c~[,VdzO[O/'*>gIUnP2bbOz.xȿZ:j.]Y8 _jQptGjQ\$*,vY垝;l8_<{_{gCY^?.co|$6^NEcԜ m"y%/ISj'ORjWKGBkcƜbT~GQ hK<2 񅇔Q(?|ώ*=8xrn?QVo; Q*~)V#^ާnlH<ˉ7_o~خt;eVۦGmU)E>ΜQ򯖎Z9 j%wז./ g+@CQp6Gq?ebtq"-GZ"@OyhPOWAk+ҳgZGQQN43Rq< l3C +Ճ.7?alo:~ER:<ˁf{DEo7G6W)ߝ>t!]P+dzL{_(2_ \#=z}=8 (8)#0/呾A.(8 (8ʐpQGw!G.(8 (8 A(8 (A(8 (((BB8 (BB8 8 A8 (0P(#b8 8 ((8 8 8 (((8 8 ((8 8 ((8 8 8 (((8 8 (0vbpVk\\ԑ.8򄄄phZ&VNL&WKgg'8 EEE (0ttt8JSS%8 3ނb2(Q`vJp܂h(0"/n8 ?(fE Vmoo`V+d21pt;w")'0Ȉw:1#ᘗ\VV8 `X ghG_cb[F(`innj+[ZbV]L񳀣 $q'ۿ0`,({';񳀣 )p8f3~pcXf ֖YQCssZaďLu>Ɣ錟 p@^P ߳JZ% (։GŇkW_=_p Ml?3kֈÇܯS(jYݻ'))b|QUէ6񳀣n0n`WOel{ZjA}}o{VyiSGy1ujs|A}=mm9ZV7nlҽm>g Ncp ()k2plϟ==m;V1cƍYODbbx>2Dwd:ѣDnSkxղ*L3Z9G sNٜQnyٲE44_gyFVxƋX,"94/%;+>\4=jYݰ'}qOn;wr*clt_amĔ)=*9}&S{*W_VBNl$xCIRي{ҥ⥗z^BInẂE-=Y xg& _),gd8 @hkk;Mѧ)]*W\ 뫯!R\&O&>從9sU88T")+MM3xj~88ZVed.T 򹯧bn0ti#uuD{{DnJjQbpܗpxaTPZϹpƧ ׭3Q\'ǧ/0())?߯\|񒪪pVwBs"oחӯzcR22Xe/0H)(--7ϟ?/v8ʉ{yJYʐcʶwBeq#G?޴i{_:t4Q{ǻ& &++91q¢E}SOK)^`ta0k>os_|g2<WٜN; >'tkȉϟ/3ȗ' /έ6#5=_μm~zv֭+O=VP8 ">4>5G裻fNvg~>xZOCz9)H;&>m[u͙99=5uѣP/0߷yϟ&:v8wB>ܱeOu:XLNu 5QFz;WϜ{/?^z{<ʾ}W^)^}'R[cy9rgر7l8=_o3++sP)^`ta6e*ʥx|nY\!'<7xGyUyyy/\[{KPG?޶mɧL=Q

j5mmm)04;D=pP:;+qBݦ&rB(PTTd0̶n>mh]YQQA1xPl:nQMZzet>P^^hjkk)@^'j_W|B_^LQ_O6P?R zOuO9k9pPbFaNaaNm-mm#P55ofL&~|B+,ֶ̫uBzoMKuP8 JsssqqlqqqBxQRR;P8 DF 8pJR8pJN(R8pJN(R8pTN(R8GTN(R GTN(R GTN(* GTN(Q* GTQ* GTQ* (>JQ* pJQ*8pJQ*8pRVkCCC*tڵ"bQZZZ***("B#666''GNxԺ:јINWUU9vD(eMPZZ*'l"\P8}}fbhZ9a2(F}}^d#==9UYYI(g|Ӓ FD!&%%RR\/N7`m6?p:pQQ"w;߽VNc5' .V{TIIp4u(IQۗYhy"ʂB8o֕^R|ɬYtDɻwN)KP3)}ҊY{p pPC٥o/H?yWp먑aw=MnN$L1OYc 747( 5DLniأH|J~ur<趲mtrW5tP IyʣohƜyfδosq ⦫E1)^KXnU4br"k(COU--XoW$5V| IqoNϚn.6\s;(rKğnqaC|ylT Qp(uuY[}EBZrR!#>va.[d]uw}`GpSR+2V ^A{~ld;Sb6bl1vDŽN~QV,VxH$$ZS5qȭ5rB~-no}6ǔe<r(N@|.%_4GT A M="fNJAɾ,2ϺɭOԊȳuLPnzN:פ;jGHB)|Vb07Gh:;;ݧ'Nccn10Uc(Oן+. #Bb1Dlr;bQYݓUIJo]_VMt{N_󖊗)q9=ӟooyU:߯Imw_GT(%OuJ,~vsH nv)ȑK.dw:߹fsY}Wp9MEB\.8J:WWa8ѷqIqۻ8 D|?kYZ'ϯ|{l~J{ݶJFew.Ouy=qDi@{=bZ&|{e?w@$ הdXmj$30c8>zF{Znڳ;ɭOg>u_vIRjT[W,7oalo:>Ǐ;묳N8!O|0*Uw׆ l].V+]Oq1l7DB|9ӓO_x[ٶ.g(-6*TMQ.3F9vϷYEZtL27zGq$e4n# gJm +?V( N169!?(= m]7j)L(>ڢgw[--"}V(~& (S Sm] ߼]?(ُ=W_}pǏHչaə3+Z>JO,5ei"C88uk\m XD!ʞӵ\x{rt^?UF\.:!T!qn꺰څGOl!vm$'Y8@Gě,ͫ{ Ӊ08[|wOoH4TY4qŻO:jW(u@Zec{:e2枽2୫R0KY%h]xOn}P[]D7ߓ{(\GQ|>RjT[W,cuy+Vz饗rssî.Nǣ͏n.ۼ0oiɧ)Rb:ZH\B ոzV_t*!:!  q{II_yUGK2v'+_kel&֓3q\3w@}+%!-aY{Q.\#rmeSzQax"7].Cœ<~XXIHmҾn{}ul/]{g)uV >[}Np 9 [PJVFqmHKVƎߟڷл<+V'en莢;ޡ| 򩶮ZXoخt|}=iiik׮}C_;hy+)8giB]9#㟮)魮t]!6';\W59蕓!>u/d庂"]] z|(MįZ ѷ鉩7XohhmQ`E4R,7s'*<7e~8[Zw-.W8س#LGQلe 1lGQ˶{!w_?C WH;ePҔF$.#JAɃPDAnNڷл<+ʤdұTפ;ޡZ>U+[qjN_^?|/{r1cd{sFuOONOb+\\b*ty[LJc}MGZgdkkBO d…}ԯ'^WWW愄))kJ$%MpL诣k6!x~\BpDτ8jP=eWv _J'k~_y\Bk<;҄Xz`I$+]r\k+.]u=R+bzUիwdLLRU\\,<ƣ~.tӔ"eDma&66v޽[{Z,۷ 9kJ,j\7GʭJq}C՝ar}_*'}^ޯ[pu]-}M)\:2ݕgj%>2).h:9H3NޯI}7w"~EmJ_L霒R^*kTTFsNi_p "YNd2-H^:ouZy慱Q@XŏdnyzIzJVVMHH0ͅV5l)QGT L_Ajjj*++KJJb4n_{lfl>Gوs{v=74?(zvp0p8 aBK ϵ;utkLF\WܢEkJפ &SSSX,hhGسCyYt$\q?Gߋ\Gyq[l;\,xվb(n|RRRNNNiiiccK 8i6wFݿnd~V>eILg8qzrZZZw8 AM];k-?`0dggK)ihhp8 2dQ̪9[O(V&OT4}pCeɃPP,:vo9s"PJ/[p^y+)(Ր>~i+/oYu||沊eM#8 (A(#)"F,Җ߾⪋n=;-YlOY0ꊣB2bq}NEuQG!GEC8 A8 ((B@؎#*:Q J((8 8 ((8 8 ((8 8 (8 ((8 8 ((8 8 ((8 Cjmhh(Ns׮](0 ttt Lp6$$$ʉ-[555(0l׋^zJpf|b2oAc,(08xR&@DPPPq& pZZZ܂b2( Q HOORYYIQjh4]]](A8Nn9`Fu+ վPǶ1:%% &=P8 :ۿa42#Y#[pTtQXy!|eY99";[8Gߢ-F}CGEE"5U*suucu7? rseAtt`?o29? @d}FlxF.`,Ÿl؄Ѐa l(O:::za z-Kxyf}ikZ݌Q l,Ioݜ}zE['W_ gt Q Nꬬ1}ЋW^)~vŗ_5o}K46O?w-֮=~6dd,}e[AAңPM̜=-[kKsŮ]_ U_/Ow&kJ R8qB'FeLCDF/9qK>Ud:<"RR_a|//⪫Dkk|YJF{;b,gg:9p_*Q(&f;:ʚ5aa[*dG]QDaLNy牗_Vs{2p^P`ÆR3*):r_TBjwuѣŵ׊w)xb|QU6~68 ȓq:hoC׆%Ku_Mixi?3ıcCM=)dfgq1o\ (7*6w_Pto:ޫ/[&x"_0~GI Jb\$&FYfc?̝+n1LQy?'Ӧc3F9n\&&*eǠwO:ދ"`p:Q q_Gqw矋YL:J{0Uve˖q :(u;ʆ gxjr(KB|wZb2PC /g+W?x? ;4eD/ի{KqIMUF|g$!pnH^z{ɾ}J(;zT\pApGP#^,8;wr(WQX_/8C,ZYL~܎;}rO"(/P.X .&LWmʰ\[tdRd =U4%1Q ES]͝{_L(, #^HKKKݹ3ҟ.SDCY, Α@g0]Y|~SWQ(͓ږ1fΒ*iNБ $( Q444p[ Ns(0 TUUitXD1p=dp@w t|_nf,N^^ެLCSScls(08 fmA8)Q`p8ƤI%%hG4w2NGA}NקYXx1dp] S^ӿ b.aD[(<(0d F|| 8 0`0U{H~5]GٷԹ/3RS~ u~b6P0G>G4kȉϟ/3ȗ /έ6#5=_μm~zv֭+[f3 8 0?/|]g'z;3?rOm[u͙99NG0 ōW{隧?~li'fQl[F= Cx${$˖-+_!<=}=r>c7np{7)gVVy(ÁlQ\g_Uʕzrs'˷]F+uy$>mVM|4̷.M2AJSϽQ Ņ 9ݑby!$$$[]]]R\Pmb˖-)z9M@)uD&QN Wz.ч^d }Q28 D1%%%>5{RRESSaL%Q:2}_ H:y||L ꨬGu .FC%# uJB+piS_ H}^AI%#xNMM 8ʨul|Vr#T連N±zhn/9Q_/thn49D2Bk6dd}dFG0'G(8ʨ㹦8N)N-*>8 2rF#jjhGK \TuqGe $ar~f;Q8 (5";[8٣'V{ z}pGeq:ص~nc x20x9pQF5WhʠZhd ݈ q( "}{v RpQ a&hkmB:e;^Y#bbrC#}] 쌹}t~e`sD/EKS8J:!9Y抮M5[Ze:Q]-*r%p(O=%/ K?%}(sE$q&TW+ҕG9]4>,K抹3Ů1$GAYE\Y$IDŽN~r%CkDR8w02Ϻ___V H)cJ\-3PJ^-q<{'5쪭шp[nE;/s/:ʷ%ŧkm6GdO_e]8vgoY֋;ǚe}^/{ZYFjA"q;pj!Lő2ZEASɢ )< qR>%='WRrCb=|+O Zf<Z>ypCzQ)GsA6 a4ݻ=C ر'#%[#DqU{,eEʦ}.긗;r5b1w2_ (>|STV*3{W޹ӟiO C,)'gR~O"sgR~L =6E1f2s\.H[V.(.~~}yZjSɫ%pe |+?qLRwOXu-g3tO<(6m zOԩӲQ-څ֦N_Em/NоO3S\Yғ?ū#2-O<>1fl~qw8_DEn/IwX[->Y4z.$l8sdȉ7I; g<ʇw\$~.ҒQ-zKWvLcs{Oa.rAIgTC_F-qQ|QGhj3JJ,('N({Ͽl Gkr%NXDrrG]rN2矋fPGQ 6g>tjںUu.s,ɏ,gY>+H_"k]~`hnnIr.12Qi2NQ߳TwߡA̙$UK>9_oe8J<8,k~hTF.8K)&=&eo*+=coK7?SFʢؼ^"Lɶ%>Z8OR8 (N{{rɐӷ>_#GgcǔۯpR&Eo(WV*)g.]$Yx %}]]2qP_Q!V/\oj`)? ϊj;MIs[[[lq8TD3X7{O(^"("$38 (NWWWnn.)tϽ3|RFqnۦtǘLG|_|HʕJ 1DG9p@1)SYij龧Ƴlׯg}WKjOP4eBVzr%z,{3G)޷MHh*Q)//GQ%y\p"A!^wB=b΋%p33c78jJDDcqQj֑](?NuP˔?/RwQ^Vf6sߞ8GN/Wn>ۣzTc{'G%*X,Ӵڳ>l1u^d ١<5.r"Q^ܫ<֋+8 (,:*, )Dܪ߿3 c^KƷT.BD <}_G,bzpnH6'6"wGIΰ;l[~QW%j uyFѝQ?kt"F8 (YTTxFB8uv 6^oCpG R_0xٮ_UyONYxAQSSѬ1#w":^ڻCJ9S< /:bښ6//)#ǐ?7wQ.@ٱc-S%ɹQGHZڵ+۷xEF)**m30 QGhE6ojj J SnG1 r14|8 QFsssRRRNNNt1+####--3S*Kvv4DM Zp(pM))TMZ[[F 8 (8 avLyw:3?ZT83 3GG)h .Q&(LSsO(bLEzQ|s2f$~FRMMTt:˅GbH$EYiT0l6Ga42Q(uuu)l\.WՅ<58 z{{9kiiA RijE)SG9YA655<g-ȎR fQsdCCCF&=\.vpLSGNgg'q(كlf%Mog0JV5 (Q@v Rz(,iDccc4zfB08 pEnV555rre900 Q Gfp8 Ӄ l6D"IhhD>8 p0;|jVsAJg>x0;~F78 pi9nXPH86L<ϧ!zzzW/K c64(wfD"d73&ՔԘ0b#ze0MdRZZY)d~k4 Ry *VРw8 <㰚F.A~NV5_~o}W4\\Vk Ǔch'Vq"J.+&*-_p dn :J,^h0l8r}`.;u^<0ćZBʲk W :ݖn2Qi4Lޔ1 Ckk+J8JV08^_-VlP韎Gk8hrxT9Ĥ-d׫s;ƯOnG JII G nVIX,<ܬJ+=Ce&it>q;}E*]1'RIߨ"ER;`@G}:;r{SNSW7پ==< 3b2AT1*|*}iP8KMF8NsEd'oz{%3$c0Ř;}B!QAQ(((%EnQb?>($A?Q"vQ*]938Ӈd:J{{;J8,TutaM:/ h4Rw;]m4~ڑ&|>H`Qf|Y8|4%J 0ljBr9IycDMMMcc#8,R])Qj`С` Ev:2q\ig&LD244?3G)y"V\zgV0lӭTGb /{KeN5ӹǻ|>\.y)jIV]]pR(X,?lh^{9.a˯~{}u gPw;;Wlf"N'z2<<4)Kh44!SOuf8JAizz냫zĭlFW~E߬m˹G=gBr1e6-{bio?pnmn ܵ~}g=:Q>'0Kl}{{&^~^3Mɭ_6MP02|ş?2٪QA,X]r޽rt jړ'M{[D׳Gㇽ޻V[x cD<ߌrcǎW~Ӕ'82vwV;WA)!W4e``@qM]q(H0|dTpЮ[#0ܷoStyUmm}FX-i)f$|ի+媫·=wsGS &4  XV/P(Jim[E(_ؚEsX3ܹzzɒ/b <4&k**>>>}h秒Vi1G.ۇ2ģc =6 lh8|n^\[-Pw;͝v+OZ(^o\.b4662M YJ6< e_)Hw{Zĉ[?'oq[Y-lfdĶw\-۩rۉ;WG9v]k4i天i8@9"K1Q:ʗ_v-ZdJ:[K˘۾7x v1%"5}(ܪ*)Kl!6'>utQ__?̴1Mɪ , U(J 1Ql2]¨d0(»nn'q͒ѸPRD:w1Q#Lm ŋ~?n~2շb8ۉ g0l ;iN*/.^կhvIyǔRtLp|E.r}?vNw Poձa):݌r8rn, rmt0_ӥf|GL>H_"tLpT/La#Tbv0M^Rt淓8rJ @7?#zO 9o-[F>:/'O?=I ڴzjreZνM)([T*Q?"-Ip|+Ez>%b#''}3dʡCtH֚I'nhVɓؿGFH^:xp,~=uukNw:8J'TxͰFqQ;{wv)q)<]]],ls2 壏{iժHwП4|k쳣p%S oGZY۷S[:u Wm=LZ#(fV'] q\DaLpϙvzV53 Ebqә>]w]MebGH"lGpee%GҜ9$>w"=`,D+Y**J/VHx(yHkkL&zDvN#V$ךv?|n''-Kfʁ}BLkʿ{{JL;,'ӎR[KnNJ+әJ~N*y2Ԛ"T8O: vt?vZpRVow&"h4& dUOB" >swC5<_neX.gWߤa1lz pG9X,9a)MMMwE$ɤPUc./GphzJiJ *1 SRvQP<$D0db0ISJ#0AQ@RiN@~y~瞣QǣP(r,0sjVg477O}NQ( p\&NiJcc#Ӕ\'&ɘ8N}nV;8 ɛijj9?]BX,  f4X5u6s,<ݽ;p8 (DXؘ'qͭlat:U*nf(pW yvsk*j:9a'Gp455kDy!h$+^GpF͖gt:9ˉYgO&~G^w8y|n3Bp0#JJJ2 J2kg|&K4ݭhpM&mmm(406{p8b8D¾%}ee'0 Ed7Mm۴s,_ZSёN'ql6h$p:4Ӕkk֬͝+&Xn+4D"UUwy|nXp8zH$[-R Q(Hp>uG?2[]QQZT$j  䝔LD"#HT\J[/%:&}@t{0;jp$\uP(Kֆ\ϟ/)*DB REhFi~>r%F1/b0Q(Hp3|~Ulh%Q#hF24@ITO7O4wfwwwV5v5rbIfCk__L&Cu(pu`0v-?^,D"7Q1D5sΕ.]Zo39ӔYVLix3pԯH(`P._.*)Q49|p%X\D橙7|@kﯮfOz>cZZZR+XQ(H(`tSf.…RCq%"j#җsee|E^X,n;MM,`b0f)P #>p8 l:pR*--).+3͙M4 KȲ#"jUIܹ*nvH s 5fex?Rp/Qf˦g1y~/\([nѢval*#)$4nY ˗bD,8*i&3|"a(39VDQi88Ji:|%Ṝtw'iv2 =֜lL$'>q ~Gx<ÇWמw^…B1y+W*7OeKCCfKz@)LS&xYk[_F!/JS(Vk Ǔzk2jeZ*x]#"U9_mA'[=kV;ߢ>E`Ҹ|y>غreƍebqҏ&\>fDnu-bBa{G!{^>w9io?m +28sav sXbr;3˟FOC;7G[`JJ?F'**|1uDG{肵TQN78;oIxL y-]Amߦ?˙Jr)#m$ԂSj^Yi =e1qV(_wi}-q59"۰rc7<( {R1M*^%VlP韎Gk8Nl4~=q_3WglcwBzgĔ≻"+u#ttd3Gl'?#r5ͫGKcg\gz4gn?I/hk5hꎒ0컎Nul$,:EGa'Ac_ziUDAbcŵK)rGaXV^-X {@| nnT"}K3WHDtO,?8O~pjDG.'%%1G%sH}“bΤ#z='q.ߧ N.ǟ|bcxQP?!*JQa$j5\T= >uu}*zzzR~ٗ+(;+e3:?G>O_v %#˗..?00hcnj-2)*l<^Ԧ5vיZ9j&it}|Havj #, 7/̟v)"_1~9{Ŋ-LZ)w3]6&%y2a/YN>KMB6";s%^qxmݑƆՑ}"_=I?i;ʕ-f.4D8qUʪlgXy]d% ~/)78g90^V'?-RV/=6&~icX9ҞIshg%T;(LgSErD"r [(LU/(&t+vXh_W "mlǷFTec+Bvo=IlDŽ'ž}϶HOoK#s7O^t8e_]uC$ñq?Ͽ`~icQvXbr2 f=Ji.ZLeAtQ qvg#z,.'=_ L$M9yD5m$N!=)|<=j:^8+FVDY(6?s 6p+9_4Mf|hLS3;s@a; t^5HMB>TUD[`xd,,3^81Yݹo-Zxf@J8 )WG7W3}챃qv#rdgVFŶ/2/}|6Zcٿ54gNܹzzɒjڗ_6*WQ($ tn‰bW:uQv\\ESmmQhvJT 8 l: R9TZ? kwg굯z?ʱc \?h4iU,ɉ~OxD3mzf3 R+(HHI:~*D)SU^n޴IiLEjm/;|٣bSGiU4c/xˡC,YR|;~aV~2&+w*WQqaԤܼYTZ]\BMc+(/oZl'6aʕr^qc#xSl6N\Gj8VYVV-sq:DdA.ZԡT*e8moox<1vZ.uJn;/s2@GG yV)ŵw\.d*-Tz)L&36mpp07R)w8X`ǹGڱ^~X$o`Yo< J`̬Vn)Ʈٽ$rSRYٙ+(p0k"ehL*D" Jr0Nii-juKR2 hs;IDAT'lde~Iϙ 8μp8 }R#]׬i޴1Dh8wTME"Q㤉;eɵ[ݏ@C7xWTl\G!. $$~ϭJGԌrvBN'qZ͆ Ggl>v,T *pt p8z= 8 %(jAd 9 C.v08 p0S~ii){p1 ~v9aB%%%(QL1Aڊm5PV((QrW;՛Q7p8l2d2Y555@V:6 thp&Raԓ`"+QWmm-t]G]bthp܆J.(vL/ꖖ%`PypǓCQQT(GU<O9#~-ӥˡ9 ; x1\ Q9dgzs:qK:qzDb1sG(]bp\JHj\,΃!LMN0qOb28m/v}h2zщV~=0 :NC͒b Q8)A++s<4?瑫WկeA5D-'CD–5EݦII,>?dCtH.9OJE'NH74I'#Ywa+4xtD+YhzJ_ \p]2^o8I{i֭Syg`'T7hhP0`صk֗JE!hGWtP8;;HT*5]λ~ Qf.iq]ӎ3IێR[KnNJ+Ӛ2l ps|KϷR4̟ωhPI'MvKK#R #j't6J(#2_9Mۯ~1 (`魤/42'd\=}gp56F2]r9Q"2veooQ zH7#+mۜ/hn6uAT|i>Q*y3XsET/68)=y|oKcTj+搌@ČM2)TQED T 66n=9peF}>⸳:ґ^z)<#d>8-)с6YW闿 ^{l_~I/铻dIUwپ[ҥ/her!{lr<߳d *r<+r?5+%#DDSP,(KYuIq~k AY%t"æ8(ќj%%/8Aǜ7__=KQ3sڇ i+"͢mm79nzn9ep+g>l2Yt888((% s֮]?_6Ǥ KpAv;q݅:MGT1"5+Bb8屣߱ggΥKD#ɇ L熾-,7,Yt9{/cP¸ gg"[f_p8ܜsNQGa޷:,VV%Qک ]y1kvrQ&NWi}јз 6oO#=Ji.ZׯvAtfuC\luDdc2a#S6}Nt{ K)<W&©y Q%6 6+)-SmirH+F98J^Sww vhhv/lyPeZ3^M!Vj?tA #Ro u(%.l$ѻD5K8˛`ˈ^&Oy-z/SyZ(D$P,/[嘳f?*،=D/ N~/l~JxJxg4^ L3mhqmMn_^0:TRB`2Dgfu`0X[[sQ>,oeƭ"|7%|P]~[h{[l3<,j$|FkDϞ{L2V +o$fYo|hbGIx2W3 }˔efI09G t;;;'jBz944#ˡX˾wNFki*g֏,W bX#l67nXzO}o{=D}yޭ;B%B3#+DFKp}oƒ$thq:[ZuGxQ4X, Gh4Q#n%EEYy2~F",,ݥߥ1kv\_.G9ڢVxpY~Ah t=v^C*hx(G>^I{Dwqǟ3fI(x%0զjVY..gN3Dp0 'fraNgg'~ _u޼L> 5pljǓ Mk&IՊe+EݹSGo!qÏ{D!T]vv *&>[tG~yZ[(TMtdY zS8M¹#ڸo\g&>٦jM&နQ@ZBL}>ߤ[\.BQ *B#p&DTVJ$4Q(deۣrLY66]tƮKN|$O|KRR,Y.aرRR$UWW7551)A*dǦhT*ѿ!:G`!NI{%ڕ+SgkSk;mZ L&+mlt^ Q%qe5JW[UuUMj&%Psr8SSS3xy\pGɕCxY^;UUKsNi6z=ruZۢݽ{LMnUW/T*x<;do_X<_>O"kVH d/EK^J>G`j)IjҼ4jņK\~rH4-\ñcgM՛De2`00)q_G e,(s熆RɔEkܷs66QXT8Rxhǖ*S (9â%o0ߪST#V۪kڷϾOU.'))*Խigm5ۖH +laQƒR9^H)8Se?'#;;/3]vCS%ijz~ (̴¢%në'DG8sW!]/dS6* seٵͰdR(L+,Xr:PJt^`NҢbr~E[u]X;;^*ja+/De (tâ%Gᆆ\GF8G'D\#[sI%WZ޳""}>~u뎺Rt~|upLX\a`b"nVnWO׮ӿGDJ*+oQի*"+$e,(=RiKK >":9:!RD.JWB=OUoRX%SQ$$e,9( sXD'DLYWo5UՠJtZh`®Ѵcz8 IEKJXӾ"FG8pQrEJ(Jjâea^r*)2J#%IyXd8PJl@hGUe, p88Gae, 9Q4EKq( /,JBH_A\Ѐ((@Zâ%MRN'Ge,#v 2Jae4J%G+2e, 2<<9Qrv5ͅr uu}GIz{y~I@4qb? suuFݎ cxW"Yv?i[H*\}v d U uF!sQ2Doo\,>8[y+9T 6%*MV5./sQ2 W*K/?Y3`˗]& Ţ X";d,W%sX,?lh_{9^ߞDNwLro$W\I8sQ2Niȯj[]?NY.}য় FWVTmڴ쩧n`Cu)UHZ(ؓO^Ϥ%>}(C&[5*/]ϖ+oPמoܾzoVlFAl{{Eik[fx3Q;2v d:ʗ_v-ZdJ:][K˘۾75W,KEbk>QIUURBlO|a8J0&U) MÞ3(d+SPXY8JF7\O l7tWe8Jj)lJWG(JV)%6`y+9$ uǝ?88ǹ(fdV6t:y+QZ[[e2$Tn坝+Ql6DRp>uvt-\pקT*.ݓ@ww\^xG4v].dkMý|? ?<:8pO JɆG4l6kZTZZZJD"H&t:2[#e3WeʎPzQQGp8 (p(QQGp8 (p(QQGp8 (p(QQGp8 (ruww't΁GBD"t1GW Qf Ԥ-444vG5|>A$AGMjjjF9Jcc#2===e8JV JchP %+X,1Gq8(R&(DžaGF#sVG"KJJQ%hkkC!p949LU*q/h%jzQ2 -+O'j#rz ͑j8MÿEpT^ཻzҚˊb&TC"舟i[ز&,%|rrYw_}Cp~] \\iLDA;N'#it*êV(v2xW[^STQJDDMDvHɤb}毫]gw?q#(p)S:mjش@ "%JFN"Q8m^2AAE,?  6m>T0)d EZY*+Mշ;ncqQ2©\iKd%$"Ҍ ,)8hrmBOss*{~;8r()?vukS̋uU =I:*8зŒ5+.o?|oqQLtXmgƍ T#:foTp>sC֯opG%GGM`+Q_ γH\4_:_f]cΟ#%|:;ݸʹmvqdZ>Ȩ`g6 &CT4зDk7~ "|tn5K#%#Ne&DLyrˤΈΆ-*-)D]pCT䤣&𛻜wi,JCQZ) ]{o䊣L}/:7-S~ / uB˭[Q,/t+N5MU3MfdյD} Vhz`_]@TAtC\luDdc2a#S6}Nt{ K)<5&©9GdƓx%0зbXݨe02~WU΍HjdZ5c$.ٙDjD*.l+BE{Uq(zUZ"l+&`Z<4a?Ǥik[F3VQQؓRd\*yPȨwb dwv3I&{gwrv]Kߞ=Vy%7E\Q*C/꙯kIT⯊jȸv˦gzW1EY9TV= :>>ܱ(4"ַɮd`˃GBsw+l5G_ٯ{sS UP?dt򇇦P?Ц_t- T~+$d LߥF2O<<$`F1"[FY&&-]TZ(cg,#0~c.(3')h.6FRv |5&]y$/._S];}| <^oCf(hzqq?R)A7gdFkkk<)9)19qNG#--/Re+ _nÀa8LWϿCsyz;}P>4{lQrNQ>*A+ QȨB|^쥭K 11jVVV644gdFqĉ]v֖&$&NOͭoȟ>>boN(tEொ򍢼ޗ*AQT1E,沲lGvllnnjjdzzzZ[[+e/mj^e^AC̎d3*.k)+e9$TUU566:tP DFwwv6-'m5ͻ݌?/Dgd.z}5k.;VYY)c``8riyp11Wٯ*)oΟ55W8_ƏO.XTQHHLম2eD¹J9˕U)oO=+ %OL/UXZW,wrSWe$ػwoCCvqZg~kF\(7,/uV8'N⦮2ʯΩ;6{B_x$g`u27u@-luuuK,?Ś_np27eIHpt86,iibF]}!vntgtd^[SX\TUd˱qSW(Ðc %: ;ӣÿ)Kbw{}7u> g v{%.Ñq;n0*5.)tdrSW( 222$rwzI.RRT)(M] 2/DԮpZpSW()(d2 Q(d2 Q(d2 Q(d2 Q(d2 Q@Fd2 Q@Fd2 Q@Fd2 Q@Fd2jt+ }7rhy/o7JM6)Q(d \ddrQ(d2 (??vU2m6)Ԟ={رc\nkR.Ȓ+g[x㍓&M2eu]w^2z'ONJJ*))9|pHeϞ=K.>}b;wƍϝ;?a7j}oR__ѣ }~mBB|a%z{{WXf?ׯȐV\)F w4U}}%j*+p” & 2|FkO;I믿D"Ro>u\aݾ}{8bQ| eMf˿ڼ<lԇQZe駟W,flgΜVڵk럻[3qd >Ko* 7er];(x|#Gtuuy<G^xA[-[o-iii򳭭MJ|IްaCD2JzzL[oٿ A*DY[n1Qx NLLljj:zܹ3++K }Q[iӦ'OߨfVߤ{Oe\_cǎiscɒxĉgy&555D*ǏWVVW_FBW^y5k%viaaw>QLe˥MP* ,fy2-íLksR|r޳gOD2d^t#e?[G??>YtQFEF_~þ3#@F ?hHxQ'|zj)Yj՘1c>3Q4k+CvmF=?% 2 N?g 6[U;vƌ%YT;̴٨B((6h3J;(2v~;99>W$d] woqNJCprqy! H6ѯ\P$$Dr)h95Wé=p.KgWӪ)o:NN8\h\8~ǿQ*9!/8j8SƱmP>D@"H,"G FG{h{jg=,'JUB)~˳D"Y|pAsQ1a|=pMH=.c#l=U$qՒO' H$+Ik7 |s<_X>\1r(n6zj4= ʇz={LzC֪ Pn<_9+Gʌ'̕鈀D@"H.$sW uE+ r7|=?j=922nGG>D1{Ș̌Ix9 5c=8濷iH-ll{a۾>OD"\ HzWh IV`yƾn]=*]Aӣ̸ޭ;(3 uM ?Y~Ɓ G <ON H$R@һ@5ӣ LgwAjz>ّ=/ԑV̞h+1 ~­nKhs+3__Y·~>?,hҋW-^*fH@S$Dr !ZtWWA0lل7UHLϺ/i]n@_>9ϳ9$rI7ӣ;)cɟ[9 %M+|D"H=fz$9<,2YaVUd V E:Tb[)[(_wE"H$C|)Ì@4=-Ahg&{$Y|#H$C3 }6{g OUTtnH$ɡ$b ISBN뀇D@"H$D.]TRR0~4BD"줫W"͛P(N(&D@" H$,111""_PTTTJJRlnnz}q` D3D6Q@B,!n].#H$NKK:u*'PXXؼyJKK[%λ :\.S" H$U__ ?~<ҥKm$I>v7ĤiH\D"Ucc#(:::((H.# /^J`*P! HRcbbƎ($$$...77ܹs.!3gδ_C]A" H$B o:<"FȤ?{7lԗCP({Q# H$xbaa!(U.EGGgffvQ&$gDZZurCCb>,, G D"Te͛B0uT$P}}=fOOO$44|?HW*@ ,^YY"{cN@"\@E I(RxxZ`\{DX*2,IZF̙3{ꅏmMl??d+H$'>{Z,I<(({yy`G<4]YWnnĭg~~};088822Ů2& HR1Łdco#%%eHZB;sL6ZG@"HzDeHT]]ED"DTdҰb$#"މ6n.d& H"l!l?7C#x$,>v>;== DeH(tH^DeH%̜9.& \_Tom\.džJR$EDDwu$"H\h1w1dDeH $$''c&M@"NTq$‚rODeHH\ "..N:1H/*@" Uss3&x? WXDjQYD={j!!! $LK@",QY-*,,Hnnn%%%$TQYɺ߿L]@@"YMTD@`#D$+55DCeH$ 6t}>50#$R{9=Hzzz\V'u\ `Ow삞سgOs L"ڨˍ#a]bބµ `)b',%uign=#7tSAAE YA6"^mc\l" Й)U%Pp* 3iu/4J$+yqqLkb7K<*ݍ[ Km$yԾ}C"Ss3jWѵpf)EpzS[q 4@c> 'shX:8~h]GP Ӡ;gkSv9^Yád8&Dl{ 'YxN#hTIBhQ!B qX#8( QP G|6cR=:Y/~6' lxS+F@ mGU4;II&mB<[x{6  {IW'M`J 0,' .س U_CWP_BſX( i;Y\;GS8t T!R`9>!H;Hhՙ )Mo$QF<~f<0~bQ`q ?xP@@@Hm?#i0==RӳB,0=-I؃BO=qP)ah_,},D ',jܝ*渥耎O?e=+L\b i#$ ܘ›JMT$rIwVVHZ˸]:pR;iχӓaI4=IGjz0="{bz>0=*{TVg46=! ~xJށ`Ig5@{$H/JB HFČL&[-ؔ F:vad:~8Y5$3*0$h}1az{'Z#d2Dηa[B 'B_(tx ).@:h H ?Eۅ&VR)Tsknp!ɛ-84ԠC/L"iFK4/p@2}ϧg-n-쑘dO=7 :lm( —!T\K@;5 T&O-7L@j7 me=j Zx#17 hX͛"ul8b: 19-)E<qzUNwceYH$VLL 3UpvM=aly7c+=WgKϐ3!1aHqH /@hpPmL҆æa1{w=Tdc9{nn7p:upw|j֣ǐ7س2~sG Mnȏ ]w]g H$GUNF0N1WTyy-Ug{qAcO HX_Rw \ϞbE?6O7yu=Bn; |ۯ;x/5> H*>&YeqK2kz&ja (1M= WaS1wݺwUϖd}BY۲R~vj.@0@!TQ*  _P'$ycan-Fsd)TF͛Æ!6@}EYW&^8DA`l8 {xq^?rp?2ͪa^<)>c1]:mUB"t%DrD XeAaۼF =o߲9`\(L֏Q`<^.ϗā ٝSdɅ'|ܞe?Wm m&,@h1@!Tjj*5@ׯg닔Z/rPtP4/O|}oQK9 >/>_C0ЬpҴF07,l۔ѵ g}=ٴ1< (7=)A6?wnn]ؘAΝ ӏ,OX֋{2 }GHY+D,@b<*) uaKgďJAk}Y h$ F >AهT48l8ƚlpuUJjnUq]bvj룞~%i.M@"H L>3Vq3[O{%뱅)BLre혅oRDpöYCz̛qkG]3Ó`]eg$.٢dM C !- aL b"Zv / HGgk I# !KKP wo._.'C5k<9{U³|y~Nλ6-x1ZOl$o3dqh&S|6l ad<_GcAnvw<;܁D6>&]eW)΋W\e7{(O#l/ݻuٽhz؞ {<ʿ2=kGpS0xD9g\>8Z?)ME YoٵiO 6y`.٭ ? k>{?ґ=sLӧ}?d@Uӧ?S8:_yO|ykN1iCΉdC 7@b)f3H${)} =|Q6ٳadTg>Xw/7=~l-nV #}(nCmK8] RW ['@~*af([| vHR7R/2Py+ =fa+naKNNvi@]ggp C Djw 1&ue>ƞ,TG4=i?I{=.RI ~8~ 7 _7% w, UL9.@IŲ^,:)ݘr[H" Z.Pgód4wN#:lX H$TQh8}$: [(OW\}$DTjjknn))),_PPPٳgl(;cov# ^__T |T*!WInnnD2OA$Vrq] " 99ѺO!{80`@\\ŋMiii!]R;f:d+]X.7^V{2NhS '燅cbbLsLѣGbbB/--ds&OcwGI(UPB>-=-2&%%EkBBBJJJFސIAAA5552c(444 99ҥK]\Rͣ`$oԞ EkEz)ÇWVVZ8 =ΝQQQ\L^^^tLvOgΜI@Bsez ĠӤ;ֲU $SǏ&H$SٳU= HS"`|||n&(O銯n@W&..$$$[ 5666}0D" 9)j:1|>A;wΐN!lddgg K I$ O@BSbΠqV*~i56~x;D{ADzNt⠬D9c6H)lO6sƎKD@r%ajKюoL9~EkuK EIIguuuTT_||<"\@|iꅏy3 6\\  -FÄP?~|QQ}}$ 4R&$$(gLRZZԩSu9$;_VVV/""QZǪYz"r!޵HjHtH(Jdo:@%%%TD'Y:V"##uUtܹ\j$KNJŋ~~~zH[8XQb-TED" ѱ" r;HII1TvEٳgDNJ{Y}sjnnnpp0.%X\YP\ZDhpKH$:V$jzgDH$:V$lLUv.`jjjr9""X\̛7$IE5LQ;^"NcE@"477+ #i""⥴ D" HBBB}8%ED" HBCCw{s4dZD$$˥\Fn}I" [q0K_dd$SHyDDjhh #C@"ٯxq8+ED2Qeee2o߾F8 H$DV_PEVr9""Bޖ<ɮ~ر18%^?l`` "" mHtkcTYѯHVK.;`s%EZ,̂o4 +a>&DMK*4\]`c_ 5nYj́HG䔪)9$ƔOm+N;Ashԩ#I.lH={5$k_u^RG,<ә_YV)B$NbqADŽ&C$_'l %zP?S^U)8;\0~|jV蘣8R.NÁ_4y# 9)oJ09Q!!Hb=e`+3 ZD\1(M@wFuFb o5yS lT !*XT'ql 2#$J\U,!ky-0EԾ#؞tQq#yvkX|aGbYļ !vMk HzBsc o*5ySq%giXYa^V|~c+B!L'W~ ̍U1X޷P D@R!#ia#~MSL{y=}yuN;%j8%^YVVF>*8ҫYƎ piKggM0~N>rjN{fB 83pNocqj+4nḣDx Y[2̀kPWA}}lm*.P5Kb8 $8Ȣz>{>m>vbҮ$m ֚&od2ՂM`cW#k?UczBV-`=%#$-V5ImA?Ϭ;mB<[x{6  {IW'M`J 0,' .س U_CWP_BſX( iWgA57o~Mɉ؉q QѠ= gH|Ϥ]w+0}.:{l||\.GHl'1h5ysI ጼvaӳN0HM MӳT'a ٣}P1L" iic-{`QhF7jc{LئBi3ӫeٻ|- q00effR-"ӥT*[!ޔ0?d|hz{4>pc0==R-S2J"a۰-!Pz jit076<=|sJ~=dW5uuxyy'6w.ns.kٳهsj!0,ʯ+Gǽ~vi׵G3>Zۼ&~&4izW@@@|/r"##c (%%%Uh\jŋ VMj ]s1A+ 5msL[Н54a+ ʀSM3Kt탖HLև'BOћPlWYBːN@7R 6j0بyoؐkMB lp߾ɢ+g/"Wp l06={8/]yI9 fհ)*᱗&OxL:mUB"ĝa\SnrV5uH"[QQQj>>>^зI#*~___CM:Uۋ K.:t#<_4z=vrrtL17 Z-s'hMY U Zs9V @ezfjƞ`hzT c˻{^au<[eGif7[ǖj[ n7qo}ͽC_+֟u-6 }oN^}2Opʖu [~Yʽ,,6-7frNw^eETh{%kff^Ud/D4`zjƌH)7jK--cj (&&F/Y͛wZd@z:w۷/K>𫪁;f Zi\ ڸ'hq۽Woqm$ë 6͝N2 jqEŞ7YLȞR/q0汰Y l XL|HV1K{c!% Y$1`IdfSM# s<kaUV++٪eJVuک{zݿeDN_\v A(`.]3/Z:[":w^B ZJHH˭3gB]PP^:2HoQMN`^s2A67- w_,\wU-u&h?K9a3&h9U|M1dML0=7ƞ{Q9d{1'){( 8l| }L8cdUvD˦<޲}H $Y6T_=M%mCؤ*XP&sOmXBY"2C4GEHx>nɛƔ4}&hk OЮ?-/1Áֽ ctcsQܻ'pӃoW=}˓A=>IAjsuron<yO nRߣ{6<̶c*5[^0d9/xi _M]}R$ބ"F{/><6Z@V\CIM!3[ nVOn Lƚ=Aլx&hU3hȽHV|*Ϙ(l=csӃm{5厛bh?Q#6<7\1hz6QCzϛ4@fz6B#׳?zzz!kdqWHTxu*<_[d҂PٕD)j\n'd_]R企4zcV8B<wZDH|+4UZ 5AQgvt6BgV=z5A=~7 &h=z?g9l$} nz]CqcW7_y6mM۳>lZGƀG=Mws ҹ+ۃ/𸁱 'q\OVC0BtN=/2kE AG-`x-"??UUkbClhhfk0_M<|\-72AkC i23=˧̨[U(nY>mp[N M3yȕc=HMf)F1oonvdoyu93< VUvNR(-zMִ9Q^ҥ˴ YtYD>ؐC2Kv M_\>kla8%ZDTe|j q)79K 1*M1w^*#G!~ra3Fޭ_@8PQ0Y;[}<%49z4OOQ1IYn*l-> Z޲k ed3& Y9L,|dQEUcc#"I Z>;UB V=!<&{6< 1‛G ejbmhغo=`IG+IsEQOy2IT,Ôn)888;;"ABq={XQp5 CvXq [mwXwru6*0袡A*kQ*,, Z/0Ƣy" 4Ęԕ$nz{FP5{y&qBy711QSƧmee.hbl#ի.vU-߁h@$b Iz#eX uR1 72' C={www#eQro߾b \Tġ7!!ܹs.Is:,wiEh#\dzODG#111bq0ĒevH\TġⵈCCC]uU&Y1d<+5񔙙ӝ3hnn12XTJ,0`ZVWH@E'׮ELBl?|Yb>>7t&-> 30&)s673=?/qvZD @ؤi4I: ~e t9<;_Էo_< 0sxyy577#cp LoN5|1Z~Ahy*`k566ӽ"˅P8Hu^x6A Fٰ).3^L:99%6q OA;^܎SD'>U.>X'=}y$sFIFku||*`7c-"2 )}RS! uPu&2 ^yœT{*`g%$$ֵd;+fΜ٫ל;cA%)@3;&dzU]]CMtH|@TPhԞ5y_ov(Tġ]kaƕ9Ed\Rȓc:JЀPU[j9ݒD@rb;Xg1tt-a:qh_!ЧbW z3ǟ"" H˂:+ !Ew>>>pdMOhh(&hD@" `κ9Y>HEm\`{}Qǜ"V"b-"dq-r&<<|wOwQ6 H$ RCCCXXvo0RԾE$60!zx.461q0X9T9^x2)^|9G; 0BT=]+m347"[85Uh.??S-m&U^cS I/"AAA{>q"ⵈoD@rqa_պrEJ]P/Y 5Kb8 B8@Wo6 yOò^mҼ z_+S%Sƨ,u88Q[ED@" 9'\$gḣ`lسA>Ϋ3cR{=|'g 4=o4Lc {8x?'={Jt:w[$D a! @'/СZկ`\:*b@Z?Zs-UsMezCnSD ؓ9m1=*d=îilǿÏS1](yJ&C#)V^33XC CG"2#-js j pNKQ'1'qEhP1_q,Qq*3-'HmRViȟɀۿ4x>4=Sez{>3]=|vNo7(Ee@*@>4/b?_q)"#M78qjq/pP?úC#϶ w3haX0==SLQ#R=2 Eo0l{!2 5|:0.͗,--uoɑ8)g-47fH10~bI YXaKD" !==঳ O>NŞ3CdhzVez0by֗`x(x-C/3)07gMq)" TڨcnZMHySqR1ΰ:TO@" 9&6>ʀc ?'W|C=S4ZL D * 4=/ <[dz61Ӷ Y XܩUL|HV1K{j(/vydA8@Bbn577J)o$Q4c/SlnF(j H61 K{U3=npLÀ쑚x{a/F=͌Zޓ d@X+g@tBUvD˦<޲Wf i;q)"bs-oMM$v5?JD@rP e?wF (Bp`J|ܻogUhz{fT !bߠ˧n~%񅓇)BLreC )5zHy-ݏa/>d/6$ .٢dM C]L O폑Eh?e@}sG>[MHzl*67o|0@ӻk@\wUw \ϞŊl|o2೴#~N !s_>n]N79d$]&*aŐyUA=d'Q6c:^H4=lϸ/}aݽ[yU>j9ǣ>>y3'e=d$VjHxˮ-dfc1]:mUB"J߭$}$"xXd?(G@;9{< ?E=Ȟ27 HHG]NSDUy \Z a#nE|ͽC_+:ĐޜeQUUop"aϽ9+u-3-7fH_/L7OMJ@" Hhed =kG|={a-O=[ o)EhXZ lX/, 5o02X{PL@#(((??ߑFCEhрdE lTH+ 6"o8r tK]ݻMnBA" YHm;"iM#"4E@#\E1 3.rW$Ɇ@ ڡe֎|_"^O>)"kd[ nQ%mO}ݷz… ) H$>͔upv+WRIӝ"iZh H, @6uԸҌOYʭ@@qp*6HkiGGOdggweUDV)@7[J\ N@j$rvOّȊٟ%|!+d6SW&u.]{<*"8l$I.H7j*:HemwATTT[o/--A\gS__IZdd$ |:;_OOO|3Ǐ:u*$_cǎM#t@oh"""lTfkQJ%h|1qp|aC}ctt4v})#Mo߾"6R;#<޸}l$KDɶkQ/È )88rss[/cItųdW ϛh+vmzv@JLL;\W^Kim[Lx }r88ƣ5G)+|'蓤=<“8׈(gSRɏk4N*j4dx:EE'z~V,B>ܝqMII~Xͥ)gH<ڎBuSkϸЊp-ϡl5=CB#fY!T>&zM--D$3umv7uʵS?j( "/5@.Ođ;M[:9V /#QxrQF@ou6b!ɓ'&fp ,ф}3g;bъp~bo* L\@jcAXBΝJF-ppg4It7 [ 6{hE8IYִZр${3B'JLLhIIIVPvNDu!' 1XBaņU@SZ0&BEh+1,̙3L,**JJ:ɬnvhhyX@ҺVҥKx6 z>iԊ@·8h{ #oƂBiaaa6@8/(3haVHxΕ%F}[CrX2, HP|b7lx!T0UY\Q֯YO/Dm{L*jǯ]F"Ł гgOnmE%4E]YYLSs=4ޙֳb!TVϛ71bk®,( bxwY PxCH;z?Uu&\֝kU|b{ҥP"4[_/b[.k};{ v&#~:ME5]AFъpWRttd׳gOLD^ݞuDž!!!ZT@֖R~(99 ۷ Hv1$ 1b8waJ:@auV/LJQ7쎙~C¶ܹsM.|3h_*kmehNMQ޺JOOHvX G +a>!v ߹Je/9/@`K$1|8qjqH<)7=Hhba`W+NKcod> *qE`I^ZeQ;{59`vkmO7L s۞T156gV۞1s`mϔ09TC؆m7V)4^8@` 1qH T*.aH;~ #LSrR3+΂R@$; ++,ISl$4a0l֓ rnhͺ<d$ <;697Ig8TP@:1sJITӚ T"N!vQ @:r^oO~o /9OeQS% ʌDd-T&# RcRbSGhx [%hl$#mO7:Ѕs ഘ 'R~Z5@%)bۄ @ʭ5m:yL&[/3؅qŏdXO}l[.V# dk4l?$ۉpc:9ߞO4Ig8XP@Vg1ҡX3HZB@L3@?bMqlb#AWgvֈLL~Lo(-8^8kuE{Ăҗ=鋋l6a8l%AH6Ƕ^* "7Ienz#:P}]#j@2#P>f!6 w mev0_^h:1 [r^9_"ul8b: 1yi&y>%;"ݯ$|56rHaLJ6\z  ֠Zm&fHk70>\ى@“ZrA3X.G$` V ~x[|}쳈?f'O+mR|'>TQ1ߓ71zxܠPܵcGIY.hG<:W'޽P7ssg;ةSwxǧl=~ y=;/;ϯ^p7ֈ9<2ȇ~` nlma|{I-]vZ#̮bmCYCWϪ؝A|oXԜS 9aQ~\ <:k!GK3/_T[eޛ/xN6f,G䊑CGyt~ϰћ1Ͳ{҇>#l7@@n=xXi?AO^|v߾x;sH 21VzmOk0͡"*f $lf2hɅO\ +FSjd\B+{ sw# v( ڦ9$No<c14zu%Ř!ZOi/V@2o}L tq9re܎:M>D1{Ș̌Iy-f={̷Vꮤ濷I.^>ϋyBodS~3V^qd A˅:ߒ UY\5~gthɅ,qS,5/~_8 3*( ]0@듒F_ХKgďʵZ7o[%϶C 릴vԀF-9/t05<\hn[[mĜa;wsu<1 ;BߛӽW~ |9}5{vzX–{sVꦱצ%> CWܓm6ҡLɦoayƾǽG+iʌݺc+i&l?=S;w,5#t,V 2pP[HhmONXaUO:UG 7=<0)Pђ 5b.SlO saG{nӉiAII 즦)ø;(J F$**YZk7jij)I^UAQQThn+Hz9gan}~\yw=KV$bx:~5/~P_<==9̙yyJJݻ1ÒKašd1=x'8[txlԉNdS1q[X:%[I3+4rBRG6L@SgӪ2`S|v'6;q_엇/oIrA|z.xsuqܵU%Z=oks' v+/@1+oSP@i\zy`{G =2wm{9UµZ!Ke1}!z4BY_(0un?ڼI/G>.f*t8 ?َ^d­[ E:{xt]p,GΦYwu$hKnn.n  !C<__;sΜ-%W[H֙SDNVy|:^t26>F)qi[uY!/L(2L@±XU*tnilp'܄z[,Mo_ mʗIR!N͆5%Q w_ˁ0u;-RzI#4MMzC;=tÀ4y䢢"smOn{$VH0yquw`IywY_X" hyd}AkoUR| %p[5mVϿ%q%psqoKֶ% t!ޒqhO6YfV4S`H:jv[pX2;ox*'Tdr(aKG‘ ~!!!fRKm0XH8Z¾P8L:44C<YD%9@M2% $z#MHͮlXZ:c]URmdIHko… Ç7+v$q @>67A=c!ƺ$96Y7~,Շn>G\#:|1@bLa {ZK8(:% ^J@" q -hâ4ͱ@#'YǯTV^m;njԫ/aiu J}Qw!9uMԱvg ͛7/;;TP϶g7nm۳r 1GȺC4QA]wsɞ: ^sAqAou 1-;c SC=۞ݸm& H³zu~|U{m$RccMl{v`@BU^dմwQ2HOWdPFx !}ڞeDKA`aB2rydd5׵VAAA2BF*99yԨQ=S[[虫k@@@EEVzOD@2j .~PR'Ǘ2upo=sGpooVd5Qaai׏4p@J{!$5 sy UUUZOܡRgơz8;vѣjl&Vuuu _V(44ۧ?&00U7HV*L9dƌ~|'NhpOAaڴi6h k&Sy$OQ*' Qt 1{=`P?0`1i2@&,򾃰K''`[5xbD@" }ڒX]]VœT*[74,Wd?>p+W:xkV-nIZw}t%\NfpB `41a; Wk/y/VUaH@" T1V[D?i~~qgEtz2GwCcǎ|L D@:WUUYUXfz'tcLБ=M2_wఇ H$8bʒYչV% f"V H$pm@bޘÂqg".[%2wwk? d]$=h* zJtDQdd$trWYl !y6eM" %܉vֶ* z'$$ Y19-e ҈D@" YpV*szٳoƌ@Ay룊 #Ww$H&&V\U[T=9&s!ԶEz*??DgHV1cWVeRo['OK@|XCJMM>|8]ǏD@8QH8㞎v"o{ s$)(((<}:4Ժ%]ӕ>h$/#HxPPGAUN@" ܄Z޽]Q|r~~> IWo+Pcc+v={߿LXiQpSqaڞq>2'ᴌ$˒7oxܹs}}}-"8I5Pjjwvv_>V#ZxowbIb$K(<<<((@BSpp> #ΦONEtm"`;vH]vݬ#6 b8q;vLC Y;i HݻwǦ֣G\}R>pwF'[^!F"ngpv3j! YHnj?pgMmԨQzN`ٳBGf,,QjV, N #l>nA87[qGc`؛6mF3VTTкݖ_pjj\ĄԒp#ɞu濐YJXsvvœ&V?~S7e4Y@ϋ)c:C&d@tWXp O}ʪk1h yɪU=-0,s~_X9Nu,(Ț8β&I!D(PzN^fϩ-'8+7g ujW|#\s ^YȬf(^%rqȁJI7縿6P|JڧX|~Dת|.U}~R\D宄+28w),PBck#Bjr@ffc>oslf|LUәRn+ԥ-,pLp"NCm2lPp|TEBZckX8 r%TP0Fº,Npz/RSSvjgUK&Y+ʋL 99oj8oe>>ƍ@|[JhB~r:dOrHr {cGn8K\8f@URaziƞ=UaAO1'®î`i#!tR'U$H#>" @!@yBHRF5spsH v!57pEр&oԼ٣n)]jOcZr }q{?]l{3Nn3=5؃Owt8MHҞpCFloCU8xBc?wɞU9vr^fe9^ z\A'$,NE;dAq;s;'"a[^NN?۵kϐ'?Lb&x5sN@v/:JǸ.U'=ܳ.3VepH#Y4R"=BnxrAb 5{plT5X6<^6%҃a7?'l6ؒ@xV@Ls۲qfҗU@ŞnMqgFayCO`8l&dG?жy6 R|aMe0E駊a U[TCr1fR ?JtaT|n^<${*prnpE*-X޷@GKgWB#u{q^yֶ_뤬wܾg-,}{_$mpܥB.Ue5_oauy xjsogs->Xh\X⡮fRPasHGN=ܻvqH OҙL1[mzZH-o"q&Inp{Opc2٣nWCqX](<wY!=*|ċL]j YGLXs/wKO-o/{|uJm䬮3ܥӽ}z_!96>L+nK)wVJ{usOgaׄsg5/ xؖO-܊oRwNU6(<]r>?۴aOsv{1;D-zIE0U%>9tqee'aMb Wy3$ﳺ xm欈M%c#&|tER! 5Up DNm/O=hc˃G%qˆ>|+ci j>I =~'Dj ,ooneڀ&vA},?๝%>=]i[A~NǷ_X>^L@Z1^qmbfe^J _*~LaH}7l۸d$[Ê Moxάaڑyis;9w~ oRƿ}n۴==lZn-ڠO! 9iq<ԩkC+ X24[e ?#2`GzA珿qѥl5 =ʤzNұϵȞ-Ϻtl1d 4$RV?t[<;9u`Cv6]{{2sGntX~E5d4oG, ukfʕ>c37%ۘ2eXi7n=.0_?w{|}˛E@ !0Hii2g>:MƕCl9l(cUsl׈N ?|{ ao{oRE<4[ebf9'6;q_엇/oF|kǧ7W] \O;v{h퇣͝BPDECx-`fĬMA%cutBW`聜g= wygn{Zs> =l;}m޾^Ra)7t#?' dK~K{o|"} r{}L,! !- g(f)JM#&*ܻ(v0k]oMcfOCO='$$ğM9ҸSrsc'OZ^>ӧ?'~O~Mp# Q% $)6IV)cm%wL<,׍ sβ(jf Ulpn =[`˗%틩oS,L>`Z2C*MMKWwX%psf㎏UfN9클~y?o.YOIUY  B?ÎgN}\zؖW</aoE>K{r<>7vn^eTd(+@⩸J;S1gdrsi~GTo3@9J ED uIDATeX~=|鞓0٣e6!5wM?JN~k$t DHC1cvU45rdps\cp4©*W$6@i [J8DX% ]\;۞SU9҆Inu0=i=qRR||#t# Yjt, U|X@R]/"G:|s$\ +C}jܣ  쬖 1;:y{?dɄ[xJ\h[g S n֬\]E^rssp[E] yܙs挔6FEMz衮]P@Sv֭~Cb#1m4Ն/& Mhob .;x΂F2^4?(D@ : vD@j# #~"&N~ k UyUr1ӕ}! HKc "$XK4bTcFFI8FxOy A@"[?d'erFbkIXd4$8-ttkَNH$鎺XNnu@ ~mՕl96A踶C~겥p&D"HЫW/|׵v $D@d wu>D" PH#D" ٜ*FH҄# H$*D@"H$D"H$D" H$D@"H$D@"H$D"H$D"H$D@"H$D" H$D"H$D"H$D" H$D" H$D@"H$D"L+WhD"YNH#PllT//gҗC@"H$*00PP5 3D"YZEEE MeggB@"H6D#oooBH$6J_D"FݻwG9;;KEw$D"͛@z H$R[ITWA@"H6ŋK H$t `'@,zӏJ@"H6oOt~ZD-ɃQ@1@-ߛ: u 'ATs>p0^ך-*ݢ_D"lE?wEjhNMS-Ï@jq(K8G6.L@"Hs}RGT! @?-ǣC vHH$Jco j p!i=D"HM~ dA ǝD@" H$Rb Cw @j'й$D" %4R9?yj {@w"D"H @:wt6?uwC" H$d>H\HS{]$֭]- | ?Agrgl2eXi7n=.G˂H$΁:񰻡a[ATϔ&Pw*VNHɓ߻wI\)*D"H 8TR*)'Pv<=sr/[.#{t>GQXaٲq ƕ?{$Dr mԬޣsH!Au!ť<ݾۻ @ g^J`oh|yوxo/]Jl_}*! H$I#Hǃ ?Jeh~'#37ӌ|PhnƧf9$GXH1bGfc1=\Hs&HtEAG1H@ƚSk#lCƫ6u_"7R١^rh$B tl61(ȉ9Hr@O7iT4 b1vŪkȭ_1IyN>ߛ=9:`m1=8ͿݽJW |֧ . Q߱KeVa x"k]j}lKb)A!gŔ@m&DKQ # M_},7;4+Amlق k XG0vR3=\iIVctڵ)FGB[ǟ{n=9zj048nE LH>Q)ױ(* g`HCقH)6nA1db' F ),M\ &񪡡m^z 8ػw/?f6ofç0xOj5&'&K}|N Wyf Ʀq$c< LQV@SY}|*S&rr?4)&mY')Q.9"IhϳBdTDU6ha4B)e&,g>l^_.L[{=5|qfff"CVaq}OU*R>0rlB !p'Sp9(!!JsY#' Õ<}Ŝ4P%{f2W  DQ4Q PojL Jhch6ٰt&X OljMf1rq'Xɾ"4A 뺸m(ˊqAړI /oQ#5TK69KPmBݯFZA( PĮ7**"#LJP[XJFϏh:We*ŚQ`MWI۷m4VgFY ؖ¶`- %JJn"uװ'GX +rG? "ynV&~)T*E\v{(Y8%4~^@2' @SmFkj8O "COKSrDQDQgjj rH[b(i]w c ccc!Vá>$0iYضeY8X44Q#DAo60aX\R,؀-LCbiki_zHaDhRė*}9Ei~lH8GT.bQĞ={amRQl6bZk@:.mؖc;(kWq, F(B1Nsf Klܓ<(nP ( AZ(0ք:B 5#5C>ܾ^` 4F p|$!IJcM6ۈp)Iu/ji7x^HElx5֌h2 s^Ar wN 3R),pryrT4rIޖ5|`#‹4ʶ1"ץQ̱ri1CslZr#) `k1 8z&%uhm43ذbş|Q<9CPi 5~cvUV#^%NO,TSn4& x`b.BI\v*T%%%Ai`KX$}sjh% :-IX6DF`:0M|H_0QxcC!W!TuBFclf'ǩNN0J0HUhmW*(>/-͎Yv3 \KFȤM(@ pI)BDayP0`4BHRR}(ٚI$'4`HCљ)asc'RC WWA(9I8gc""FubhMiX{rU f>@u|y+ҘDX!踻Pks¤\M[ȅzB$5\ag$DXH0:TzA-ZcL-]R#lr\Y 7(\|:lԘÁJe)c;Ԃ5hN37ԧPk G&Z62q9[D8k3,a8MΈPvI/a0ب9MEh'j2@YŁ5H5j;p"ne%O.XBuIK0ؤH?7m,rN ֙ШMS9zc`QR-+Dbnn]o9 n_` k5k&F ɻ}إܡc s.{ј4II T#@a0($R&K" JH{0`M)bsZݿFsz/0L/n2-Xvlnغ+W?zޱo]{9s ge#EJ'm)l?ޱ}{NX1zޑwO܌ω&?=Y.X|+N}šcСW'YʼTcH|Ej"rtי*)>"gVZ6FkAI`!՝E(d&ɊǎF/zX0ѓEZ^yšckD^ !%BDVŽ@Zf^6j e _v7 tY1{* 48GUw }Vw\amނެ#J'&&o LHd;H:o,:wŢE%0r.@j& #4؛%˴ z5Gc!$|e7-ڦ]I5S(D !֏soΠ1Wޓ#A1Ul֊69ք !ngV0fxJskV*pq3\Ȏ'G XC/+:B,#>$`Eʼnv51"RaDw1fQITȮ`]\\,"` 6ZU"{VO#hLuH7-/d 咚y)cbn֠Ģ2B>ѧøk>:HT|ES%:Kn\,dP`DzؘL9בn5=f!d櫊F $mpe9X2o:o@ B>@Ye7"Ki ZTf~J`%e>|FO|=Y$an~> 3I.fבVc*As&2&Kˎ B$TFc;gr7٧m1_R-( "Q>׵S͗2{1uiH&c)ʵL&urH9"L%b6r>Qil.'k& r;E4QhR#GєF2VBIʻ\fɑ[D֭@ PGg֋9mH -K6StӈNF^ӿKYOzJ]ՙ)32rmLHJ˕ٱ_#N6ΚJ)wڴWenfm4At3.c G1/x;~O23$RJYf {Y$Vk1yBѤ:Qk_ƒ1_+Yw*D"pkr47|z-ر%]#BH\"4خShQM%6ɹd7I'NQ( ['F;z5kbLϜtDY)b▤mF;k(Oo~|W/ ^~'fW/>6>֚qo}s6=φMue#91_qŕ|?e1~O}ET2 I~`=aG~G;M(lKLÚvS'*+.$`%ӝ&1iwN瘬(*Y3dјBfWV V%^M`::5$J4o.}U22>%η 3:IE`^O,&8S8\E ]LWHD D25ż=+:SYvd#J~ m7M t{Vd dm+vJev_fz)8riaN/}o|^xv?\bhL_awm7܍$PO~|yHk?XppK$m`m/7TjٮMO5 fd b簌.境]l_Jˋ4\Kv~AskUC2}% CJH5K|p%laa _[Ts,!!o~[K<켁'JA9J&iF-6i8Xs<#5=c2 C!o欮rަsp"1fu:8ļpr6&RxzmY=﹊ /|ec֚5VgPDݻy[2~rO|0 EU!m{=l|ٳO\S~m:X>}wJY]e:|k$+/н>9sbr1H˷vё`">CgTxWՋ)|vTWӤZsQ"-9g!nl#p\N0 ޱ󖷿( вq2yVG8<38fcpT߷B.I8Sش .a`F?.?r_wwicqy's)'󲗽xǘ> .UmHSBacU5F;s4.Lk朣3ZAH $eul R]ѷhE'J'e4ʖP.iMMM/&B9%R#œ#YӴ@ c%7M@D/'q\ӓ 8`>B. Ex]_i7RZ^~'w2 e{=*KH,,Im=Lu5qE;(iqOP&*)1#I|7nH*uҊ&1&fj=Ye.<ĢEnu|LHMH*K]".rBH@HqSbsâ5쫪A1Qגr5-&]%L}`mZfݖuMc:LdÀ1:J! %jݕt1Wkoħ&BDI/%k @ndCDEK2l j/~6:BchP_}}˻Q:P ĴZJ9yZ$CY2'SI煞YF{jMd1%uJW,1Bgc;]b qi0\Q<_0$bJ[FqX2)H{fg|9 -zO=著J,lu@t 0iC[暏<8B.GQ5Ղ`5ũ5Xm3]ۃLm-ώIcLƠm mhix%,WnS̟7 '=H ұ4LEbnL%ի7FG 6 غu뒯q_?EGĤܵk7x/bBB\N:`lDӴiUctb O &y$Z8ab:oگYNh:ݮMLu1M&2,!p*xÛ_mϢ!&~?*ʘ3X:SSxH&55w;vi F,P6QGmc2ǩufRwKx8y_>5l wDXX_o&GȮ ;& sg'Snv>m%~uֺMk Ns^Lg4ȴhjn+DG(X&f$ԩ܊u^<&b˻(bq q{EfͰyvi÷UkG0ls&ODQĪu#ut2->O 7`0ɧʔRʹk?VgqNUJI/R-FNr)?jK_8FsJ`y+('t&mo`,h7=!xagh^7 -wJ=L]SLn:{YuMPvn'4dRsw w PČ㡗\r)}12qt<窫wXWg^xx@"o|__1/]i˃&97 t-p,2VgΘQJ`'(YZV#Ϥ}+$j6cMw6q_@IǐY ڟ+z>6 -6Ye*SMy!հ"4gj:6EOS-Pinϟn,I,{j41Av )S8xRJXz5>BJN8VQ[6a..I۶sW??[rt|/\Gq ]&~LZY$>??+_6m:MXd 4Z}´sO49I׺tLZg&H9i{Ҷ|l{FӴ{şEr!b*Winܰ-& #p"jWUGE |Vmu6rd.k"r)FdϨc6h=s-R6N 3f|1!т=έ@Gsd3'lc^.r{H#B02ncsץ2]ԭn>-~[4nDe9mڏFff^kxq|o-*6Ak{n C+mtHXA=D[Hj?)=UN>$=mZܱt3S.Y;~c۴“K\f1ɻ. jl?gۖLML'sR9ӎ(JǶg^RضéB!_hE-0!3Umёi#뎘0Ub::rs;)ס ![d>}[ZD\QDCB&Y]-+,.|5j?O>>ffjwǩOկy5/z氏y޵^%liq}v6"\y';]w9锓Qa1DpS*mX#!A$jɗSjR?Xt)[RgJZĊ4 HE5Y*iK A; mP<r88Ǩ1H)mŽKp^K.KodI} 98 J+O&_XrsWi2HsA+} ~|wٻlr('mb{ ,\.ǪLLL0333bNyԿԂ/ym͍ y* q-v)&uټ55bkbw4B/^EgDymKfg>߿;rDEUeYT** k֬Ȟ,8Mo] {Ww!L\ڇyf 'xX,v-M$"/cFc+r4ϲqvzkww"lLk&U u%E.Sa) U LčX{r(p'Ajp4n`g?)[>LQ^opK^NǖPԛunvI A)>sx !M}OX1^L6]_q13;wl#gH)) 8q,HG(:2)$lc3mF5n)Zyk_Ek;cr9VK_֞v씅C=G?| o}ZF322iN$b~/| Qo4p^<"I E?|>zGIBH>ĴFc83b ۶p'>ŝwzAb!_`ݺɟ&V G{z9bε 䤓O?| ՙ*7 qZƗ(ꁵ'`jy6]ص{'ws;u ַ֨x$JE9{ضm+FO}Z%33(0P;L?0W]^~wX$p9a&ؾ};{AY6^rIof>cYVǻ0ިg)jTU=}VLYdAHõ>ء~mfgg N^GAgff۶1ưĂcsE(?wk^qJ_`|Ȅ?nömR zAڵ򼋟K-h4ַÃ>H>z3N4z|>}699X{r9n&jlFQŽ0K.=5˴GTo\r S6`+_ݻ;Ӧ|ǿgAK)ֆnMH>^A"75m>~{KRgWJeü}Whl=l8D~aYZk<_EN>VK6ͪͻ/ٿǸ馛󌌬߸ړC)c3Z]l>x5wߑi6կ/>!lFs4 TUnF.R"u17Bp9Ug4jMB.X*{"`bb=\u՟?j[$?Re}JFIvž}Xԧ˱ZGT\t`L֦7qqB˱x)l8X{rhpy֔n!gӦ"XVl:q)~0d %o[*)s_y^>: 9zj*8LjƲ,֯o(M~@gp]sb$quwTdnMOz:6a7aB Fyy;+WK*nl6ׄxH9w9H5h3t'@I՛ߑR)ܜm;.Y{r(9y׋1(c%|MM)coo4u X$?$"T-هpq큵'mZhl *Zr%SSS|g5Ƕ'[kO^iYT{Gq-*c>uӟR\np==苬 'Q86o8UX,X*rc r{`ﭟFDtaL-Zk6n<OK 5^'GX3rh6hY@8.iYJe۽ßUf5Tų_Y{rJ\l4rp ]"_%87)qdd|@yY{F}S 9i\tE|k7P,qo|@m||>OVcݺu\p8s` ^ps/{T*[neцpZ:,jfx_ށy8Rn𩧝[*z`r1i aqmbh:W&N]}?B ¢׮^i[vA|b_+ٿfll ۶m{`Ws).F(7}&FVass4 45]R>Q2j[N"BY+Wa[vOdbKғ\c_&N@bdddn! B>կvu]F[)Ue9c0CK .z'OWپc;+ؾ1jRʤ+cĖ-[XbQ<씤wIENDB`./Listaller-0.5.8/docs/sources/images/icon.svg0000664000175000017500000000512412151445470021362 0ustar matthiasmatthias ./Listaller-0.5.8/docs/sources/images/li-pk-parallel.png0000644000175000017500000007037412107256364023237 0ustar matthiasmatthiasPNG  IHDRQPbKGD IDATxy|T$a $$5PAb򭨠{Q@E["V@kQ+BU}ZmU|Ee H>?Nvf&ed>2ss?LsϜ{ l:(u"""UT!%*6BFDP,1!;; ׹sg6nQ,""qB Ԙ.d񅌈AD3%"""""A(a B HJEDDDDP,""""fI>tJMMe,_BB^d(aef[la9TŒ~!{qYgLFFF"777щ0KKKK;(M 뮻hժM4/~(]???kMҦMNzT/y*?}oNaÆdggV(> G}o;vb Ҹ+KDDD\6`VPxϞ=6qD;Slĉ6h ۼyѣn(];s=׶on۶mW(rU-[ګjoƮڠehlEbfv!kذ9r&L`lÇ =ښ4ib[?~]G֠Aԩ=3eB~kԨQ4.""" lÆ ff֩S'[re۶m֭[>o׮YUU:mA E=a2ffo 0<%"""iI̊lڵv믿nffIIIG%>tD;rHÇW;1j-?222K.o-;@Gk\~2999ֹsg[jUJEDD$Ҳ ͛7[6m,//:t`[l TNV^}TyIII;wNU(QTTdͳ6m*֏քG}d;vG-S,"""M ٥^jO=M<نjk׮Ç۲el~v[nnm߾݆zTy}xo[lK/:U/wߵ-[.KOOP ZYHK}3gm/^wflBL[޽ЦLb:u  '`s)]vUWYrrjeK.^zYRRuɞx Tٳg۱kIII֣G{JM4RRRLШTSZyXHׅ#6dggaÆ !;wfƍ}6z]u0%"""""A(aQ,"QK2"" 0YDDDD$%"""""A(a B HJEDDDDH:XnK.%''ŋk.$&&NJJ ۗ^zѫW/=X> A Hټy3wa…۷m .,}L~889csхGـegg[4ӀSx-08h4->d-8 x X/c{֯__M.mڴɞ|I:tT~5%''ۙgi>Y<~]DDD$ee١ClܹvZbbbj?0,^駟nfͲv)a u CـlVXa fxb馛ECD 9x4qtgv죺9 ppmDġl%3gڞ={"mݺ~a;*'K_K G*p kx!#"""q0r5zv̙3m֭u[y0`%%%O~ůCU&6/d%Z.dDDD$%#)ז4!!g<[iӦ"[f͝;.;餓*'`kʚG,DX 7//dDD$ |^ RCs [lI^hӦ ͛7y$''~vݻٲe 999U.{7]︄RE@w9(+Z%?$O~LϞ=ի:t@+-''͛DzeʯR{}ZH 7p2*~W| .ɫbBFDD$dJ>J-pV4q n{k\v 3: {}qKl x^JEDf 0_>nI<hX߇7L DM2DjN\veرjUx_Ҷm[y ruHHH --^z1a„?O5,p ??nI|0xX+sS^/\Wt""""aXFFUPx6j(⋫UFUFZ}֭[ۋ/X庡o>[tr-ֶm[۰aCvX{ϋOr 4m>%ڷZ'ffvMٺuϷkԨ <ضo^nAAzֲeKKOO~ok{챐=p]uU֤Ikݺ=C;rM0233-99نnyyyG߷6m|zJ{6jԨUW(q?ֹsgkذ>5ku4h`={e˖nsA/~a͚5f͚u]gPO>i:u*>''' ahco\ X]o۶^U]vܵkWCB\⧔5({< pWq7Kw&tda"""j0L͚5K.Ķmfff~ߚ6mZ+611>.]]wuԲP=rHÇWHZJos=g-Z `ȟoƲB>Pe;WP  3vcL".)Kw? kr<;u$vٜ9slϞ=VTTd{~U5̛7oc9?VܶmaСmٲcz뭷y[o<`_:{]y!WqWg^۶mm͚5WZem۶vT3a. n5ko G'йVzHWu0h|M;t萭[Ά^aᄏ6~{6eʔ˽좋.;v؎;jl˖-Ç= ZFF͚5 $:G﷥Kرc%Nܡλ[sϵ۷mvmU`j0Gq[w[z7xútbֱcG{+_PP`cǎ-ZXG[֭[{6qĐݿ5ʒUV6y m mʔ)=?p 6gΜ_X۶mKk/4i=k>b'|?BWueށl̘1j6f;p@ $dW^ 7@soB[j&.ؙΝ;N\C~zCK-[d׮]-qWY ` ЪܲB`1>_\ ""1Eڋ#z+wf۶m7ᢋ.:$/>g}pqõ <\WZD$&(aG֭]v%=='zė"`) /8_jn ދ`EDB&m V5ɨẳ)e=l@D$(axYB sZj/Φ`-p\ȇ&"Rdvp[ÀW)?5hI""(a5Ǹ r\;|tI  SDf&KpM0x p~ :z%"" O-@W`0hQ"RO)aX- 7Kgz\\D֔0H* ]2-r .^ Ew"R """^`:q<`-0(>aJEDY뚮#oθv3'F:3` o@rF3` gœ;^r0G$|協}^>N0&z\ -d O7D0L[I3a܏HF ,a0/EDD~' cDw w З$cL%nأ7F$"".,Y~XD +5O}EDDDB0dyDZT%R 3!57S־x2 hw*n&{K("07>GHGcDcJ=p] gk$fN jro+ 'P7MCDDT`3Kubf) 3 j2$ 7pej5Zĵp_ pMb 3D,z dKDD$.-n*aNAM; ^/ӈDDD"j~ױƫ4ďvzD\\q,5e Г5w%6?APDD^J>}q,u pDGpe=HDD$Ln}m=6!ax j"31e@s/K퀽/ <%a֠&|/q@6Uòr)%33zM6q'gpb] XvS$~$h0 w_DHkgDHTj֬=Ϳ#F H\ %uq5qÌkP''O]HfyH?~|f%"s{K}VGO4oCX.܍_C J$U'iV, ˋO287A\?z']4.2y Ȇ^%BM0`P,8x3Р&6=ADPf%"QO?5i OG{p } J$U4+a AY݌ԤH<Kˇ@Gz/ff%"u-i7DZģ|`'noT.y|>m۶e٥ƏOrr2JTyo ЩS'7oܹsi׮6m`ƍo>`y8p SNeԩ ɡw$%%Mۃ>HVJcɲAnn.lْorP^`1yK^u2337/?u@XX;Р&r͵@ﲜkٲzw}ז,Ybiii+Y^P^?KZǎ.sZ׮]mv,ff/L̴?N:$>}:tx=/yܤI1cڵ+W_}=3ѣWܗ smC=/u>{K.c˜1c HՓ 4оD10Eɝ[`)~OF.KffZj_|AVVVɓ'?]v-磰*o|9rfFQQ*z 4"|>SLO?eڵs1? _-*rr),Zt{ҤI)c3g3g$''QF1c Ο?'|3㦛nbȐ! tn*>_ āhҤ G*Z/)M4]RqPT~: ~+cV1lܸ-Y-ZdPV#\c*/OKK7o^^=l…5?_|,ffK,KIIKى'hӧO geeْ%K[r7n8-++˲ `|4l6lPa^}T,mPbܹG0Z?Jj#ݭ܃S 7 E'fy"DK^(~xaԩ191fϯ~ k-R'͜9kkbfѲeKFq[y[3;,;g֬Y\{;Қ￟g߿3{l%mw333s636l9眃A 䦛n{:t(zcmR>?0W\qO?t;pϪ@& }xdp Gn׋F?Zݻi߾} |Y_ُ5=HƍswVb[_1h |K7xHm[9olVFD9nj3JK̬nm턄;8?*l`1 |t2 R, *-oi^1fzhD9s'U^sfFQQ:&M:x8זwԂf+IsAA|I ЩS'7oܹsΛ={6iii\y啥>j 4!.YV~_L233y7*Ǔ~e;2uTNʠAɡw$%%tl;/QAA撛K˖-)((e8U9;eJF=Jjuy|,77$> 2ZhQRӼh[ƪ|6qD+ 03ݻlK.;שS'l6if̘avѣ-\4 4/;;>{Jޖ,Yb7z6lh6l(}޹sg{Ca./--rrrl޼y@ؖ,Yb)))bK.53O<ѦOnʲ%K|KeYYYVPP0pSL`9<H6裄9(a3% zry[qƥ۾ka[=c7W;awl)Sؔ)SlРAff'\Z[bִ̙iyb)^JJ=ڮ暠UuL9dq#ކ#]0%q|lI޻R#JGwFa}%CD\׮]裏h׮πN,"86)aP,"Aຢ<\i4"UP,"aYD7p>6•0Aś3J.ny/"QBI!ـG˼ GĿp%EUs_H=YD ܅I 6%ܯ׀a/^ ӾE/"K, 3gpyDhbO""ȑ#Yre5oޜ#GOjK/aÆ^!1dժU^P7,kN8pDE[ҜL: |K*iD"2vYذaW^y%}I$8\ Er607c2jpsp=izH$̥g/x9{ Rqy0[]^W_?wi];C@_c5vgYoC+C#MRT0'''۾}*̣*--~_λ۬I&6~6lذ )zs̱6mXJJqֹsg[l}ֹs啟9yGWy'|Қ5kw-逸tKOOzZG 3c݄k)")Ӏ=E$"xRyҤIa|O?իW[ӦMG}tԼʏS^Jb,!!:`۷zȮU'P̡={Z .MOOEUy間c999^Xw G$ uA{72H Pe|g$qƶd[hQ7XlYӦMm駟֪ǙpB+,,43_~233 VZ/<3۱cGz mŊcYZZZm%̕cOZZ߄9X 'zH,*i/WkzH&WU0]g׍7h6nܸ:IǏoM4nN^{:vX޹s|>kӦ|>۹sgƌc5KPAI ͛7[n%dd*OZZZQM2B%e 08)PDbx c=FMj\U0KnG"kRg}ԼI",\5%#D9S7u=46؁:{H gp??E$p 8 xpDb&"p$3aTˬer=Ӥ]VݲͯM92pm/ G$׼ Imvq欬,ɩ}&074H-< mD}Kʵ̪]mFϞ=\|֗j{7I#H/R=7KN4tU$u+ߖYmTafU6#(YVy74mڔ;3>nFZh>jmXfΜIi޼93g zdeeKc98馛xꩧHKK2 /䱿cW޽裏ݻw$$ _:;q7i4"uD#ŗdhsnK*WQjXoTavgga.G(^8бUvƌ6b+lƌ FM2*h|;zH,:߹HLH% sQ=6ިt58< فOO>i5H?e j$"1ʄ?#K 6j^yQtWm+?7jff\s5Fecƌ)݇QMfM4)h51b1"h|Cym˭hPo>CM"#4ҟT.a6\5tp4HdRּcz(7s7u%N2(0X5\[3 G*)z^CXW㸦?fj.~O?lP_yHYL6/YD9u 9uU!p㥭*ܱL("hK;ԉ҄4EԶ*%.. &`3@\10X E`pH}f6[.:'À(unUp7t׿Hul~kG\/ZI%Ip:OpBҼC7|%5U 芫u6ujۗn^z/R3_O(RcK:Jm6o$5ETKZR2FY ʌf|4HM41`DZHH>_Y$:te]Oƍ֜߶@ĪH k׎ ߅}uU@URop?TGSy{zWm_Ec5IZf8aU&[n .\h?OlӦM~C_vƍ￷3˳W^ۡCO> . qի-^ lƍvV-lذasN۱c?o9񥦦*aD\;Tl9n4X"k~\q,&̇0`=toi:t۷W;a,Ye˖ gZrrrmmVСCT}vwۂ ᄈjߥK[lYq;`۴iSF{UaǗYvy9ֺwPXDbͭ6DZH ؤ 11Ѳo.?N^xF eeiӦ<+﫯ѣG[Ϟ=I&i/r'%%Ç1[hG)}~ ԆY4W =\Р&"ՑҀ6EU&cǎ|j'o^xۻwU+a.+X˖-C.s!0]O֭mƍׯ_omڴ fI#yh)( wӠ&" }~.81NK|ֳgOۿ cU222߶|۰a]uUJ dϷ~gfͲ;\iӬO>d;|mڴɮٺuk7o^91^6|p۵kܹ.RnY$RqC箤,q T_!=*j"KOq'=EbHIxG He;(K-ҳo7F MwPEMD9)aL#*(KjO0^c<܇=Eb(Y$*DssWAMDeM8JfF"%S{W7\`U3. ͏8rJfTһ*mx7 …$ x x/AĀ'(q,|7HuEFl%""""қUT,"R[˗/gԩK8O~ݛy7x#+W?W_K. {"83㏹yIu\/.*KYD̚53n8yw8S4hqX!5s{7k֌7|?Y"nj3hРO?4}!IQ,"ڵO۶mM63ΠgϞ >_uzڵk9Yh^x!}0ңGn)?5 ={0}tMƮ]> 2VeSL/ҢEY7ocǎdddsZOڻw/w۶mk:UIF\P HsqFNJ֭Yd C,Xes=s=@~HHCjՊ]vqZHƣ> վ}S iƇ~X2'M߿?EEEw}dggswcǎ,CjW\qc^#QB 6l/K/_νKjj*8p _|1_~ee|> '|BNNÆ #//)Sо}{*֬YC߾}%"UyILLGeڵ^#Q@ ә8q"֭nqƼٓ_lݺZBG IDATsgqpa׿r'2|.]C7N>dj 뮻Gn"~-9s&0an6]޲e˘2e EEEhт;w]?"ձ}vuF^^ ,g?!E'""i׮ӦMcݺus=tؑiӦUN:9sb FM uHZnqJ/8%>ը/䤓N WLZl'xaի9cCXre^O>n񩧞LFjGI/CsϭQ"tޝoFUo5fe˖YvmZlYE>}֭)MnǕW^ɪU9rdCDbի|Lcƌ_,pLVU-j\G>sϿ5*M4I&1WW\s=z8snfG}֫nߚL-GBBiiiՋ &I(LB;v,۷o>ٳ7n[n:񣰰^!2Oj[h*3Lo]oΝ;KvidffV;.]пC=Dnݘ:u*vY4:u*IIIL:2Cب m۸馛ܹ3 6E 2<֪jU22p@/_p%B=_xUUFm9rT>S.… ֬YgYz5yyy̘19s攮vZ:,.B[[.B<<* Ig!C A!(HE,(H`Fa , A%EFȈ "J*5 (&š}tIeyUuw:]Ucǎ9,/$$|ø{U,xlp֚64 X|9н{wn֢N y(6lW\\}m߾]  uԢE IMMSȮ]t%"2l0Yv}8??__[j 6LDD˥}xbС;,r6(>}Zbcce̙#%%%rYyeРA.۩9=zTZj%K. .ȅ dҥҪU+9z2Ο?/s̑ݻ\4Lse׮]@z0ҥK/K6mbeڵRQQP@n&=zKeƌ#/b/=zH^dӦMsǫ 9y'd޼yz6.ϒʊ%00P^oחiz披/Kdd}[[$̭[mӧOWolHyytQo.">߱cG)//{R֙/>K=G6ɗ޽{eUN/\`/㋄YD}?ҳzoU>x衇X1Fo\݄YumLө$""/^ H|BBdffV)[Y4xq"2h yꩧĉRVV&yyyfׯWmډ'0{ϐYDg{Nu}l 뮻믿PIrrGqGyDT_ݺuf͚cfOED9CݝDFF&Jhm[$_6ϟٳgo~z]_g+9..NRRR&N(&L$ի۷޽{/^'f犿jR1a[322䡇_wmʼ,-WRR".r4gY`W_ kʔ)Ҿ}{{lڵ%KjY~gvߪ|±~ڵI.]dœ]fOשv3ɓN>;ӛ0Kjj >!@tf9ń{%VUz)۶m2]Lwݻj]HΝX:u$w(.[ܱcG_m^$"Ǐb")**"'N/r5uLU^'?OʯH3/W\zyʖ0|nm{~ AAAu¬UVKddZJ"##ae+gg?(}9\+ccceΜ9^'#wru-1cȸq㼺Ŗ0۫uZݤI_"x0YZwיi>;%̓&MR=OII{ʉ?/wqf 2qD9yd$"_믿Bԯleń;f#+ [oGyewXbz ݻ7,Y`tOuUgggcʕعs'.\L09U]IIIxSO}s`Z~k_M4q^… [ܹsqw`۷ô-["77ڵS79LE˖-,CDp ?wFllr/???ߡLyy9 mչ/00 ,2>,, ~~~8{,6mڄo/_F@@0}t`ݺu}$((9W>Za 9t<䓒Pݕ̛_=把 4hPGUY^^ȩSDD$''Gkr\QQ!7n>}mѢ,XJV݄]o:X< +V%"'0?mVfΜ)'NRtl޼ı:#<"K.2^?Sv!R\\,_vmpB]ݮJ9(ɓɓUQYDK%00Pz%֭s(w^%44TBCCeРAUww׫Sݱ6l2iӦҭ[76mÉ'|9effʐ!C쟱l &>W HHk]zs,rw~"Y.QE,Ru=={S<ѣ2vX {Çw6f',ή\p㧷kLD&ޫՄ0oo͛73fH~~|M%~|ᇪnܸQz%"MN`D3'xBڶm+fY"""dȐ!lm룏>ߩ_UQQ!/8 %KnV<ݧD_???5jTR*nLT^^.cǎ߈f6G\/fp}2ɱ:O8OD%ze_%TF؛r5}w7aMm'"OD'k֬_~EɓOw]/_LDŽY={Hv_˗/kW݄F-azLw_NcƌIII_~Mw syy}7iDML$?=QGyDf}#fw'"}<.rO<{Ry/~bCou놣GVطo:wlt(TC͛#**P ???bΝHIIAdd!(cҤI:u˛K4no̙5k&MW_}룆ȑ#ԩa4(ZN\ f"F(//r oG:ѳgObڵ>|xID5%|JQ#4uTcС,7ߌ z)9sV%".0527nİaЬY38pѵV`Сشi͛7Tz=DD`]t O?4`Μ9,ʗѺuk|Ǽ&DDqIqĹj gy0$""xIQ#}v}0D׮] gX|9z;v 00xH?^ADD jœO> ,ŋѱcGdeea֬YFCD{ٳg#55r dtH;v஻?G~thl=L=z@YYoߎxCr /`Μ9h߾=ك뮻萈ȍƖ0 "ǏGII &NXe@I{$''Qa&"j^yOBTT8Pg{o?ݻXf FatHD03a&"jN:.]ҥKشiltH.]I&!<<{ETT! -a%DD ĉq%1'ˀСCQPPdz# 05@ѢE  XZ%i|@  Jnp,DDDDT(9b/ !v h3pBDDDDuh5PJc!""":`'Dhp,uE{\1X@M>op,uPy1BDDDDIf0K] XP @/cZJQ- J"Ocڿv38"j@DAс5f~F@DDD.u9 a&.%// ;={6222?15Va&""0b52&Ɗ 3Q>I30a]wf"1a&""4 3Q=8L &D`LDDT0i&}L&D 3Q=Ĥmٲ_5999͍.j#>Ƃ 3Qt=.?CyyM<@_YFcR-,,QFx=z5J k&Mض&nD a&Fd29H5L7ߌ h]l{o^u 0w܉޽{;IJd{-òe<6aF5{=;/5X{ ,/""_Ktt\xQdǎ9zhc ]vr!ӧuz=DDD-… e… ""YYYrm|zL&eZVVf;wDDDT-//wXZj]/jjjZx9tfjԹVU̙3Uu /W"%.&DDD-Liڴ4mTDD$..Nj:LpXX޽[6mTeٙn*i K.uV{%00Prrr4,TWIDAT:$̮WYm^WEO,۷?Jz,^X^{5z֩o3t۲W_}U-Zq% &iiir}Ȯ][nI >}˴iӪ\kXdUꬼ$y_}tQL&rԩt>SҤI2efy]ʱj%""B"""엍]m+<:uno~ٹsggddhCDdȑ|QIDDSK^^,ѱ՘@"!jPf""""" L40a&""""@QQ OV.,!DD0a&"l20Y~aٲe^OD f""VB@QKu,sV^eQńkVd2aڴihҤ ^xիc嗈Axx8֮]발#Fh&o\ι^Wu8۽{7zlWtyZjU;bb`Æ .P[jŢVNo}lQ}KDDBCC> HffHLL|'uYl"YYYj dC^Wu8[%==]5*>qjŧo^>*gݻW8Ihh&q yKW/j2U^^0J6OVǙfޙL&eM|0;gfY\ms8zSkjju{W^CI||&&D5d=z4lb Þ={yfr~~hlݺaN:a˖-(//GEECy~ЬW:w˗m\Wyzs=EGG/_uX _|EBDDDTWa.,,QFهO.2m4fUVIfdرq_}tQL&=""SN`z]l׮]ҭ[7{yZ_^"""$""~9uRU99R ]a&9uf"bt,D5&$$l|H4 """"" L40a&""""Hf""""" f "  5: SVVftD +GD ]>O>VLD ]:_w- ,`~;u=cF y(6X eX Jb@N1e ^HDDDPBuO[gl# 53dhPe;ժנ$B[gؓP] vʣn288 %imp,DDDD5.a( cN(w+Xj\(rz<( F @/c `'y?o$;/ _7Cybnp,DDDD>5Js@PG(ү󻉈z78L>=} s&AIn68j8ZvGc!"""Ǡ$5" aP"]]mCDDD0mUƷpJR3V#Bپ2V(Ԁpx=J(F#F!(ټ:N0&4"""kµK/# !$"UL'"""xT^Æc05 ۶mC߾hn Т;f""""" L40a&""""Hf""""" L40a&""""Hf""""" L ɤ1a&z&k;`Bj]=LFK5CD "-&Dd߯ɗZY_DDDufFExW|]vE`` bccl22&ɡ'CYf</H֭Ons6l0v;̰Oj%"JBsϩNs%<СC-""RZZ*?/j=z>|uzÇ].{ɒ%Ҷm[oI(5v9}a&_'~ :T"""CqFel߾]+EL&<ߛf{ywy 3%NVӾ<V;#""WѣGۧV[nYY}!1u=yW[vNnW[mW0I50TTTȦMM6ڵk'?^***… .^ū 35x뭷0a„*1ӟO?.\)SL_ h"<3i8}ZLq{dNN?֭[522'Np/֭r7qV֦M+'r%11Dii)Deeei͛7Ç!88 t3qDL0ǏGYYߏQF-DDDFv͢EdܸqZh!X?.#Gt޼ysԖݥKIOO͓˱cǤT'#GԌyС'yyy2dygu5?tItǩ.+{gqۮV0IaV{9o7WN:l.]͛Ν+M6u(aСKtt,^XWsyyILLH׮] 9{.Y\QQ! KXyoG}0Z/jJBBBdܸqRTT;֒INN-ZHxx_R̙3ҹsg={8eqEEEcI&MUVpB& scf?0IL`L a&""""Hf""""" L40a&""""Hf""""" L40a&""""Hf""""" L4>;vL&aQ bLԀu]F@DD0a&""1Z&j?2eM!IENDB`./Listaller-0.5.8/docs/sources/images/listaller-work.svg0000664000175000017500000022132212107256364023410 0ustar matthiasmatthias PackageKit abstraction Package management system (APT/URPMI/zypper) Listaller (Installer) User Internet (HTTP/FTP server) Listaller (Manager) Application ressource (e.g. /usr/share/applications) IPK package Command to uninstall an application Submits IPK file Dependency download Reads the used package format (DEB/RPM/TGZ) Nice installer GUI Files, configuration etc... 2 ./Listaller-0.5.8/docs/sources/Book_Info.xml0000664000175000017500000000175512152000765021034 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Listaller 3rd-party software installer Listaller 0.5.8 1 0 Listaller is a cross-distro 3rd-party software installer, promarily designed for Linux software. It is built on top of PackageKit. ./Listaller-0.5.8/docs/sources/Listaller.ent0000664000175000017500000000017112151447462021107 0ustar matthiasmatthias ./Listaller-0.5.8/docs/sources/packaging/0000775000175000017500000000000012151473537020373 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/packaging/packaging-instructions.xml0000664000175000017500000001771112151472744025611 0ustar matthiasmatthias %BOOK_ENTITIES; ]>

Building Listaller Packages The following instructions will help you creating cross-distro IPK packages for your own application. Please note that Listaller is designed to install applications, so IPK packages will only install applications. Packaging shared libraries using IPK packages is a very bad idea, and although it might be possible, we don't want shared libs packaged in IPK packages. If you have a shared library, you can create a native distribution package and distribute it as DEB/RPM.
Prepare your application Your application needs to meet some special requirements to be installed on a wide variety of different Linux distributions. (E.g. it must be relocatable) You can read the application development documents for more information on this step (see ).
Set up the packaging info dir To create a Listaller IPK package, you first need to create a directory containing information about your application and how to build it. The directory should be at toplevel of your source tree (but it does not have to be there) and it should be named ipkinstall. The directory has to contain a pkoptions file, which defines some options for the package build, e.g. if Listaller should try to find dependencies automatically. A minimalistic pkoptions-file might look like this one: The Version field should reflect the IPK standard version this package will be build for and NOT the version of your application. Other files in the IPK source directory are DOAP data for your application (appname.doap), a list of files which should be installed (files-current.list), a Makefile containing rules how to build your app from source (build.rules) and a file describing the dependencies of your application (dependencies.list). All files except for the Makefile and the dependency list are required and have to be present. In the following sections we will show you the basic stuff you can do with these files and how you create them.
Create DOAP data Listaller uses DOAP to fetch information about your project. You should already have a DOAP description of your project. (it is required e.g. for all GNOME projects and many other projects use it already) If you don't have DOAP data already, you can generate it, e.g. using DOAP-A-Matic or another tool. For more information about DOAP, you can read this document. After you generated the data, save it as *appname*.doap in your IPK source dir, where *appname* should be replaced with the name of your application in lowercase. Other options are linking the DOAP file to your IPK source-dir or writing a script which auto-generates the sourcedir when you want to build the IPK package. (if you don't want to store the DOAP data in the IPK-src dir)
Create file listings Now you need to write a list of the files your application wants to install, so Listaller can add them to the package and copy them to the right locations, when the setup is executed. IPK packages support multiarch setups, so you can define files which have to be installed by architecture, using files-*arch*.list file-lists, where *arch* is the architecture these files belong to. (e.g. ix86, amd64, …) If *arch* is all, files in this file-list will get installed on all architectures. You can also make Listaller pick the current system architecture and create a package for it. This is usefull if you don't package binary data which is already there, but instead build an IPK package from source. In this case, the file-list needs to be named files-current.list. Files mentioned in this listing will get installed on the current architecture. This is the most common case when building an IPK package. An IPK file-list can look like this: Lines starting with a :: define the destination directory on the target machine. You should always use a Listaller directory variable there. Absolute paths are possible, but will lower the trust level for your package and will make private package installations impossible. You should in general not use absolute paths. After defining the target directory, you can add a list files which should be installed there, relatively to your source directory. Wildcards are allowed in filenames. By default, Listaller uss the directory below ipkinstall as source-directory, but you can change this setting by using the FilesRoot field in pkoptions
Some finetuning Do some manual tweaks if needed. The documentation is not yet complete. You may want to help extending it.
Build the package You are now ready to build your IPK package! Just make sure Listaller's command-line tools are installed, then change to the directory below the ipkinstall dir and execute: [earth@sun/foobar] lipkgen -b The build tool should now create an IPK package in the directory below your current dir, which contains all things needed to run your application. We strongly encourage you to sign your package with your public GPG key. If you don't sign it, Listaller will consider the package as dangerous and GUIs might show a warning message when users want to install the package. To sign the package, just append –sign to the build options: [earth@sun/foobar] lipkgen -b --sign There are also some other flags you can apply to modify the behaviour of lipkgen. If you are interested, you can read the manpage. Usually the extra options should not be needed.
Distribute the package You can now publish your (signed) package anywhere on the web and have users install it using Listaller. Later, you might want to set-up and update-source for your software, so all users stay up-to-date.
./Listaller-0.5.8/docs/sources/packaging/depscan.xml0000664000175000017500000000326712151473451022535 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Depscan - Scan for software dependencies Depscan scans ELF executables' library dependencies and generates a nice report for you. This makes it easier to find out what your software's, dependencies are. Listaller uses this tool at build-time to generate the automatic dependency-list, but you may use it as well to find out why an application has dependency X.
What is Depscan? Depscan scans ELF executables library dependencies and generates a nice dependency report for you. This makes it easier to find out what your software's, dependencies are. Listaller uses this tool at build-time to generate the automatic dependency-list, but you may use it as well to find out why an application has dependency X. It will also show you immediately if you are using Franmeworks which are present on the system, or if you use Modules which can not be satisfied automatically. Depscan will later be extended to support dependency-detection for other languages, e.g. Python/Ruby too.
How to use Depscan? The documentation is not yet complete. You may want to help extending it.
./Listaller-0.5.8/docs/sources/packaging/Packaging.xml0000664000175000017500000000130112151473537022774 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Packaging Creating Listaller packages and cross-distro applications is easy. Just follow the instructions below and read the documents. ./Listaller-0.5.8/docs/sources/packaging/appcompile.xml0000664000175000017500000000267112151472437023252 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Appcompile Appcompile is a helper program to build applications from source-code. It will automatically detect the build-system, configure it (applying the necessary flags and custom ones), then build the applicatio and install it into a user-defined directory, so Listaller can use the binaries to generate an IPK package.
What is Appcompile? Appcompile is a helper program to build applications from source-code. It will automatically detect the build-system, configure it (applying the necessary flags and custom ones), then build the applicatio and install it into a user-defined directory, so Listaller can use the binaries to generate an IPK package. Using Appcompile is completely optional, it is not required to build IPK packages. However, in many cases it might simplify build-scripts a lot.
How to use Appcompile? The documentation is not yet complete. You may want to help extending it.
./Listaller-0.5.8/docs/sources/Preface.xml0000664000175000017500000000061712151500130020516 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Preface ./Listaller-0.5.8/docs/sources/specs/0000775000175000017500000000000012174611305017554 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/specs/Specifications.xml0000664000175000017500000000202612151767613023252 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Specifications Listaller uses various file-formats and many specifications. Here you can find a description of them. You can also learn about the idea of Listaller and the project plan. ./Listaller-0.5.8/docs/sources/specs/package-settings.xml0000664000175000017500000000110412151531723023523 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Package settings file Definition of the package settings files
What are package settings files? TODO: Briefly explain pksetting and pkoptions, their structure an purpose.
./Listaller-0.5.8/docs/sources/specs/repository-structure.xml0000664000175000017500000000565312151767636024602 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
IPK repository structure Description of the structure of an IPK package repository
What is an IPK package repository? IPK package repositories are online sources for Listaller packages. These sources can be used to provide updates for installer applications, or to make Listaller-packaged applications available in the software management UIs of distributions. Repositories can also be used to provide dependencies, to enhance the abilities for Listaller's dependency solver to satisfy a given dependency.
Directory overview Repositories consist of a directory structure, containing the following directories: This directory structure can be placed on a server and referenced via an URL. Listaller provides the lirepo command-line tool to generate new (local) Listaller repositories, and to update them with new software versions.
./Listaller-0.5.8/docs/sources/specs/directory-substvars.xml0000664000175000017500000001136312151531141024332 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Directory variables Information about directory variables used by Listaller
What are directory variables? Directory variables are used in IPK setup files, to allow Listaller to dynamically place the files in different directories, based on user's decisions or settings done by the distributor. All IPK packages should use only directory sibstvars. However, in some cases it might be necessary to specify exact directory names. Packages not using directory variables can only be installed in shared mode for all users, temporary or private installations aren't possible. Also Listaller will lower the security level of these applications, because they can write into system directories and therefore could do malicious things. Directory variables start and end with a % sign and are replaced with their value during the software installation process. They are usually found in file-lists of Listaller packages, but might be used in other places too.
List of Listaller directory variables Here you can find a full list of Listaller directory variables. The first row contains the variable name, the second one it's description. The "Default (shared)" and "Default (private)" columns show the values these variables might have in a shared or private installation. This does not mean these variables will always have the value described here! <appid> is your application-ID. Listaller dir variables Variable Description Default (shared) Default (private) %INST% The software installation directory, which is automatically generated by Listaller. /opt/apps/<appid> ~/.appdata/<appid> %APP% The application directory (where .desktop-files are placed) /usr/share/applications ~/.local/share/applications %LIB_PRIVATE% Directory for private libraries (should usually not be necessary) /opt/apps/<appid>/_libs ~/.appdata/<appid>/_libs %PIX% Pixmap directory. /usr/share/pixmaps ~/.local/share/icons %ICON-<?>% Directory for application icons associated with the application's desktop-file. Values for <?> can be 16, 24, 32, 48, 64, 128 or 256. /usr/share/icons/hicolor/<?>x<?>/apps ~/.local/share/icons/hicolor/<?>x<?>/apps
./Listaller-0.5.8/docs/sources/specs/ipk-filelist.xml0000664000175000017500000000511212151767235022702 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
IPK file listings File list specification
Rationale Listaller needs to know which files will be stored in which directory. Because it uses directory variables, which might change, these variables also need to be encoded in a file listing. In IPK packages, SHA-1 checksums to detect file damages (e.g. if the filesystem is broken) or possible upgrade failures are also wanted. (The checksums might also be used for security reasons)
Basic structure Listaller file lists can contain comments, which should be prefixed with a # sign. Every destination directory is defined using two colons: :: /directory/name. After defining a directory, the files which should be stored in that directory are listed. File lists may also contain a SHA-1 checksum, added in a line after the checksumed file. The checksum option is usually only used in IPK packages. File lists used to build an IPK package may contain wildcards. It is also possible to rename a file, by adding it's new name after the origin path. Relative paths are allowed.
Schema This is the schema for a file list used in IPK packages: This is the schema for a file list used for creating packages:
./Listaller-0.5.8/docs/sources/specs/dependency-types.xml0000664000175000017500000001321012174611304023552 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Dependency types Description of dependency separation and handling in Listaller
Rationale Listaller distinguishes between so-called Framework-dependencies and Module-dependencies to simplify dependency-solving and to reflect the organization of packages on a Linux system. While Frameworks are provided by the distributor and are hard-wired into the system, Modules can be installed by Listaller from 3rd-party sources. In an ideal world, packages only depend on Frameworks, but currently it might sometimes be necessary to pull Modules from 3rd-party sources (of course Listaller will query the distribution's package database for the Module-dependency, before pulling it from somewhere else). Modules and Frameworks are described in small textfiles, which are shipped with Listaller. Module dependencies may also be present in Listaller packages. If some description files are missing, please file a bug report against Listaller, requesting inclusion by default.
Dependency description locations Listaller stores the information about possible default dependencies on the filesystem, usually in /usr/share/listaller/components/. The Framework dependencies are stored in frameworks/, while the Module dependencies are placed in modules/. The components associated with the Framework/Module info don't have to be present, since the description files contain all information how to install them. The Modules defined in the system's modules/ folder override all Modules defined in Listaller packages which have the same name. Frameworks are never shipped in Listaller packages.
Description file schema Framework and Module files are simple textfiles with the file extensions .framework or .module, depending on their type. The file contents are similar, but some elements are specific for Franeworks or Modules, e.g. only modules can have an element of the type Feed. A Framework file may look like this: The ID element defines an unique identifier for this component. Framework IDs start with an upper-cased letter, while Modules are lower-cased. The documentation is not yet complete. You may want to help extending it.
Frameworks Currently, the following Framework dependencies are shipped with Listaller by default, and packagers can reference them (the list shows their IDs): Default frameworks Libc6 The GNU standard C library. Linux Meta-framework, indicating that the software was built for GNU/Linux. GLib2 The GLib utility library of C routines. Xorg The X.org X11 server. GNOME3 The GNOME-3 platform libraries. GTK+3 The GTK+3 GUI toolkit libraries. KDELibs4 The KDE libraries from the KDE project. Mesa The Mesa-3D libraries. Python2 The Python2 scripting language. Python The Python3 scripting language. Qt4Core The core libraries of the Qt4 toolkit. PulseAudio The PulseAudio soundserver.
./Listaller-0.5.8/docs/sources/specs/architecture-naming.xml0000664000175000017500000000341112151527755024240 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Architecture naming policy How Listaller treats architecture names
What are architecture names? Architecture names are strings like "x86_64" or "i686" which define the system-architecture of the current computer. Compiled programs can only run on the architecture they are built for. Therefore Listaller packages also need to be arch-specific. Unfortunately, there are quite a few architecture names around, e.g. for 64bit-PCs the vendor-neutral name "x86_64" or "amd64". For historical and compatibility reasons, Listaller uses the naming conventions described below.
Architecture names Listaller uses the output string of the uname -m command for nearly all architectures, except for 32bit-PC and 64bit-PC architectures. For AMD's 64bit architecture, with the name "x86_64" or "amd64", we use the vendor-name amd64. Listaller will only use and recognize this name. For Intel's x86 architecture (names like "i386, "i486", "i686", ...) we use the name ix86. No other names are processed. For any other architecture, no special name changes are applied and we use the name which is exposed by the Linux kernel.
./Listaller-0.5.8/docs/sources/enduser/0000775000175000017500000000000012151525222020101 5ustar matthiasmatthias./Listaller-0.5.8/docs/sources/enduser/Enduser.xml0000664000175000017500000000120312151467513022234 0ustar matthiasmatthias %BOOK_ENTITIES; ]> End-user documentation Information for on how to handle Listaller and applications installed using Listaller from a non-technical point of view. ./Listaller-0.5.8/docs/sources/enduser/package-install-howto.xml0000664000175000017500000000751712151525222025032 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Installing IPK packages Learn how you can install an IPK package.
Installing packages (GUI method) Installing Listaller packages is really easy. Just make sure you have Listaller installed, then follow the steps below. Download an IPK package or get it from somewhere else. Open the IPK-package with your PackageKit package installer (Apper or GNOME-PackageKit). If a Listaller frontent is installed, simply double/single-clicking the package file should already launch the right application. After the package is opened, just follow the instructions on screen to install it. The application is now installed. You should be able to launch it via you application-menu. (Plasma, GNOME-Shell, KRunner, …) If there have been problems making the setup work for you, please file a bug against Listaller so we can fix it. Listaller uses a system based on GPG-keys and some other values to check if a package can be trusted, as 3rd-party applications can come from any source and it is not certain that they won't contain malicious software. The system administrator has set a minimum trust level for packages. If your package is below this level, you will not be able to install the package. By default, unsigned packages can never be installed without lowering the minimum security level. If you have troubles installing an application because of this, you can temporarily change the minimum trust in Listaller's config file, or speak to your system administrator.
Installing packages (CLI method) There are many ways to install an IPK package via the command line. We encourage you to use the lipa application, which is shipped with Listaller, but you could also use pkcon, the PackageKit command-line tool.
Install using lipa To install the package using lipa, just use the following command: [earth@sun] lipa --install ./packagename_version.ipk lipa will then guide you through the rest of the installation process.
Install using pkcon You should generally prefer using lipa over pkcon, since lipa was specially designed for use with Listaller, while pkcon is just a command-line PackageKit client, which does not support stuff like Listaller's signature-checking, licenses or private installations. To install the package using pkcon, you can just do the same as you would do when installing a native distribution package: [earth@sun] pkcon install-local ./packagename_version.ipk PackageKit will then perform a shared installation of the Listaller package.
./Listaller-0.5.8/docs/sources/enduser/package-remove-howto.xml0000664000175000017500000000217012151470357024657 0ustar matthiasmatthias %BOOK_ENTITIES; ]>
Removing IPK packages Information how you can remove a Listaller application.
Removing packages The documentation is not yet complete. You may want to help extending it. If you want to uninstall the software, you can use any PackageKit frontend to remove it, if you installed the application in “shared mode” as superuser. Otherwise, you need a Listaller-tool to remove it, e.g. limanager-gtk on GNOME. Just click uninstall and you're done. The lipa CLI tool is also able to remove Listaller packages, just use the --remove option instead of --install, and specify the application name or ID.
./Listaller-0.5.8/docs/sources/Project_Desc.xml0000664000175000017500000001016012152724406021526 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Project Goals This is a brief summary of the Listaller project goals. For the Listaller specifications, please see Listaller's design goal is to create an installer solution which is able to install software on multiple distributions by using just one package. It is no replacement for the package management system of a Linux distribution (like Debian, Fedora, OpenSUSE, ...), it is merely designed to install additional 3rd-party applications which are not part of the main distribution repositories and do not require tight system integration. Dependencies of software installed with Listaller should therefore be kept minimal, to simplify installations. The main target audience for Listaller are GUI desktop users who want to install graphical applications (= software which provides a XDG application desktop file). But Listaller is not limited to that, it might also be used to install non-gui stuff on servers, although this case is rarely used at time. Listaller is developed with the following goals in mind: System Integration: Software installed with Listaller should integrate well with the operating system, while not interfering with it. Listaller applications should be manageable using the general software management tools which the user already knows. Situations where an user has to open one tool to manage just a subset of his/her applications must be avoided. We also give distributors all necessary tools to make Listaller working for their distribution and integrate it nicely into the system and adjust it to the individual dustribution policies (as long as these changes do not break distro-interoperability). Cross-Distro: Listaller should work on all distributions, software packaged as Listaller IPK package should be installable on every distribution, as long as it's dependencies are satisfyable. People creating IPK packages should be able to target the whole audience of Linux users, not just a single distribution. Security: Installing 3rd-party applications which were not checked by the distributor might be a security issue. We therefore give the administrator an option to shut off 3rd-party installs or limit them to some users. Also, Listaller should display meaningful information to help the user in making a decision to trust the application which is pending install, or to reject it. IPK packages can and should be signed. Listaller should run 3rd-party applications in a sandbox by default. Simplification: Creating Listaller packages should be as easy as possible. IPK packages are built on existing standards, like DOAP, which makes it simple to use existing data for packaging. Also, there should not be corner-cases which cause an installation to fail, so package definitions should be straighforward and script-less, which also increases security. All complexity should be handled by functions built-in Listaller. Developer Tools: We provide tools for developers to make their applications work on many distributions and to minimize the dependencies of an application. (This list might be extended or changed if necessary) Listaller is designed to work well with PackageKit and AppSteam to provide a great and user-friendly application-centric software management on Linux distributions. PackageKit is a dependency of Listaller, while AppStream is optional for it's use, but recommended. ./Listaller-0.5.8/docs/sources/Manpages.xml0000664000175000017500000000216112151775244020724 0ustar matthiasmatthias %BOOK_ENTITIES; ]> Manual pages ./Listaller-0.5.8/docs/sources/Legal_Notice.xml0000644000175000017500000000113012151524265021502 0ustar matthiasmatthias Copyright &YEAR; &HOLDER; This material may only be distributed subject to the terms and conditions set forth in the GNU Free Documentation License (GFDL), V1.2 with no invariant sections or later (the latest version is presently available at http://www.gnu.org/licenses/fdl.txt). ./Listaller-0.5.8/docs/prepare-docbuild.sh0000775000175000017500000000117112151777514020546 0ustar matthiasmatthias#!/bin/bash for arg; do case $arg in source_dir=*) sourcedir=${arg#source_dir=};; build_dir=*) builddir=${arg#build_dir=};; esac; done if [ -z "$sourcedir" ]; then echo "ERR: No source directory set." exit 1; fi if [ -z "$builddir" ]; then echo "ERR: No build directory set." exit 1; fi # cleanup rm -rf $builddir/en-US rm -rf $builddir/man rm -rf $builddir/Listaller-Docs rm -f $builddir/publican.cfg # assemble documentation build directory cp -dpr $sourcedir/sources $builddir/en-US cp -dpr $sourcedir/man $builddir/ #cp -dpr $sourcedir/api/xml $builddir/en-US/api cp $sourcedir/publican.cfg $builddir ./Listaller-0.5.8/docs/CMakeLists.txt0000664000175000017500000000761212176742553017536 0ustar matthiasmatthias# CMakeLists for documentation add_subdirectory (man) find_program (XMLTO xmlto) mark_as_advanced (XMLTO) if (XMLTO STREQUAL "") message (FATAL_ERROR "Xmlto was not found! Please install it to continue!") endif (XMLTO STREQUAL "") # Find required tools find_program (PUBLICAN publican) mark_as_advanced (PUBLICAN) if (PUBLICAN STREQUAL "") message (FATAL_ERROR "Publican was not found! Please install the it to continue!") endif (PUBLICAN STREQUAL "") # build small listaller lib version string set(LISTALLER_LIB_VERSION "${LISTALLER_VERSION_MAJOR}.${LISTALLER_VERSION_MINOR}.${LISTALLER_VERSION_PATCH}") # we need to assemble our documentation build-directory before we can built it add_custom_target (assemble-docs COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/prepare-docbuild.sh" "source_dir=${CMAKE_CURRENT_SOURCE_DIR}" "build_dir=${CMAKE_BINARY_DIR}/docbuild" DEPENDS "publican.cfg" "sources/" "${CMAKE_BINARY_DIR}/docbuild/" "${CMAKE_BINARY_DIR}/src/liblistaller-glib.so.${LISTALLER_LIB_VERSION}" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} VERBATIM ) # the actual target to build all documentation add_custom_target (documentation COMMAND ${PUBLICAN} "build" "--langs=en-US" "--publish" "--formats=html" DEPENDS "publican.cfg" "${CMAKE_BINARY_DIR}/docbuild/publican.cfg" assemble-docs WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/docbuild/ ) add_custom_command (OUTPUT "${CMAKE_BINARY_DIR}/docbuild/" COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/docbuild" VERBATIM ) set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_SOURCE_DIR}/html) set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_BINARY_DIR}/docbuild) # a target to export documentation html to the source tree (useful when building the tarballs) add_custom_target (documentation-htmlexport COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_BINARY_DIR}/docbuild/Listaller-Docs/en-US/html/" "${CMAKE_CURRENT_SOURCE_DIR}/html" DEPENDS documentation WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) if (API_DOCS) # find documentation tools find_program (VALADOC valadoc) mark_as_advanced (VALADOC) if (VALADOC STREQUAL "") message (FATAL_ERROR "valadoc was not found! Please install Valadoc to continue!") endif (VALADOC STREQUAL "") find_program(GTKDOC_SCAN_EXE gtkdoc-scan PATH "${GLIB_PREFIX}/bin") if(NOT GTKDOC_SCAN_EXE) message(FATAL_ERROR "gtkdoc not found") endif(NOT GTKDOC_SCAN_EXE) find_path (SYSTEM_VAPI_DIR NAMES glib-2.0.vapi HINTS "/usr/share/vala-0.??/vapi" "/usr/share/vala") # ugly hack to help valadoc finding vapi files string (SUBSTRING ${VALA_VERSION} 0 4 VALA_VERSION_SHORT) set (SYSTEM_VAPI_DIR "${CMAKE_INSTALL_PREFIX}/share/vala-${VALA_VERSION_SHORT}/vapi") # find public library sources file (GLOB LISTALLER_LIB_SOURCES_MAIN "${CMAKE_SOURCE_DIR}/src/*.vala") file (GLOB LISTALLER_LIB_SOURCES_SOLVERS "${CMAKE_SOURCE_DIR}/src/solvers/*.vala") set (LISTALLER_LIB_SOURCES ${LISTALLER_LIB_SOURCES_MAIN} ${LISTALLER_LIB_SOURCES_SOLVERS}) add_custom_command (TARGET documentation COMMAND "valadoc" "--force" "-b" "${CMAKE_SOURCE_DIR}/src" "-o" "${CMAKE_SOURCE_DIR}/docs/api" "--vapidir=${CMAKE_SOURCE_DIR}/vapi" "--vapidir=${SYSTEM_VAPI_DIR}" "-X" "${CMAKE_BINARY_DIR}/src/listaller.h" "-X" "-l" "-X" "${CMAKE_BINARY_DIR}/src/liblistaller-glib.so.${LISTALLER_LIB_VERSION}" "--doclet" "gtkdoc" "--pkg=config" "--pkg=gee-1.0" "--pkg=gio-2.0" "--pkg=libsoup-2.4" "--pkg=sqlite3" "--pkg=libarchive" "--pkg=gpgme" "--pkg=libxml-2.0" "--pkg=rdf-minimal" "--pkg=packagekit-glib2" "--package-name=listaller" "--package-version=${LISTALLER_VERSION}" "--importdir=${CMAKE_SOURCE_DIR}/docs/man" ${LISTALLER_LIB_SOURCES} VERBATIM) set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_SOURCE_DIR}/api/html) set_directory_properties (PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_SOURCE_DIR}/api/xml) endif() ./Listaller-0.5.8/docs/man/0000775000175000017500000000000012151774777015551 5ustar matthiasmatthias./Listaller-0.5.8/docs/man/lipa.1.xml0000664000175000017500000000646112151774657017363 0ustar matthiasmatthias 2 June,2011"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; lipa 1 &package; Listaller command-line tool &package; Description This manual page documents briefly the &package; command. &package; is a simple tool to control Listaller using a command-line interface. It allows modifying basic settings, installing new applications, removing applications, requesting information about Listaller's database state and performing other maintenance tasks. Options Install a new application from a distro-independent IPK package. Remove an application which mathes the given name or application-id. List applications installed using Listaller. To include all other applications too, the flag can be appended. Display version number of &package; Turn on verbose mode (this can be used for debugging). See Also runapp (1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/lig++.1.xml0000664000175000017500000000420712151774647017332 0ustar matthiasmatthias 20 April,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; &package; 1 &package; Wrapper around g++ to create more portable apps &package; Description This manual page documents briefly the &package; command. &package; is a wrapper around ligcc. It allows you to create more portable executables, see the ligcc manual page for more information. Options See the manpage of g++(1) for more information about possible options. There are also several environment variables available to modify lig++'s behavior check the documentation for more information. See Also libuild (1), ligcc(1), gcc(1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/ligcc.1.xml0000664000175000017500000000657712151774651017521 0ustar matthiasmatthias 20 April,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; &package; 1 &package; Wrapper around gcc to create more portable apps &package; Description This manual page documents briefly the &package; command. &package; is a wrapper around gcc. It allows you to create more portable executables by doing three things: Forces the linker to link against older glibc symbols. Users who are using an older version of glibc will no longer get "undefined symbol GLIBC_2.4 in /lib/libc.so"-style error messages. Allows you to easily statically link to any other library. Automatically removes bogus dependencies. For example, your program uses libfoo. libfoo uses libpng internally, but your app does not. Yet the pkg-config file for libfoo specifies "-lfoo -lpng" is linker parameters. And tadaa - you now have a bogus dependency on libpng! LiGCC automatically removes the -lpng for you if your app doesn't use libpng directly. Add $ORIGIN/../lib to the binary's library search path. $ORIGIN is the directory in which the binary exists. This ensures that your binary can find library dependencies which are placed in the 'lib' folder under the same prefix. You might want to install custom libraries into /lib. If you set $APBUILD_PROJECTNAME, ligcc will also add $ORIGIN/../lib/$APBUILD_PROJECTNAME to the library search path. Options See the manpage of gcc(1) for more information about possible options. There are also several environment variables available to modify ligcc's behavior check the documentation for more information. See Also lig++ (1), gcc(1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/likey.1.xml0000664000175000017500000000552112151774654017544 0ustar matthiasmatthias 28 September,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; likey 1 &package; Manage Listaller's key database &package; Description This manual page documents briefly the &package; command. &package; allows administrators to manage Listaller's database of trusted GPG keys. Options Look for key matching PATTERN in the key database. Import public key with the given fingerprint from a public keyserver. Display version number of &package; Turn on verbose mode (this can be used for debugging). See Also runapp (1), lipa (1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/CMakeLists.txt0000664000175000017500000000056612107256364020304 0ustar matthiasmatthias# CMakeLists for manual page docs include (${CMAKE_SOURCE_DIR}/data/cmake/documentation.cmake) set(manpages "runapp.1" "lipa.1" "likey.1" ) if(TOOLS) set(manpages ${manpages} "lipkgen.1" "appcompile.1" "depscan.1" ) endif() if(LIBUILD) set(manpages ${manpages} "ligcc.1" "lig++.1" "relaytool.1" ) endif() add_xml_manpages(doc-man "${manpages}" "" "") ./Listaller-0.5.8/docs/man/appcompile.1.xml0000664000175000017500000000610312151774642020552 0ustar matthiasmatthias 18 April,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; appcompile 1 &package; Compile software automatically &package; Description This manual page documents briefly the &package; command. &package; automatically compiles applications from source code. It will detect the build system (cmake, automake, ...) and then perform the necessary steps to generate the binary. &package; can be used together with libuild, the Listaller build tool, to compile applications easily. Options Path to source of the application which should be compiled. Path where the resulting binaries should be installed to. Strip debug information from resulting binaries. Display version number of &package; Turn on verbose mode (this can be used for debugging). See Also lipkgen (1), depscan (1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/runapp.1.xml0000664000175000017500000000457412151774777017751 0ustar matthiasmatthias 18 April,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; runapp 1 &package; Run an application &package; Description This manual page documents briefly the &package; command. &package; runs applications installed using Listaller. It will set the application environment, initiate a sanbox and do everything else needed to run the application. &package; can also execute every other application found on the system, even those which were not installed using Listaller. Options Display version number of &package; Turn on verbose mode (this can be used for debugging). See Also lipa (1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/lipkgen.1.xml0000664000175000017500000000631512151774661020060 0ustar matthiasmatthias 1 June,2011"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; lipkgen 1 &package; Listaller package builder &package; Description This manual page documents briefly the &package; command. &package; is a simple tool to build IPK application packages directly from software sources or binary files using a package recipe. Options Build IPK package using the IPK source files in the ipkinstall folder in current directory. Set the IPK package source directory. Set an output path were the resulting package should be saved. Sign the resulting package with your GPG key. Display version number of &package; Turn on verbose mode (this can be used for debugging). See Also runapp (1), lipa(1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/depscan.1.xml0000664000175000017500000000553212151774645020046 0ustar matthiasmatthias 18 April,2012"> GNU"> GPL"> ]> Listaller Project 2009-2013 Matthias Klumpp Listaller Project &date; depscan 1 &package; Detect binary dependencies &package; Description This manual page documents briefly the &package; command. &package; reads library dependencies of binary files in a directory and ouputs them in form of a list. Options Search for binaries in recursive mode. Output simple, machine-readable text. Output dependencies as Listaller components (versioned, if version could be determined). Display version number of &package; Turn on verbose mode (useful for debugging purposes). See Also lipkgen (1). Additional documentation can be found on http://listaller.tenstral.net. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/man/relaytool.1.xml0000664000175000017500000001411312151774666020441 0ustar matthiasmatthias 14 May,2012"> GNU"> GPL"> ]> Listaller Project 2009-2012 Matthias Klumpp Listaller Project &date; &package; 1 &package; Generate a file that can be used instead of linking directly against a library &package; Description This manual page documents briefly the &package; command. &package; is a program to provide a more convenient interface to dlopen/dlsym. It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime. In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result. If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1. Options If a matching -lLIB is found, generate a file that can be used instead of linking directly to LIB. The name of the file is echoed on stdout. Multiple --relay can be used together, a file will be generated for each matching ones. Generate a file for every -lLIB parameter. Will look in OBJ_LIST for undefined symbols, and generate a file creating only the needed symbols for each LIB. Generate a file creating only the symbols contained in MAP_FILE. Will apply to all further -lLIB parameters, so in general is not suitable to multiple libs in the same invocation of &package;. Echo -lLIB on stdout even if a --relay LIB is found, so it'll be linked in normally. If a library has different SONAMES on different Linux distributions you can specify the various SONAMES that it's known by here. Relaytool will attempt to load them (in the order provided) until one if found. This cannot be used with multiple --relay options. The first SONAME in the list will be used as the name in the _is_present variable and _symbol_is_present function. Write stub file to DIRECTORY instead of CWD. Linker commands Add PATH to the list of paths to search for LIBs. If a matching --relay LIB is found (or if --replace-all-libs is specified), generate a file that can be used instead of linking directly to LIB. If there's no --relay LIB, echo -lLIB to stdout. All other linker commands are passed as is to stdout. Other commands Show some help. Display version information of &package; See Also lipkgen (1), ligcc(1), gcc(1). Additional documentation can be found on http://listaller.tenstral.net/wiki/doku.php/relaytool. AUTHOR This manual page was written by Matthias Klumpp matthias@tenstral.net. ./Listaller-0.5.8/docs/drafts/0000775000175000017500000000000012117342202016231 5ustar matthiasmatthias./Listaller-0.5.8/docs/drafts/_old_ips-control-specification-v1.txt0000664000175000017500000001353012107256364025420 0ustar matthiasmatthias===== IPS 1.0 Specification ===== **Specifications for IPS Installation-Package-Source files version 1.0** ==== General Layout ==== One IPS file contains a definition part which describes basic information about the package. It contains information about the application name, descriptions, translations etc. The second part contains all information about the files which should be installed. The IPS script can be commented by using the # symbol. If you have to include a longer text into the IPS script, you can use the //include// command. The include element can assign every textfile to a IPS-element. This code example loads the package description from an external textfile: Description: include:"./desc.txt" The include command can also be used to include MO-Coded translations. The .mo files can be used as alternative way to load translations, Listaller will automatically use the included .mo file to translate all available strings. Each IPS1.0 file has to contain the line //IPK-Standard-Version: 1.0// at the beginning of the document. The line is followed by an empty line. After this, the details of the new package are defined by entries. Normal IPS/IPK entries have a name and end with a colon, like **Name:** After a space follows the value of the type. If the entry has a special target, it contains the specification in brackets, e.g. The element **SDesc** defines a short description of the package, if the element is specified it looks like this: **SDesc[de]** This element specifies a short German description of the package. (SDesc is specified by the German language code in brackets) If a value of an entry needs more than one line, the following lines should start with a space. E.g: Description: This application does something. It can help you to do work faster... ...with more lines. And understand the uncomplicated IPS/IPK syntax. After the empty line which follows the header entry, every new line has to start with a keyword to define a specific aspect of the package. (Until the Files-part is reached or if some values need more line or if an include: command is present) ==== IPS-Files for "standard" IPK packages ==== === Overview === An IPS1.0 file to build an IPK file on type "normal" can look like this: IPK-Standard-Version: 1.0 include:"../locale/setup-es.mo" Type: linstall Name: FooBar Version: 1.0-a License: include:"../COPYING" Description: include:"./desc.txt" Icon: ../graphics/foobar-icon.png SDesc: A new foo-ish bar SDesc[de]: Einen neue foo-bar Group: Development Author: Foobar Project Maintainer: Pete Foo ( petefoo@example.org This e-mail address is being protected from spambots. You need JavaScript enabled to view it ) USource: http://fooproject.org/repo/ipk/updates Disallow: ioNothing Profile[0]: Standard AppCMD: $INST/foo/foobar Architectures: i386 PkName: foobar-1.0a-ipk DSupport: Ubuntu,openSUSE Dependencies[DEB]: lynx http://example.org/chd/dnd/package.deb (pkgname) Dependencies[RPM]: lynx-rpm http://example.org/chd/dnd/rpm/package.rpm (pkgname) Dependencies[Ubuntu]: http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.deb (listaller) Dependencies[openSUSE]: http://dfn.dl.sourceforge.net/sourceforge/listaller/listaller_0.1.16a_i386.rpm (listaller) Dependencies: libc6.so library2.so /usr/lib/libnagra.so.4 !-Files ~0 >$INST/foo ../bin/foobar 195f7bd6242782f35819a9600dbb74aa ../graphics/foobar-icon.png aa0b5d7a5dab287a422f06c121ed8cf0 >$APP/ ../foo/data/foobar.desktop 0351ef79d187dbed8599f612c0a2012c (Some files and dependencies are missing to keep the example clear) === The definition part === The order of the entries does not matter, but the following order is recommended: First, we have the **Type:** entry. It defines the type of the resulting IPK package. Possible values for the type attribute are //linstall// for an normal installation, //dlink// for an DepGET package and //container// for packages that contain binary setups. If an entry named **Patch: true** exists, the package will not be registered as an single application and the installer will overwrite every file on the installation-directory. This option is dangerous, use it only for patches! The option to accept patches has to be enabled manually in Listallers preferences. IPS1.0 supports the following elements: ^ Element name ^ Required? ^ Function ^ | **Architecture** | Sometimes | This element contains the supported architectures of the application which has to be installed. Possible values: "all" "i386" "x68_64" and every other architecture which is supported by Listaller. If the script builds the application from scratch, the Architecture entry should not exist. If it does, it will override the current architecture and the package builder may not set the correct architecture.\\ If there is no build-element avilable, this is a required element. | | **PkName** | Yes | The entry contains one unique name for the package to identify the application. It is usual to use the lower-cased application name followed by the application version number without dots.\\ E.g: if the application name is "SampleApp 1.0.2" the **PkName** element should have the value //sampleapp-102// | | **Disallow** | No | The entry is used to disallow some installation types. Every type that is disallowed is delimited from the others with an comma. Possible values are: ioTest: Disallow testmode (execution without installing) ioLocal: Disallow installation into $HOME ioBase: Disallow normal installation into / If you want to combine the values, divide them with a comma: , | | **Maintainer** | Sometimes | The element contains the name of the package creator. This element is an essential for the "unibuild" feature and it is recommendet for packages to have a maintainer. (But normal IPK packages do not need this element) | ./Listaller-0.5.8/docs/drafts/_old_ipk-specification-v1.1.txt0000664000175000017500000001165512107256364024077 0ustar matthiasmatthias===== IPK 1.1 Specification ===== FIXME This specifications are @work! Some information might change due the development process or might just be outdated and wrong. ==== General ==== === Format === An IPK setup-package is a [[http://en.wikipedia.org/wiki/Tar_%28file_format%29 | TAR-Archive]], containing a [[http://en.wikipedia.org/wiki/Xz | XZ-Compressed]] data and control tarball. An IPK-Package has the file extension .ipk (= **I**nstallation **p**ac**k**age), which was choosen because it is simple and easy to remember. Unfortunately the Opkg and Ipkg package manager for Linux cellphones uses the same extension, (and IPK was an image-format for Nintendo® games), but because Listaller setups are targeted to Linux desktops and not to cellphones, this should not leat to much confusion. Most of the IPK packages are named in the following pattern: InstallAppname-version_architecture.ipk E.g if the name of the application is "//Sample//" the version is "//1.0//" and the architecture is "//i386//" the package should be named //InstallSample-10_i386.ipk// or //Sample-10_i386.ipk// === Structure === The IPK archive contains the following files and folders at toplevel: ^ Name ^ Required? ^ Function ^ | data.tar.xz | yes | Contains the files which have to be installed. | | control.tar.xz | yes | Archive with configuration files of this package, the main config file as well as e.g. Licenses, scripts, descriptions, file-info etc. | | _signature | no | A GPG ASC signature of this package. (Only exists if the package is signed) | Listaller will detect automatically if a package is signed and check if the signature on the IPK package is valid. ==== The control files ==== All files configuring the behavior of an IPK package or providing additional information about it are stored in the //control.tar.xz// archive. On toplevel, each control archive has to contain an //arcinfo.pin// document, describing all basic stuff of the package. === Arcinfo.pin === The //arcinfo.pin// file contains the same information as the definition part in an IPS-script. The package builder has changed file paths and removed some unnecessary elements, everything else is the same. An //arcinfo.pin// file may look like this: IPK-Standard-Version: 1.0 include:"/stuff/locale/setup-es.mo" Type: linstall Name: Foobar Version: 1.0-a License: include:"/stuff/COPYING" Description: include:"/stuff/desc.txt" Icon: /stuff/foobar-icon.png SDesc: A new foo-ish bar SDesc[de]: Einen neue foo-bar Group: Development Author: Foobar Project Vendor: Foobar Publishing Maintainer: Pete Foo (petefoo@example.org) Disallow: ioNothing Profile[0]: Standard AppCMD: $INST/foo/foobar Architecture: i386 DSupport: Ubuntu,openSUSE Dependencies: $LIB/libc6.so $LIB/library2.so $LIB/libnagra.so.4 The format of an IPS definition section is described in the IPS specifications. The following elements are IPK-specific or have different values: * License, Description, Wizimage, Icon: The value has changed, it points now to a file in the IPK package. / is the package root. Licenses are usually saved in /stuff * Include commands have also changed values. * The !-Files part is missing. === File information === The information about installed files is saved in a plain text file named //fileinfo.id// which is stored in the //control// archive. The content of the fileinfo file has the following structure: >Destination_dir Internal path to file MD5-hash Internal path to file MD5-hash ... A fileinfo-file can look like this: (extract) >$INST/Songbird /data/Songbird/LICENSE.html 9b5151a0cfec60dbc0c3d548cfa3e713 /data/Songbird/README.txt a92100275b9f71115dbe82a18af61392 /data/Songbird/TRADEMARK.txt c82c36a2843c9ad08c42d7170a9c12d1 /data/Songbird/songbird 77e7be1db488bf3c4b5e8abd52d6eb23 /data/Songbird/application.ini ff85febb38852501439ea623725241c0 >$INST/Songbird/jsmodules /data/Songbird/jsmodules/sbLibraryUtils.jsm 418a7400354cd1176264b5ec79f29be2 The variables (indicated by the //$// sign) are resolved to absolute paths following the [[Global Variables | Variable Definitions]]. ==== Data archive ==== The data archive //data.tar.xz// contains all data a package wants to install. The directories in which files have to be installed are defined by the //fileinfo.id// file in the control archive. Usually, the data is stored in a structure somehow matching the destination of the new files. E.g. if files go to //$INST/App/test//, they are located in the ///INST/App/test// directory of the data archive. The structure of files can be freely defined, it is only controlled by the //fileinfo.id// file. The structure mentioned above is recommended, but it is not forced. The IPK package builder of Listaller, **libuild** will create IPK packages matching this structure. TODO: Add information how multiarch-IPKs are structured & handled. ./Listaller-0.5.8/docs/publican.cfg0000664000175000017500000000031112151777170017235 0ustar matthiasmatthias# Config::Simple 4.59 # Wed May 29 20:38:48 2013 xml_lang: "en-US" type: Book brand: common doc_url: http://listaller.tenstral.net/docs prod_url: http://listaller.tenstral.net tmp_dir: Listaller-Docs ./Listaller-0.5.8/docs/html/0000775000175000017500000000000012152724462015725 5ustar matthiasmatthias./Listaller-0.5.8/docs/html/sect-Listaller-Specs-PackSettings.html0000664000175000017500000000476212152724462025163 0ustar matthiasmatthias 5.4. Package settings file

Product SiteDocumentation Site

5.4. Package settings file

Definition of the package settings files

5.4.1. What are package settings files?

TODO: Briefly explain pksetting and pkoptions, their structure an purpose.
./Listaller-0.5.8/docs/html/spec-filelist-basics.html0000664000175000017500000000534112152724462022623 0ustar matthiasmatthias 5.5.2. Basic structure

Product SiteDocumentation Site

5.5.2. Basic structure

Listaller file lists can contain comments, which should be prefixed with a # sign. Every destination directory is defined using two colons: :: /directory/name. After defining a directory, the files which should be stored in that directory are listed.
File lists may also contain a SHA-1 checksum, added in a line after the checksumed file. The checksum option is usually only used in IPK packages.
File lists used to build an IPK package may contain wildcards. It is also possible to rename a file, by adding it's new name after the origin path. Relative paths are allowed.
./Listaller-0.5.8/docs/html/ligcc-howto.html0000664000175000017500000002141612152724462021036 0ustar matthiasmatthias 3.2.2. How to use ligcc?

Product SiteDocumentation Site

3.2.2. How to use ligcc?

Use ligcc just like how you use gcc:
Example 3.1. Using ligcc
				[earth@sun] ligcc foo.c -o foo
				[earth@sun] lig++ bar.cpp -o bar

Recommended way:
export CC=ligcc
export CXX=lig++
./configure
make
or
make CC=ligcc CXX=lig++
There are several environment variables that change ligcc's behavior:
ligcc environment variables
LIBUILD_PATH
Use this as the include dir for the ligcc headers. Default value: $PREFIX/include/libuild (where $PREFIX is the prefix in which libuild is installed)
LIBUILD_CC
Use the specified C compiler. Default value: gcc
LIBUILD_CXX1
Use the specified C++ compiler. Default value: g++
LIBUILD_STATIC_X
If set to 1, then libuild will statically link some X extension libraries.
LIBUILD_BOGUS_DEPS
Specify a list of whitespace-seperated bogus library dependencies (like: X11 ICE png). These libraries will not be linked against. This option is useful if you want to specify bogus dependencies manually because the automatic bogus dependency stripper doesn't work correctly for your project (see below).
LIBUILD_DISABLE_BOGUS_DETECTOR
If set to 1, disables the automatic bogus dependency stripper. This is useful when linking to libraries don't have correct DT_NEEDED entries, like GTK 1.2. GTK 1.2 uses libX11.so internally, but it's not linked with -lX11. Instead, gtk-config –libs returns -lgtk -lX11 or something. If your app doesn't use xlib internally, then our bogus dependency stripper will strip the -lX11 argument. Linking will then fail.
The built-in bogus dependency stripper is not used if you have a recent version of binutils, which supports ld –as-needed (it'll use binutil's native support for bogus dependency stripping instead). So you should get use a recent version of binutils if your ld doesn't already support that argument.
LIBUILD_NOT_BOGUS
If you want to use the automatic bogus dependency dectector anyway (using ld –asneeded), then you can specify a list of dependencies here that are not bogus with this environment variable. Example:
export LIBUILD_NOT_BOGUS="X11 ICE png"
LIBUILD_STATIC
Specify a list of whitespace-seperated libraries to statically link to (like: popt z). You can also explicitly specify a filename to the static library. Examples:
export LIBUILD_STATIC="popt z"
export LIBUILD_STATIC="popt=/usr/lib/libpopt.a"
LIBUILD_STATIC_LIBGCC
If set to 1, link all binaries with -static-libgcc. See the gcc info page for more info about this option.
LIBUILD_PROJECTNAME
If non-empty, ligcc will add $ORIGIN/../lib/$LIBUILD_PROJECTNAME to the library search path.
LIBUILD_INCLUDE
Prepend the specified directory to the compiler's header search path. The compiler will search this directory first, before searching any other directory. This is useful in combination with the older GTK headers package. You can specify multiple directories, seperated by a :, just like the $PATH environment variable. If the order of the -I flags is important for your application, you can replace paths by using /old/path=/new/path.
LIBUILD_RESOLVE_LIBPATH
A space-seperated list of (Perl) regular expressions which specify the libraries whose path must be resolved into absolute paths.
Internally, ligcc reorders the linking arguments that are to be passed to gcc (for various reasons). This can cause problems when linking certain static libraries (for example, static WxWidgets libraries). But that can be worked around by using full path names for static libraries (e.g. turning -lfoo parameters into /usr/lib/full-path-to/foo.a).
./Listaller-0.5.8/docs/html/chap-Listaller-Packaging.html0000664000175000017500000003453312152724462023351 0ustar matthiasmatthias Chapter 4. Packaging

Product SiteDocumentation Site

Chapter 4. Packaging

Creating Listaller packages and cross-distro applications is easy. Just follow the instructions below and read the documents.

4.1. Building Listaller Packages

The following instructions will help you creating cross-distro IPK packages for your own application. Please note that Listaller is designed to install applications, so IPK packages will only install applications. Packaging shared libraries using IPK packages is a very bad idea, and although it might be possible, we don't want shared libs packaged in IPK packages. If you have a shared library, you can create a native distribution package and distribute it as DEB/RPM.

4.1.1. Prepare your application

Your application needs to meet some special requirements to be installed on a wide variety of different Linux distributions. (E.g. it must be relocatable) You can read the application development documents for more information on this step (see Chapter 3, Developing Listaller-ready applications).

4.1.2. Set up the packaging info dir

To create a Listaller IPK package, you first need to create a directory containing information about your application and how to build it. The directory should be at toplevel of your source tree (but it does not have to be there) and it should be named ipkinstall. The directory has to contain a pkoptions file, which defines some options for the package build, e.g. if Listaller should try to find dependencies automatically. A minimalistic pkoptions-file might look like this one:
Version: 1.1

AutoFindDeps: true
The Version field should reflect the IPK standard version this package will be build for and NOT the version of your application.
Other files in the IPK source directory are DOAP data for your application (appname.doap), a list of files which should be installed (files-current.list), a Makefile containing rules how to build your app from source (build.rules) and a file describing the dependencies of your application (dependencies.list). All files except for the Makefile and the dependency list are required and have to be present. In the following sections we will show you the basic stuff you can do with these files and how you create them.

4.1.3. Create DOAP data

Listaller uses DOAP to fetch information about your project. You should already have a DOAP description of your project. (it is required e.g. for all GNOME projects and many other projects use it already)
If you don't have DOAP data already, you can generate it, e.g. using DOAP-A-Matic or another tool. For more information about DOAP, you can read this document.
After you generated the data, save it as *appname*.doap in your IPK source dir, where *appname* should be replaced with the name of your application in lowercase. Other options are linking the DOAP file to your IPK source-dir or writing a script which auto-generates the sourcedir when you want to build the IPK package. (if you don't want to store the DOAP data in the IPK-src dir)

4.1.4. Create file listings

Now you need to write a list of the files your application wants to install, so Listaller can add them to the package and copy them to the right locations, when the setup is executed. IPK packages support multiarch setups, so you can define files which have to be installed by architecture, using files-*arch*.list file-lists, where *arch* is the architecture these files belong to. (e.g. ix86, amd64, …) If *arch* is all, files in this file-list will get installed on all architectures.
You can also make Listaller pick the current system architecture and create a package for it. This is usefull if you don't package binary data which is already there, but instead build an IPK package from source. In this case, the file-list needs to be named files-current.list. Files mentioned in this listing will get installed on the current architecture. This is the most common case when building an IPK package.
An IPK file-list can look like this:
# IPK file list for FooBar

:: %APP%
FooBar.desktop
:: %INST%
foo-bar
*.html
*.txt
:: %INST%/data
data/*
:: %ICON-16%
icons/16x16.png foobar.png
:: %ICON-32%
icons/32x32.png foobar.png
:: %ICON-64%
icons/64x64.png foobar.png
:: %ICON-128%
icons/128x128.png foobar.png
Lines starting with a :: define the destination directory on the target machine. You should always use a Listaller directory variable there. Absolute paths are possible, but will lower the trust level for your package and will make private package installations impossible. You should in general not use absolute paths. After defining the target directory, you can add a list files which should be installed there, relatively to your source directory. Wildcards are allowed in filenames.

Note

By default, Listaller uss the directory below ipkinstall as source-directory, but you can change this setting by using the FilesRoot field in pkoptions

4.1.5. Some finetuning

Do some manual tweaks if needed.

Warning

The documentation is not yet complete. You may want to help extending it.

4.1.6. Build the package

You are now ready to build your IPK package! Just make sure Listaller's command-line tools are installed, then change to the directory below the ipkinstall dir and execute:
			[earth@sun/foobar] lipkgen -b
The build tool should now create an IPK package in the directory below your current dir, which contains all things needed to run your application.
We strongly encourage you to sign your package with your public GPG key. If you don't sign it, Listaller will consider the package as dangerous and GUIs might show a warning message when users want to install the package. To sign the package, just append –sign to the build options:
			[earth@sun/foobar] lipkgen -b --sign
There are also some other flags you can apply to modify the behaviour of lipkgen. If you are interested, you can read the manpage. Usually the extra options should not be needed.

4.1.7. Distribute the package

You can now publish your (signed) package anywhere on the web and have users install it using Listaller. Later, you might want to set-up and update-source for your software, so all users stay up-to-date.
./Listaller-0.5.8/docs/html/depscan-howto.html0000664000175000017500000000450612152724462021373 0ustar matthiasmatthias 4.3.2. How to use Depscan?

Product SiteDocumentation Site

4.3.2. How to use Depscan?

Warning

The documentation is not yet complete. You may want to help extending it.
./Listaller-0.5.8/docs/html/index.html0000664000175000017500000003265412152724462017734 0ustar matthiasmatthias Listaller

Product SiteDocumentation Site

Listaller 0.5.8

Listaller

3rd-party software installer

Edition 1

Matthias Klumpp

The Autopackage Team


Legal Notice

Copyright © 2008-2013 Matthias Klumpp This material may only be distributed subject to the terms and conditions set forth in the GNU Free Documentation License (GFDL), V1.2 with no invariant sections or later (the latest version is presently available at http://www.gnu.org/licenses/fdl.txt).
Abstract
Listaller is a cross-distro 3rd-party software installer, promarily designed for Linux software. It is built on top of PackageKit.

Preface
1. Document Conventions
1.1. Typographic Conventions
1.2. Pull-quote Conventions
1.3. Notes and Warnings
1. Project Goals
2. End-user documentation
2.1. Installing IPK packages
2.1.1. Installing packages (GUI method)
2.1.2. Installing packages (CLI method)
2.2. Removing IPK packages
2.2.1. Removing packages
3. Developing Listaller-ready applications
3.1. Guide to making relocatable applications
3.1.1. The problem
3.1.2. The solution
3.1.3. Hello World!
3.1.4. Initialization
3.1.5. Basic usage
3.1.6. GLib-style API
3.1.7. Useful utility functions
3.1.8. Autoconf/Automake build system integration
3.1.9. KDE integration
3.1.10. Full API reference
3.1.11. More examples
3.2. The Ligcc tools
3.2.1. What is ligcc?
3.2.2. How to use ligcc?
3.3. Relaytool
3.3.1. What is Relaytool?
3.3.2. How to use Relaytool?
4. Packaging
4.1. Building Listaller Packages
4.1.1. Prepare your application
4.1.2. Set up the packaging info dir
4.1.3. Create DOAP data
4.1.4. Create file listings
4.1.5. Some finetuning
4.1.6. Build the package
4.1.7. Distribute the package
4.2. Appcompile
4.2.1. What is Appcompile?
4.2.2. How to use Appcompile?
4.3. Depscan - Scan for software dependencies
4.3.1. What is Depscan?
4.3.2. How to use Depscan?
5. Specifications
5.1. Architecture naming policy
5.1.1. What are architecture names?
5.1.2. Architecture names
5.2. Directory variables
5.2.1. What are directory variables?
5.2.2. List of Listaller directory variables
5.3. Dependency types
5.3.1. Rationale
5.3.2. Dependency description locations
5.3.3. Description file schema
5.3.4. Frameworks
5.4. Package settings file
5.4.1. What are package settings files?
5.5. IPK file listings
5.5.1. Rationale
5.5.2. Basic structure
5.5.3. Schema
5.6. IPK repository structure
5.6.1. What is an IPK package repository?
5.6.2. Directory overview
6. Manual pages
appcompile — Compile software automatically
depscan — Detect binary dependencies
lig++ — Wrapper around g++ to create more portable apps
ligcc — Wrapper around gcc to create more portable apps
likey — Manage Listaller's key database
lipa — Listaller command-line tool
lipkgen — Listaller package builder
relaytool — Generate a file that can be used instead of linking directly against a library
runapp — Run an application
7. Listaller API Reference
Index
./Listaller-0.5.8/docs/html/chap-Listaller-API.html0000664000175000017500000000437112152724462022073 0ustar matthiasmatthias Chapter 7. Listaller API Reference

Product SiteDocumentation Site

Chapter 7. Listaller API Reference

A reference of Listaller's public API can be fount on the API reference pages.
If you want to use the PackageKit API, look at the PackageKit reference manual.
./Listaller-0.5.8/docs/html/spec-filelist-schema.html0000664000175000017500000001013312152724462022612 0ustar matthiasmatthias 5.5.3. Schema

Product SiteDocumentation Site

5.5.3. Schema

This is the schema for a file list used in IPK packages:
# IPK file list for an application
# this is another comment

:: %INST%
foo-bar
da6d9a8f383f47798429db56c21c541d542fa656
test.dat1
40fabe138412c42edb9f323c16fd0ac8f1b48380
test2.dat
e99c30998ee4f48ee4b8e66f87d73ad3abe4274b
:: %INST%/data
data/file.xyz
7c34c388fcafc68b220f14555a0117cafcdab73e
:: /usr/bin
foobar
7db2fb25f7af8c7c92ba5f685a160a3104aacc78
This is the schema for a file list used for creating packages:
# IPK file list for FooBar

:: %APP%
FooBar.desktop
:: %INST%
foo-bar
*.html
*.txt
'data/file with whitespaces.txt'
'data/another-file with-space.txt' renamed.txt
:: %INST%/data
data/*
:: %ICON-32%
icons/32x32.png foobar.png
:: %ICON-64%
icons/64x64.png foobar.png
./Listaller-0.5.8/docs/html/sect-Listaller-Specs-IPKRepo.html0000664000175000017500000000535712152724462024036 0ustar matthiasmatthias 5.6. IPK repository structure

Product SiteDocumentation Site

5.6. IPK repository structure

Description of the structure of an IPK package repository

5.6.1. What is an IPK package repository?

IPK package repositories are online sources for Listaller packages. These sources can be used to provide updates for installer applications, or to make Listaller-packaged applications available in the software management UIs of distributions.
Repositories can also be used to provide dependencies, to enhance the abilities for Listaller's dependency solver to satisfy a given dependency.
./Listaller-0.5.8/docs/html/images/0000775000175000017500000000000012152724462017172 5ustar matthiasmatthias./Listaller-0.5.8/docs/html/images/pkgs-listaller-situation.png0000664000175000017500000014236112152724462024661 0ustar matthiasmatthiasPNG  IHDRQ/2IDATxXƗ^6,b=c1ƨQcQc[`{7 8z}އgۛۛ~3;Alp|(%@P25gC;vɓt8=JG?KwΝ};mF[ЦM~=]KkЪUl-YBт4o__~3ht:&Oi7Ǝ1chÆѐ!4x0Կ?}5+תW/у>uΝcGSj׎ڴ֭eKj֌6 ܜ$)H'N܁<jb(۷ц܆ n]V+hrm͞06Ly~!7jCoiР+r{SϞq҅:u>{?!׼95mJ~H˴_֥Z-Ǟ?APdޮ]r!Cn Ki`!7s{MD?LAnh9ӂ7Ѐԯ_B סoOmAE 9x]j֤V>̃<cƍq미K5.s 7kV\~=NԂܗ_AGޝv{,D0ǐk=4FA8q0W *UR%X(OLWځyAYya999eXN@N=,@NS)S1a95գ:u W:UJ+ː+_ʔEL+ @ywXN@N=,' S ȩrra991,ȓSʕeח<<(G23HԁyAYyZrrʰ'a9CsOrrZr 9eXNs ҥ%C:0 (0аa9}eXNzX!רu a92eT)*^\末+Y[g:΁yAYyra9jXN޹'aVbsO ɯV" \P+&[:;ksUNyAP -2i%!{"Z!W)"OttLVeIO$ ̃LtOU H+[eĿ%\ixTbu)8a&I^֛or~_{! I{H8s&=Og^%iGJ$KR2G$sCm$S]y5-raa1XL8Ͱ'%K28ٙ+/Gr4;TJ6HRлVy%& /F'΋4Iz!I%@3gJsI KbM<0̃<9÷-xɻ[Űo.߻Er~~Isϰ23|v⯃̖^ZÞ޴e4P$ T0 (zĨKjM%\3$nX. ,hofFLnsLħ[E]=^$/fh7q UgdMthƌ(מ={<0҉y%\W;7$`$9cZ'I#1/Rj$#VQr m_]LI${IRSUk9,z<j3tKa9GŅlmu՞4kmU0o @T+V \ 2cPk1$I<0̃ Sd^/?!;799Mfy%A`&00 ̃<0̃ 0<0<0̃<ʤ̛3K%`AYypyz JWi„ ٨߱cAի%#t +(ŗV...|XyL*U*&iӦ8JPh |(y<(z<JPAyB=y`m <<00CePAAi!ȃ2O ̃4 A'CAPچz! ( C=yP y<(z<JPAyB=y`^c[?ouNϜ}.p>'.]kWZfXG#/fP_gt؍/{Ĉľco<ā7F>Dԝׇ|_y4q|ҧg``^<y>'%Nu{4˄ ?_}$y83f“-7D`^ٚ6m:bĈs/:ڔO4OXdo-y-OOh$/O i+NЉwpviT1/&&->sN)닖fim+?vF1&%L 2O] o'M[0/~+>Eӗ:wFҭAoobfҧ~̛8:u4mڴ2%}ŃkrҎGSvjycf̋H)Ryf_شj?W+Ϳ)G<N9CZ;:|Cou.{!.- 2GPf ~S~vOEFնSμlNJg+lem[$_Vxi: k}9uޓ VN=&~7O{'JvYnxҪowŗ h]r)7r枰1ez.n\033ۺu֭ՙOmu7N3ʘP}-?>{M[ ޠkނ~ݕq*?j-zgO¿h'\0O/gb؜PCů|6\gsIk%>5XِQ/UW"@Ѡ~Ob5ZQiׄf&_76L)P*5Q|rw"9Wǭqu_Z]m7UDwJIgnGFcR'SFMQiG{- 9J##;JV觍7D&y$'o3S)v>7fߩ$[2~,)|;H+q*߰ЀJ +vr/?'/?wZ<} : _$4_~Fq7ߊpNc_3|Ayo0 ;$=}Gy^oW"MC?Z#?+I=Kc7fߩ$[2~,?괥M;eRN \}Y qVvWn;XW3Ja1p8/Sϒ/&srs;Dgz㙧wZ5S ]Y[x&z> }t}:|+2T=]Jfϛ<"y=;~JD gTߩ$[,Fl yItfZ 38ք?N%g^?3uN;7QkuE7'iM{.V6d_Wy|r/8LJa?tCP|`xuټ>μqwqp\$]nЌPwOׯ=|03v[Zɐo'sCwj> |}z;hyWm]=FrH-&*$F,Cn}xͲCYof͚e$0TNSR |T.2=Ƽl;-TLOS/8o&{}0 oF0`^k40gZZwvZd85}0 !΃Mcσy0 y063LvDAx$`^Vbp^j!-}{lYosIk>S'7g@QCUH %Se“X#[nЅ3Vegh)8?KkӞteNŞJQw;kBMF4}MJSShd̞H'Є4=ƱX#W=FG#hwPBC8LكhP(reiПQ+vӌ鏽^ l3Wdݾ͘6\yL7t)0 ˄}Uhcfom[h {3mD6 a=_G5/k5^EV?߾NS2Z.%i"Z.i<~Csؿү/4s`3nq? h|<>8`[HOY5ؖ3f۴E>KTs#9ڻx_o 2y&ckBM2!D_([tE/(1'ؖϋ|D/{tNm%UeM4PF -El7&z#l7&z#[-`c }G }K R(WL ~^_%}y4$cϋ~Lp*;<UƬ'(Jll6z>mli,l ,e2oE l}A_޽WOكz|Nwݨ[*yO~#ϋz$ҼI%IJƻ2Sq"*1 1?bLo`c ll+uLٝgS ~^J6yOw)q{z+Q2xJ j܂G6;CFy`^dDd*7R-`M66D`B]:RGԁ֞ڷvmmj1}ܚZVM ـyR<. > 7naCQ/~ [+o>%_|'16r ,w~ncX2%8[n,,밳2DlSI!x `kI-[PԼ5c}D+lsə"u$O*Qy5.__hӹn>`gбw(ks8_2\R433_+lfT'4o>~Grc7+rwzJz}+p![Nny ׻SƼk3e+ZYY`2f<<J|W/jC>7>bc ؼ15f7F >կKunܬ[KSuӒKyL;nݥ7[puS%CDŽ|S9_.QRyK*cb]Wkk-hl/91{*imVImlDt'j g[Q]y1uy=Q*U\P/hw.e8YehHW=ꭨփz'ʜ7=5204mlluQ&I^6Wb^}̬׼Ups[6ծ_-;o B(:UBU E2 4p=$ T|oK`^dbz珈զL5NW^P 6`raZ?o]fj䜒a%?o85%EDl awwu˔XPۚ5&kP [5Y.徕r@Fb 楼d! *PI`:5@%&#3tWm [2Y暷rYo?x&64L@yUϔS<=qEvy@ w7ۼXSJѭ2Ziݝ2]%ʷ?9l+C 1 }LǕTrq2||R6 6oBMkԀ~QVy-s;ZT^frTgfalD7mC%V*JSinN.]Uy)In,&G&3C:vy&~.>Kn{GJsk5CY^q>e$|cs|M>˼:Rr&l5w u7˲vmkoE52VՁVѢNa{"[0qG`G|4ۈ,خl\9ع 60?pTp9EgOc#wog勭)Ưr,-CeoE~W ܖ=-͖I5gToMhfj rZvJqIgJ1ӷx^Urj^g<^x$m3],̓3e}B7UQCOSzTVꈠ?RUZ`]` rVJ7HT]qǟFn9(-ʃs ̫{ )%!\yX?O:BRG{ҶH{XQƬ'gFf-[-`+G8h`+I%8hcQ**q&g{"+x#iBI)amnL{Ҿk4({GҾteʾM6ɗ|l"hllAm^U 䥼9)'mvde)mo÷їTh?K/SS` KG~b-|wrEjN@dkIl`Iw)-:Ec{R9w:&y+σ<\?}-=-c=nw]iO4펖w:-;KXH}0gj MOqޫ?ʓ`b| ^st楻_?Lp>1g-?Ga9Z{ޢk@#0/#dyŨxP-`m@ZE~ y&Ǽ !5Y`[[?l%cc/7yϣy[\?<om/|Ll~ y<6`V2f<6)]n>[pr}_^Ǎ `<eZp.ܗoK_}^'giyy9@>0̃ѷ2f<xO) m,*t<Odc:uK~xߑ҈؃y=5P ]}DW`>;"e]{&y+cσa]?t6mD}8H.L`6amY?/mD8}M1)E_5&ڽe˫pPqNeG>yiϼJ9fϦYh 6&Oix;F~h<>}W/уw.]cGSjߞڴVysjTn 5NUBBjU\*V NGp_L1类Sw #W زyQY;I$IxW&w*TC^Ő^3ap!h;B7i { /_/x|~I_#|A_{S^5EԳ|@ew/dw]ˍ.s'pwH?؟ҧx6dN~3o).ӷ͟G94g6~~Ef4#¦_4u MaOIP}0F̼RT l~vfIqDzcؒ\y)f<$16r ,w~ncXJ1ظY/u̿Ko<3G䶔[џQ7fᅲQàq=={ơeԵl)wl խK5kʨ\*TeT)![TkcSyƬW GZf3m`@Zմ:`c lli4Mm2M`swG~14f4E~{Pl{۲y5.__m:||:|wq\K*fff y-۬ޚҼ5*e[Op*ҫ] "_V@oG::9q;+\Nheemy<n2Z(u҆*ɨuCʨ8PyݻǡOa\EkV¨Cj0u!!F]rT:$GG23K6ݙ7 ll4Wm6`EDo$MF2Do$mM0ll62 Wr<+y`!~ގ(]^A^t$OANss?oec/qb/^iU.ɉvf2-&%SO5 qn*VoٳŃknV)tl>cEO*WGzhuwʘwy(ߺ KGqLQOԚLTLQ&a*3Sʖ%eVQJG(P`֬YUTiڴu޼y8g)AW66ʴOe§1`NݻV71L4|WO\r{;zU _w}B2U.%9#sk]?3a˝;\Yo^g~+G ܐ4*twʘw ?!y<t'afpSLQ&agȨ+ZTLOyzzę3g 0hРd3*l ܷܽ `J]:Q'O0ԾkKmPVʁ<۬]6rߋ11ӷkR0OJ4_Y.Id'I 3և kϞ=Zg[L+ G/]L0޽{F2of ]W)ã=Wi[$,ڵ{?3E= I<۩ZޒC5f iUwfRsHwҁyܜjMT?d1ꔙ)>>3r27%;*cŰOA GV]4Tqbɿdί:ZQ+gPN6>~V X:Xr|$ q&9BY8X88 aqЦ,{ٗ\SL`WϾZlTUlmKG.OۑHM1@wps19'k&.K7gw?]UZbn$N+ӧmڴIvFM֯_5~[T4_F))P40&NLarKLa&@MBI:u"]^'*PE=OƘ_ҙwȑ/" [eHߘ8;?W궥B;r v-VM V䈍sJT?`'jSmj(}ue/(^mT転k3W>\Eٻ9NH9@uX4zgRo%&$̾~|rRG_}z1}מҢSt0F^썱h/s<xK`R0/$DK|1OF q(;4$':ݻ7}+5M=oqehHM-)Дr?|6 ;z/5uTW95&:*vU o[/[3K930#ԃQ9GleLiV ïzf"ySN$GU |GrK%X^3Hϳ7Ǯ I%i$}c8{ emۖC|xSCFsy8^A- 4JOGŋ˨.k.㞷iIL aM#61V*GD l7#@#<)!9s'3%$I+Im5$H aha`7P66FHgyylhl q[I*)@ 6/JE=3?Cy\ՑmT '<%}<.NUȭ"/Ya94@^䬀̤͌p<^?<ۄ<\?<0Le< 򭫻;Rey0Cǚ3G~fֵΒ@iy7x]l< t_nI7:nTHoAIa^Cj%TlZ}ƬNߦ5+dܓ<툤)_~BZLϿȏ2y<=Y;]y"pRݡi9c`^chL=Gl YyяЄR$2dq| 2-Gӎ4y<~o>&|d@طiyמҵG=h8|_=F'C{"iSe“ߘ"ёҦӅ{p}]1pV\?/U6<6:.>}[X2e& gMcϋ|(I%IJƻ2Sq"39<0/]ey0-3fG$8%ӻ]VTuxHUclV6^>_}~nbF?t1p[?/69[|J_v_`CƦst_~ [y`6amY?ﲆyܥ7`W 4cM>VV^oCޡ.|~pI%,!e[SO~Grc7+rwzJz}+p![Nny ׻SƼk3e+ZYY?G`2f<6"t{ 99[{@;bʂrڿdp蘰a*%J*rI%pL+vzjmM e9'f]V#*i޸HPu^M]z|3jھ+/.ޘ;ޝ2]1qXOƬܟ7f<ܟgR&˛.<ȋc-inx#m%N;ūB"%9y,,,%ss w B٢9ՕQq|EAt3ss[fXuwwq+Z>GnK`^~sX\?oG.,'\m [Ney r7ʫɯ S s*[>SO5]V6v6T޲gˋ,y}Ɗ|RU: T@oN.[o,`٘M|Y*ۈR@q}/\R]:TG6fעZ5p T]UcWUpe,\* @KSiwr6FvѮsN9g+mB[6M6쵴v aիhOV,ed]LًhZOѼ47m͙M_-hL9fQt>MShd<&M_A*u~^Zy).Yck;2)V<0/yyw 6F( E ll.-ƃ-`cO i<'=Ǝ14c<ܟr-9)'߁gkg n ?Z<>`'I/G2~#iN=}?1!4u:L@Ƭ-R~ƋQv(9,oK`^:ʘzSoc`c lhd,3,6 H? Ql#h.ؾoA4(Bo4?G y)6] iU *?G1y`^9bM668h`34`A`c ll6W/C}_',D<{M3G{ ORҚt c`^dɘ#Z`c ll68h`M66ؾ/8`A=>ϻSnԭ+uB]:SNԩ#uTF"avcؙOH`^&dP邭ixӜsZYF+bc ybM-֕ uNlҧl[j`-VlͩGчajҘ+ȗPV~1$IRw9T\$)Xvy&~iEyn_Ip:2FƬ'q~;~ѻޒzGؔa62&&6-qĦll0$ӳcIvCy|2RƬ'Ǹ2U+j م0[3kb`666sWjM2o.T )lfe^W쾲~c5'mوRTʝ#ͥ@Iz#ItK&œ$=R^}%I+$)3`3ѾMŭj]@}+.mk[J7{ެR9a,:TVl2;se|V}+?l9,hy*/G)=DZg$-$$$MLQ$$}U$Lb<󲕌Y?O095;֚Z7Ѽ>\ћ,,hЈ18>WTaU{^μUcekf)Guff"'ʽ)l'pGeKSi|.X[y7si ^ͯ2o RQ3;7s:c"=5\'I T6*LifqI+Iw5oY&IK.! ٘ Z#I%ia|0֫t9蝽x=T>dKwerN]y([y`^dwZnA-l~"Oх{tV .nckWdo+w*f<$16r qy3hoSiS/?mc` KG~<׋z5&|LP-wEütfpc–ʛO5!W[\y`~2_MӝR|>楻Y?MvvtF<z5E8hӹl:`gбw(ks8_2\R433_+lf {kWQ#1\ sWzJz~p![983\N ,SPűX2_& ybvy[$q\G/= b̂OwC{۩~(%gbGߙWkk-ݬpwꍴ6yֶv"Wj1x 魀2]L[rŐ_6лSƼ'\A&ۣ%0/ey0l툒UxEQKᴼ,ա7"Ǝ_Ĵ9_*$ʫ\ena/[hmMKx 9QY~+.6t鉼fz+̬ñ- e1ɮ˼ZmNzu2׼z3նa|ʫN}Yk.*6T޲gˋݬR}Ɗ|RU:nJ1,Qua_?oFٙ\r{;zU _w}B2U.%9#sk]?3a˝;\Yo^g~+G ܐ4*twʘw ?!y`y'cc-9o3y֥`` j?+/v*F$v@Pk|[_{_0/+$$;P@\ \ \ \ \ \ \ \ g>}իq( u%B;AAt֭keyfРA kϞ=NێիW'ceO>vvuy_b{ǎÇK ѣGN6ÏEuw%KK˄7KWw*i;y&n12lӦMaX ? &Z=8 4  JLn (K+j ̃)؃ ̃=䕲Ns ̃l%<<  ({z`yd`-[<rqqaP@A`yeYm۶󢣣O:CA`eM4q…Zlmm_|CA`e1uNNNț7/SUT 0Zn 0n߾mff @APAAAZ?~< y j*5𬭭qL ̃l+1iSu8 APՀ̢q@ ̃l/_p4 ̃l.ЪUp( ̃lSN8@gZ&,{;jg?4eɉLf<)Ro~<)|(m,?ⷧ?.zB04~5_-۝`6M9zB04j+aoy&Cg+WtϦ#nZiY31LyOn`enfa^է oK~z-Bd0} WTGYy]Bc晄>x8$;7Pe*ds|`b.nK Ve㼧h Wis [k…mw:+ctgJ+.Pz+169 oKJ9*`vSѿ_ ^-x;N.Du$ߤ⤍S{_ ՖSSzqOvyss]*9zoڱ{C&'.r|+щj,ikk[pٳgU<~o| hsIˍ 7;j +|E&8\],* hYAb{p9LY޾H*[%X5f\<f#x{eo3X;(1o0o6saQs VpyNkG Wƣܨ!m.G J]%kyONx u. lưw*_zի]tAegp 89h9O;1 &q_45ݵl]|K>l3XE6ѭhAҝ[龅 jP <ݵHkZU*a V63˼Ή6N WG LE[{6;K"%ZGE){g5i=ڵkhv*齒儘b yp W (aL` |q|w*_S܊-a`]ӿ"C ?Vcb_ge6lD#-eX! 8d,-U -ӧm TlµMxfV֎CՓ;UR?8 Ԗ?Z?ﳇ ۴qSu4T2]^[>\YUOnٺyL` |9˯;?Ke4Py-]*y` BUf&C>ڣpffÒַ%llrx%~O 晆pO:jc{:S-8'+E_+o׉!gjhTi%3s1p4ڡ]\JwNx MML3 rq7a6eO[C0$e13 ۻlZB`ik A0RVғkMGHa v϶{ I>8sgdV}!AQڿ"J4̧ *l;a^W(8*vq>LɎ9H'98õз ,Ӈ픆mjӇ7f; xt"Vy*WUI%uChM/8AY7{nAĺql+RKڹ[ ɂtox}G,QnSѠ̣̣Aj!]5nȘ6]4DimGlas>cĐQJG;l0K_KI:,#'>FIEaڵW=$> HE gGRϣQWs+gm9&LnS袀5~s1puY3F lR1^ohapD1~7-Y7A:?x۷LKmT+ c|FY?׵s/ _ X\Gm5݃6g˄,G]#TdGRϣQWK 2'WUΝ "͕X7civ Jvj}?駵tAӆ}/+v9SKuLBUkQ̣(ZJy4y䖞ox[76!I$GȲkaKf]"MS/5ʱtl2ۤтdBMސm<{˲k~x{ǘGQ浔h!, ?fۓbl"/nx{ǘGQQѠQdѱM<tle^3սɴ~ ʼw?h<5gnܸqԩ&6w`@'~ ʼw={X[[ǹlZL6iPѱM-7gC3C]xY_;<^͇zQQѠ̣ldѢE#GTSS4iƍϞ=Pɻc/zV@ |MTh|3wZ?2T__ܸqW__j}N&H; #L_K+iOoNg@}ey4ٹ'N200@C?tңGBKE?,5[O|3Kz/>ZutHDGGGEpppuō7Θ1C]]}zzz{N]*bΝ-BwWPPW_UӚuyy-%hy%;97dܹ#6wO 5r<Aua7o0Ç[Jr\i|ޏk'|fְ8(h-E٬a3\l,9ĄӱM<v67^Lw[ eQ1?̙3=zީS'>\\\˖-9r$;ԩS՝{RW䚶v"" ~4C(;M(0,$FyMIUf3JQ;&Y|cGe\psU^wi̙Ǐ_z5MMMmܸq&d*YRy_eH#zRM 1 M 2yKHe@y995ttl2m6pLx]LJ dz JyV$3Py\rXٌ2zf=2ﴕ:!gnT/Ljnݬ8ư͂a96cFqo' 8d_ wQTh>KH6I?BH 6y)y*/2\syy-%E-!2$u:1d2-Z +4XeF)Rost"o#b_sf0aȺ9Y7!n ~aZu;L[AH90k䧑;NWy_Q{H7B !~o>Np"3CXvьh<<ʼ&)/4̰]4 #-A*LPM$A5~c˨7s{&wgKadɽOy'6n‘Ii붊KҺ-nY#$x.%\0oq -kJm:۫d2&A·7#/n˪U22~m1v@KGGE31#E|!4lAq݊Uh]NEaڴi |zU&(r)~%Ko|Q OK͏_Vnx!0KW$ngAT"fo0l[m>nĽo&y1-*r5,cA–ec8'[-٩J}cpŇhsv7wM}YYQQ;6oʧW3ϣk),q6%,ZT Ei<`l6dKm ,RȾ5ȳl}-q3#tgK 1z>㩰Gl%[1<Z .InR-vyRKM{=ֺ9ٽdX{6Z*g"H" 2cκc'PQhӊaghݘ jw  Oc3NjVYA0z uP&s=:-Ͼ2~/ѧ 8M{;9BJU[P~f)5˧Ӳ~ec1<<*u )a [W b|P+ A}T[&K[n]@u}U`P8pu:LQҙk؎Ns&\|`"Z7g ;j#xB7i?l!*hHZ=gh Y7r6jp3kr(osǸ#c4y~ct  #beĴlR$ӂi*og aw;m+7fZ #o##54zXi4=:Ո>2221jY0fg |!&0 ϻfXolPEG>(wht!^ olG%iRa:Sgu)ҔtvH#4ykm)>y䤒E/c2]Wx%/f=f()FFZܧ箟*)I${ [;FXMMkrUѺ{2̮?tKmYԖ  z{d|\Iґ{TV} ʉ*Uծm{ںu+ IƳy~e^KfQ?e $&f3x0ǯnoqTjy@ 6(wҵ J$N~+MJSJUky,Bg.rgח?3im:]I%|hMQvYdgf(kYgZr_^se!-tKny'FM/um$b׏H;n.Z,Iqk\jh`>oN# h<ʼ͢~y-A͘yv'cxM*M82 Κ 9]?֓1p,!yy-%E<ʼf2Fe,qn-CBYiFҍu}lVO~l6e0L 3ON ۖfC3m<j\%'׸4c2eD($n``>={Uu?ٳһOujv*&<宍E@Oxx#S ̣ۤc-=lBtqh Լz*.6jkk9s9r{3=]g\(I7*? xWAFޫWka(((Z|b]lS'1:3." =Z3ٳPw2Y Uj/s_&T{/?n9Hh:Ç;Z?2Dǿ_:zVXAˇQ9/-~󗬒Tah|L滤uE%eRpîC5NZ]H!Zš >2&G;Ol'8Q#}2O#t>9b_6p_ iNCm+sn``Ea&gnWI!v&^{XHi i_/Քyy4%£b/'s>UH(J+*B$Qո2rpr.[%a\z2rYtM|5= >iҤǏ7SD'6)g5ҍ~)> ]Wԭn9-Z7ZdEMj"Ogyy-%EҮu!|c |F Hˠ~1 GHeMHagOzS3N`F 7AxܹsUUU׭[׌F_O|/OޓDE$&*ЊS|cG1ԑާF-*U>2& ,N&J%Mg|A!O(r|حG.>mXdъH+9C62ROޥ=Qy زpO2Hh^Zظ RװS_)/ДHT  FSnQsMm-ZCȷKo y! z^̣ۤkB1mN L&?Pyr(gfH'YAN)|K)0롱Cl1gtk}U?ZS}1H#3ΔWl_<^iVZ@9䜃mgޤ]cJ/@ϐÐjgj0*{ϣk)ь||<˓i,o! p<.|Ǵ2H}X.LEOH5ZVKvv+.X&z%g}ƍ355mjh<1yvq8vsN=2/-=qo' 8d_ w,~ Ɛ8 GH;s}3U^(ZJ4ya*LpRH#  y&3"q݇$QD;Q2D۔nQX4L. [Xm:d|ِ:,v/'X/v}jSg [f3~WGΖH|jں< [}< ׭>hHmh& gSPP1cŋ.wQҔ߭̔GȔcG[aiS^]ԕ3/ΕoP_x#C|I32;]&2 ^[__'̣(ZJ4y,*Lp!<3l4 y-+1xd>WPTc]lpТ{UvױV[co  ӱN^g=ixYm>5`;bRȹ3ٚ-?ڵk۶mG|\֭[V&b)|yc/Vǔ2x򅆧er<*Ҿc~m̋qdF9$L"xF3|& m*r5,cA{=;&elr̻Ax̃bm>0Hl->q/ix1Tc:]sH{~^.6LvgY]gtܽ϶ aFvipإV`nΡ˳3Y<@XBϧ6}}};u$QV__?Fϭp1BܥMyXݙ=)?z=zDIS~:qEDӿ55U~BV >CƐX]1dxrqRs 0L :) zt8Ҁ&/ RQxwGC>UQNIx`_NQ`㮩,\v!m2QIkat.LwtSb^"t]?4yKvd^ث?otRUUEogJں5;i%ר S^R)ϔ[W*2~o;3EWnEmN@yDSx&Lrcłgfcwv9AfA/Ib=>-A)aiS['̣(ZJ4y.NLp^"aCyO^É #p!z\$&JEgYUvpK,_K?5~>[JYwʝy;z(kȑղ}lxI`gZܳSMժRS>}햑+)%x=t{,^Iaҁtޓt~Qx} ɄI S̙>Q-g aF yVm8d EM|v/FQ6i RSSCgmm]#Vۇ/2؍%&+tMܺ:\Uky2MRNZ8}>Wo$,]GGWE?8|N駼csiGwI&UI0׻<:IGׄ-VO|Yw:T_S>]=(:Iwwu֩֞SḲ(ZJ4y˔r~1b5xaCs>mnMMMCCÀ _CDIDAT.PnR5;yy-%E< ¦=95{lt{d_55WSUU;wnQ+vmRѠcn9$խ,rwJSK0^icﱏo|4vJ ^F:fGF68sԩSη}Q1H<'ϯxGQ浔h/0Sc2RRR|]ѣGڵ&&&& ^e``>{l lɸޕN_5qyy4(m Y,k^Ɩ-[~_ҥ %_޽k}-M49bo~x]<ߣ .͔|SUU:t(uuuf3k9CQQQ%&<K7:ćyy4є!ڨyH-QٕV/.|GG~T6'!:M`yP0 v[eѢEӦMcmo^ <g0XsI ;tiʼM~^lEof2u8?Vd;]X.z9RUv `.&|(Jo w qDcYl?(>/Y;m"H7UDpf{h`sh-[fggǵ#yH3fkGJ?dKՉ!r@:IG69=6cuF=ap?3 p_ J=nMޛNPx_hb{e!Lw|! /AETY/mZWCd d Y!d㐰1Lւʂ#u4u^0k{ƕ6AΫW"ug Ngu/osk+]WP%:|i߅ݻto222l!d$aG7"d-W:]B[(Bk(+Yb#6#l>s`&@9elҎ@aH5dc{ i F t0cS }nƍ2oׅF_O|`'d]|lGkIOB yy-%l2Y$t&0C3Qo]k-vr- 2ZϧI,y/2O MyO"[@@.y?G#$؍p I*2;Ua8z~-[ d ag RB_3OrU,_Q"[B x_8F\c82Pe"-)P!UQ$$tRKG6)h4y!ZnI6Y# ވuo"QhZ7B3l[⍼%h>̓ p.M7./c8EGg0S;NNyThѤ)t?qBV"M'Pd2?x'G1'5F l =@}@.NJdgN͞b:P dԩSXuNNy;!Ni,̰=FgQx~(LPMJ*M T;fx3۲4od_ y~e^K&[KH:l"J->@cyIIIұ̋djkk?~o< G#]0Kc`"m!s͆ a?Ţ]] bwyO?E0n=:#&Ζ< Fo6Sj߭ftlel ~ğTxcm:]I%|hm;2y~ÐnFu#-^81_^kݘǣՔϬ^ :*! Vp! }o7jض4#-0'.dzNNe5̰ y)a ^/#󹂢C57d-QmݚҪuk{,Atl3`Y,ty+e޻M~yz's&uw;7Xk5ܽrVȶԓкݙ_j'qFNYUGRlZ[kIIг! ,C1c\1I]3W/TtZpwwWSSv&kur2*,3gE3 f!iaw|\MKNj4|P袟CڳGEsM>I`iJM_me]5Y-y s>-y~e^K&[?O wdW/l}^E=4s vNN\rIK CwBу9~fw;E~ GD-d~'=l8 1Dw4T ۶Y\zSjSuV:I2m6P'7vR" -8kqv}o~Y]<>zIq .˪U{汷z٩Scǎ5gJ]@֧b-OdH,](\p!eLlv9l$fY.x;j]Z22e^2uI&>R=7)'`io%'*+gd͘12222Fe9W<b[ROMŤ%qPVd|UY{ܿ-Z׸w2GRϫ+mZ (gaXn @ءɄjryTo)ry\˿%K5:XOQa<&0mRѨ7߾;'._|-]^w=xxPˋ@d5 ^d!ԭ`^Gtl2Fݏm|y!rjjd8>EKb( S-WZ|HF%eT? WVCZ3fC`&ay2ܦYa +e"!&K84vAeF}%~RK'R,܁Dy$uoV~ WiUoMX !v"#N?E 7%&c!>EFyGzз91ϣk)!O<I@.y()G.W$"J!hY~U~A ʪ؎ǒ`' $*["VW@̳)falU3,_>[ENd^C^dאyA: APt̻Myt}ey̋ ڵk5Z×"/o%;Doժ _;v -gu="ϢvTμŋGeg~|'R*)3I&R(&Q75$+X9qYu'Ed`lnu[ŹVHx=|XvB}wҮf5˶q<}BD+n;fxSj4\dP=tUŽ1iS#PvĎ(:IG1/ZjIe6!Y~f|2tI8,b)?>+ٶyToF"^ ie,Qp4”xfEЭz'ν8N=k<3:{_o~s[hxZzK>>P7D#euodR΋ [yG6mɼ&{DGLӁs/]ҫqGQ浔~y)>PYn nއqlrTUtXȉuv5 #g%%G *,v/'aj.@ " [fsp:Z1EO̪vZ,[جs>cĐQJG;Y,uH-%HB^bŬ1'Z֚ԮmL'DÅ2XZ=4毎}:ψ1o7YU#tgK85FOx<Ԯ˱cX&~^M*a[yG:"HVGDG:[#yGގyOAјhf_`֘vΦݎʝw'Ԍy>]PZg:&_kx!\b1X,,R.M&NUkR ;2YbQuXGcG8qO'ZY`/Ayj̣ۤ6*T)q7·!pG3Yga=\6N֭r+9ZXRU{WSII?ƢKyLR.9=kGҙK.g RaY)yS,MX>U%¬:}ܼogobBuSTPp}!b;ȩؒjs.溒Eo1Z4vD[#/Tk0am;!qҮMi#ee ʼ&'S3m_xdyh[ 齦S:!7桦}7ŶPvn&<{t<2a[n統+" 15 b\?8Z5c}(77).I&elB{9l,*H(J[lSV>W>eCsw!xK.)#Ch= {{"݅0 OP""oB3*GB,?+Rf2%ݼ {}I>p,ߙo "Qyȵ\s99g!WӐu 2OBqHCʁ;^K7<Zh<ʼj+ TO=wD tc)~`_P, ]'3JvYnvGސm<śm G^9ؖͰM2 .4xJ n9:$ʏ-ی6o H7Ҏ@aH5dc!?eft_QGܣ*/6x,o^!'\-go<|*ɢ| Wr~lFep=[$nnɲnb6)ɴn2>Dl#J)rD7'ݍ==#KQBgmGAAH9@ n#J@F:]"=w(etMF%Ō 3B( QLF錒 rr|&e2P$N'LEiAԥyϰDudEMr~"K$C3# iK`/bX%lC%ĝ m~"B\bT*"\!p2!'A84FR`S̻u˭^yy-%䩟DS MI4T7 8E>cZ>,WC.z8x@RsnrLƷnMo" wbEݎ"Eyu]-iomcض61 'Z ,eJjj2 "$F)3s敖24e^y5ݪiRH#  y&3"q݇$QDϻz)Yu62y7u[n3x#$*V8)Z߫;aF3x[G"WEC X߁!2"\p5q,c (1mRѱͦȼ,ZH3"-I i |%)ubDf]_Kΐcd2:#q<[)p[aB eBPjo+x _F--%(A"Ba2kj dȇ22e^mrACQGiliѰh -v"QS-ՄgX$8|,۲'۶Sꯩ2R~HkRк=2)7<bx X %A"eE~ QgȺaBo !h>̓ p.| ~3R[!rkjqQ"ȱ c(̘GQ浔~^a^`q ⣎H ۅH8D E$ ɯHT;fx32e?>bNyIrO*Ae~ȉ۾N`̑I l,@N3k>n-VHx-=@m%=M@,̆/s9oLkVAHi'\@e܄FA PTWAѥuw3ArQ1;3)$$&(jZHI0b H+(l@GC/h`Lfjb- >}M#"n_.jls> 2bBF!P7;O[KaFG`XgG;;zx~\RreYUf.|y0(܆<͗uFV <rerGJ?!#9$qaAڸj3ȝ  '^W@!0̃0oE+Eߏ,ᑶ.?*g=9t1Q\w+f]Lw~d* "'wwK6l|g7=I_7}Aʩr;_9W̃ϳ:s<;.3v7wS5Qv\}oŞy3Hm%.] u]t"kL'kOhuT)]Xz78q2/hzd˙WYa2/I%|7VD{XKKQ^C>ɅR3{ZsH[ \s617q# :<cƈdX:nG}{NrTyNrtcQvl7iu$;zp'{퉘7|2F F2CRvl\Rn5W'la.KzݺM0c- ~G$ M^+7ˎeLϳkyeɯEWLxA=?iSH5\`Ueಭ2~-g^EɤoI%mpZizr8oNoۚu2k.uoۺjomzO8z[S&4qjSwcyPn_\;p.뻋Btauo, 2:,|L=='J Ị>o{X5y<pI1n\(q}}:r*qN !ٌp2umJ}DuvF( =vt U]jj6[IE"?O`^bT7 EZrZ{yvUfh|[Z9tsoz.*,q Ch߹he&JLI@,G \K7DhNR떽Bz;z쪧YWyUrwϫ]4m>5qU>^qoUen Y/ l?օqأ,-b8s{Hf ^=q*j8[io?Bݙ*CZ~`+66P6&YIE"?O`-J&*u#,VH+$ʳ:h C\˺/ @^yaR8Nx֚so޸⊂F5=C\ ;@jFAlGj ınq|[]Sߌy*/,}WWVݣ86-3]]Nܺ+8xNRWPܰ!/( myzC3O +M30ޚe-I,b 4|oTVA۫6."mBx[jI!!3IKDį "Y~};484t0lʔ ,Q]m]MyRѨk4g 0iH#SےF{{Kr8QCJgRX&~kHi!??)=2 SVɄjwDvϠ%.H81"ȥve aUz`$ަꪤW qESdu,CDtf-`<0).ܓR+ '@XtSa {Lyhσy BAlqSj& =yڸj3qJ>iR9-22Go3BrJv~:gVx~˝;ѵmku<0̃<10/al\#9sfFE=Ʊ;}[Ļ۲h//_а_unn 0!?̓ yfMiT2q<='DD g:d !G$$%233{Բ`|AyS 4ШbחP*c/aQ)SI3: @IO豣c7?aC0 0z\˲`I4#i^go塚SVS`OoC b~.CZiz>M^ll <y6ʣO^ewwFMMߌy*/,+U e~]ޥ뺺bߙ,8xNRWМ^y<<yQA&U MrF%ʩj B6!ADDDDDD*s;opm,""""""Ŕin C""""""M)G$X\z饬Z{ Z'>ײeKx ڷop%N P(9$"""""""҈tЁ>(C""""""""L=N)9$""""""" RrHDDDDDDD 'A䐈H#V]H!F.T(DDDDDD$ |h.˗RPD!PZ>^ہ:`5_؍Eq&.oM TrHDDDD.(.I ź? d#|c`1NIDz9sٵkוTA4r 㤓NO[ntܙ,ZnMzz:iiiƒCEAAeeeٳ7lݺuֱrJ֬YCii%Ca13D$ 0x?3m4PrHDDDDnHy\x\tE\puY$%%Dl2-ZĂ XxNY vH#3c ֭[ֲk׮套^RrHDDDD$.ylða۷/F' ݻ5k ,O~,f,9ݬ}ǣTyرcٿcB]rTnn.{Voe"""""xX\ڪU+}Q6l9sc-Yv-?WK)@zxx[yX+..b[~N~~۫7X|ZPC+й RԩS/T/~QU> %2/rUsy;rH(9$""""R{%111[o]88iبa¡!2eQ3ĵ\䐙٠AlѢEffv7ls}r={?Bͣ`x۰aCȘO9{g7-!!rssmU33T,]vsj|xW^1cϯv{ŗk=z-[YsHjj\fϞ]rss-!!F۫|Mut̪+Zi}K!+(oMÑj l-_X+Ԝ+R<NQCϷ믿va^zUXgҤI֢E*m{Ŗ{$~njc !ND뮻"1c[zz͘1 -33JJJUVVXXX 80 ׿%$$}Wa{effk܄:`U:Wf`ӂoo79?9 `VVVyyy$$$p|Ǝˁx7#Kru1qD~ӟ\XIn?t҅}, QԿ\zMہ40y睮&*kӦ ӟ;w.ׯg$''W_M~~on233iժn777;?)q-ТE ڵkSO=s7R|AڴiCRRC ~yCm~egMbx`yl׿;蒒 ocC_|Ekݺ-\0`lƃ8U_{rjԽHI&Y˖-K!+W]ysҡC6m۷ʬըټySOhYYY!ku%wczwUV;=Pq7c|GO\w-}]O=%jԅc=/SNSFr,Bnj3SNf?|o߾?_km,7orHm"ٳgGHEEE$$$ |mxr-Wb˖-۷1cT߱cG.\ȋ/!C;v,vb׮]#ȑ#ȑ#| 2J w[oe1--5kք<g L8q՗w};###VZ~k~m0Նۍzr,`ժU\">#G/ 6mO);vO0-`b"""""+ʲ"W%/oubcc-;;۞y >|Fm[VZĉnwv'?v8`7t%&&Z6m췿5k7Ԟx ܹ5kN>d6mZc-++Wq}$i>XV[r=W /`ÇAً/hf|͖bZi{-!!y33{-33B-#xi۷W_}5>M[`egg[ZZZ Tױﴛo9:W>}ذa|; 7W_}RRR즛n ll;v찲23sjeddXFF:ʲM6ن CActKς@@\U>H_Wg/0+0 )\DP󀗀'HC87J7|c]vu;&iĈrr7> /C=df osεnݺYfYnnYRR=sʕ+-###rx≶`[beggWX.XylС*\Z{6{l;wo{8bܹ͛7}ݐʕ+n֭[ۓO>iff]vyU{T6p@>}ԩS s t^ u]"EɡNx؋I 5>~ӥh3DDD9(_ݵB}뮻lϞ=}v۷3퐚^x[<Z6>|M; 7.]ؼy { ߷d3sjyKu5?<+xlAc@cǎb Ϭcǎ*oVv#}EC ,fm۶6|p{mݺu%ܹx կ~eݻw(Z $tMH< XllM0A?9b=y<o0joNҬJKK}>馛,99B-UGq26~x1cXBBo;I&Y-BN[xOxBMy@rӦMd:tKMpcyW-99BI<Ӗj6i$3sJOO UڎuPXXhVRRbZ 1^2m4_,oVvQ!R&ǂrRRR:t(?O9sQGpӧ/uV8ͧqC˘ 6}nt`޽Yf+`λf#Vs(>s?"5Pbp2Cmɞn혤 elٲ`NݨDDD$  袋 83UXXȧ~ʢEX`/;:{ i!ǹ'[o>j3g3Dl"uAɡ= ܗܹs9ݎP6LwC }]$G޽y֭[[6! 2,>>>:>n"ƍ}n>pm!""" M?_G[JC Ӽ@+" tr\i{%$$#}ذaêG>KKKsW_53+VX^,66>^{5˭8ກ[`egg[ZZZ.Ga&Lr;"nve_- qƹ">#%Rۋks5c8۷q!""" x 'N-F~BCԽĕl֬YkϘ1k׮6o<;wu֭ʶݻwٳgܹs}ӂ#Pl?_aʕ+-##N=T{gСC֝7o}VPPt@x≶`[begg׮];2eJlH}Srz֩S';|,"QmC;R"h;pz߼6X=ur<9{kV\\l/--/9hff6n8KOO7㋋TYUVjZ7P|qqqcy<֯_osN1sE79S: ;3f͚KP̙'L||<]t^㩰0`$$$pW_>KKKyiӦ III 2~BLO?4:u"&K.]O^]7+Gr- O&#>>JHıff…,\Ν;ʪUx|u҅hѢQq1w\/_v'K/q ~ <Êۻ-[l:y\Zl%#ÅH4ZOǶ~TV 1cXBBBZ=^͜6-==ٯkKHHϷi,99نj111n_ywy%&&]wgi?8p`uŷxb6Pa{Ϸ믿>#iu)RXYVXX*N:ٳ>k7o68`ܹ^zǎֶm nݺ5*o{∋nHU_z}{CDDD$=ygvx0ѳ}$=QXthԔCkpɡ˗[-==ݺuf3g %Ko-Z}yzx\\\w‰; ꋒC""""U +03aÆYbbn0fQ&jʹh^~eC ( %+*++ٳg[vB.סC6m۷ʬ ꡝ:u-[*jZC8DDDDj %&&Vj6qD;D@G)HS[ Nc ō7_JJJ039⛗ƚ5k*,_TTDBB lذ#G9<9—_~ɐ!C"z,q֢Eؿ?j`ለDWEEE|'[f̘1,\.]x'ip y^SN=zX\\{=߼qjx[֭[7l{gªaSZZjOl-[ 8px\1irssݻ7Jv1a|||̜9sKݎGM6۷܇SZDDDDj 쉍m3{$? IDATln6> Pp5cyyyn!".ꫯkAXJJJ… ݮ%MԆ Gުj/LDDD$O-&&Q2ooeꩬXhР 9T Kxn$M˹ضm*"ݨDDDD./{].ʐHb?QQ曭$9rƍg͚5fsinDDDDqN'K-{d""(܆%cYYY6yd+))q; мyO&ʀ @37/~9Qy8eiQ}(Ec/n+))7xz.^"""" Q'qZOO8""y87XJJqh"+--u; W_}e>u?)=p7-$"""R.p]p9שAc\ ضm[j.".;8蓟ϢEXp!>k׮-w`+4 7SqD{q`+3Πstޝ222HOOu$%%ѢE W*..ٳ={{n6l5kشiVbӦMWۍ{4iiW2?#"%I8\ tr72{O`Pf@Q@  DDD"W8 s7Phi;h7$IE't8 ydlZtKɡA!ibqjq1ODDDq Gp~Jq7 n .AdeeyJr:+Rﻏ#"Rb@$}W`$%'""""qjz_LAJ"҄OO&s{aI]xy<P"T"""M.jnp74V`3Nી .%dNSEfr͏ !Fz8pDDꇒC8/+ JB+Lc=.ziZDQSrH`4p8x'qŸDDDD$:<ӓ٫9#"""@uNo{qGn%{+˼[?]z饖lvgop`׿e999ּysKlÆ .@9b=mmРAVPPPe֩S'KJJ!UӸB?&NhlIIILDDgp]EDDD"=N/ޛ\E%[}ہСCh"0`@(7tY:d&LK/F뇚[>}l˖-VXXh~5ʺ7ڞ={ w9 dڵ*x{NDDDjhOgɮF4E49ԱcG{m…m6+--Ybbb6?;;֭[{sNkӦMulV|5 5ڶm䐈4e'8߅MDDDD1K+0̀&+>|~閔dkҥK .-Z|8͏HѶkpȑ#YYYJHS>niNp@gW#j:"WRRbedd\;ڔ)S|W\\w;wq{e`qFkNMqt9R[/[]@?8 KjO>̙3S\\IJJ\۶m3gN>䨢"HHH`ƍ SO=ɓ'SZZZ#F`ȑ|wtR Pˣ<wfϞ=H4)~n8"""RZ2_>~jD[C`vEYͭe˖veYnnn2/k׮6[NNYnlڴik,Yĺu`KKK,;;ۚ5kfgq͘1#Z=8؄ uLDDA@)pr,"""R.©=d8)@5Nǔ 6DDDx("+ m!pN7_q{<ӱL pDDC"+it`.x8ŸDDDD=c7qz2dH)9$u 8=U\W,MT&J!{S8>n%""""|t%""|^m\a Ö t8`']EDDD\~)-_M u1Hr6p;]EDFےHt\_:UWB33OKZ+"IHSيS| 'aŸDDDD~>_ GD$_`6W#82^XCD=%DDӁq~NUDNk+NWTlN8rrrh۶-;vM6BJJ IHH8ư)((̩8TRRBAAݻ{}voΖ-[Xz5| BCPıK7 Cz|| \`HM 0gtIs9Ջ^zq)rQDqFV\ʕ+eɒ%Vhs'A208Fp*7_y}kU&<O7?ϥC""Rҁ%@4 "R'-zqS[nM~۷/_|1m۶0E^ii)+V`,[&p709'tx W0M"9T 'uE!iºKq"qE p9͛%%%СC߷inj'NN;ͼ?cf/ധy2W# ̀j'.WSO=SO=mEu_mN}we5N]y'Hc؏r˱H#z lhP.v7Z\\-No{ 8NSL7ĵPiiu՞y֭FtYvPrHDDp籲]EDxIر+vz(zD<[-&&{E!Héd8ʍ$:}q-94k,;3쬳βٳgWO>imڴ$~f@1cXFFل |ֲeKk޼]uUs /**#FXJJnEEE_j;wf͚駟n+W z*'ԺӚ5kf;w>dܡ5;r=i6x`+,,ĉcǎx[M:74 8.""M@k`1`qqq#RiL-[fz#\}L07=]P߾}^23_~[e\sܹvi}F?C֧Oۼyݻ.߼N:>C;x۷FmC @Ǝk};wڎ;+{²-[7uYAQcnFFv!۴ivm!ɱ?vW͛ІnwqG8WM:߷4~مPHh;>ӈ*q>~<F!758p)WCyyyUSTTd~ o}׮]k;v@;v5kք,333vMʲk^Y:tPaݻwW~\\\W>Pvɞ}YۼysX;wlWޱcm۶²[nv5Q~B""x|4T-"Qr8 ۱cGD u:Lڠ䐄aʔ)qmI rq q{<ؽ[aG.)) g~ؠ/Y?|kѢ/&G7PӪ;@Ӗ/_nt֭͜9359Vq>G*_X߾}m߾}4M "Þ4RO*B EB]tI'YYYYeeev'*A&M d|+X䐷І *L_~}DTVS@juMf2+((Q&++BLk֬5/ul֮]X;ud[l +H t͙3ǒ >}XIIC""Rҁ-ź4'G/xa:hɡ%w~73{뭷wJE-!|۵wi~9}Qɡ_~pW_m'Oo֯_*5hP֭߶CY^^ <ºiii1cTh骫;ಡUw 2ľk+..YfYFFFȸ;`oo߾n:+))/VkLFRrHDDCW`_]ED6bĈ#0oZZ/9KΫs9^P=Umذadm۶'|NΩonhz~GR7]grxݻ͜92grKh6zhkݺj&N[oYn,66ֲgqe˖A}A[-99ْ[o\6Դ!дSZ=,..zi^ȸ;`㥥O>N>d6mZXS[vWn 0ԥ~1.""-\0H!̛KN}TZZj999d33裏,''JKK+S8"TEխ?vXk}+_'m\o|Ѿ=9W{_>}I )9$""rZ)c{]0C %iҤI6`33+{c,йIFС^?>Ro::s\[qz94%$^B${FDDk$Np^'iMr!S$:tڷooo;Ru=)4%۷m,@n_!z̮PlSp5 8w6{LDD|z $gP"Ұ4ʼ7zI?~~w YsȍB#{_ pMm|!/n2hN2PW;o;K87# @;EDXwMυDh4 R7^r%)59Yﶁo}6y(QiS{p1nS!z>p;Jy"Nqj é1N )8>I*`J˷8I,Ti E8-p~H(ӮE'"Qוv; ~J/9nHmEm?ptMhmڴ֬Y3|7zFЕ}M6sgF-D=oڴix|/5ku$$$ozr44 8ɠmcb`:{ڮFqj H_5aɒ%dffx<8#V^M߾}Y~ۡDwF)@՛$>A?On zxzKV?~<=o~ZZ:W\qoz+U=NZ&W}L߉ӫԍSqj'&&k֭[s:|>x IO?YfѡC%ƌã>Jqq1v=z`ĉnu^|EFEii)pw#r)8xB_iV87JIT t~ t҅YfѳgOrD'%:PF+P-Lۉ#~"".x8>''9spqf^vee(9$"TU5NXƎ˯k㡈K/nTQ-NC7|9GA+N-#׀kէVT9A[R>gHCrcfYYYY,[;VXO?Ț$E Tpmȑ#>|=R233ٻw/q8]ދ gg?)))HXb&L`޶<>[0$+,SĀCݔj=*ԖϤ VK)TrigH$t~y\5 /Ǽ[/D 18pZ'))|\r%M$֭[yי=PR}HS{p% N:L.\0 >OD](UV\s5\tEӇ: S'0|Ν˲eowqXV 'YP!fJI5R 'Tk)UVD4=]qj ݊S3+D]3S:6N8=\zE^ٳ'ii}_i&VZʕ+eѢE߿}l ԍrLƆ` nE\DPNg 5y N 8wNVG&"&SSq~9k'`N"-+/ANNwdggӱcGRSSIII!%%TiѢ1#MYYYPPP@aa!{e|wl޼ C IDAT6n:֯_s=k(! oC(9$Q[K)GZkC(w.)zV/DH\Ӏ^=}aDb\|Sjjϛ22b8(9$Q*XܡLuR8 &hԥ8?HD.8]%v.SHR9THf8~)lO l6wlV|n~2PrH%iE s2)JB=,"i*H]RrH }5Q^4>|%PrHB-p}K徼Ij&yيH(*HуkׂCTppyp QizHSSH¤PrHV=*Ԗtk(X-P 6ISrDCTp?Yt9N!z?tE/K0i4W_;ΏKj/o(G[årDCTp 8Ǽ>8YO}ShB4JDʵK.y ZJ< T.SrH y{*:m8\Ts ah(9$(%٣omp~PsK0jud%qJISUɢ pz:kVclTFC!㭥o@|-uk'(3JT.SrH %rVTlrh٤&C"r5]]r̩\K)^f߀uy*H)9$NWh њEA>1pclTFC!qI+oSB=,h\Q*HPrH "Ue?ir *WK9Zh%zXUqM S]"k)[*>_ޤRn~N4{_JIPrH "k \N4`GE+(/THؔC!i=V]r-ke+P-K ^;xm@6$vCYJISU$.:W,chJUF! ^JT(hh]>߻LZJCk7$hȱ놓,: t4NA`ίRRCwk)[H<'*cD;\E"GU(xTE'%$)9$" t-pQM6 hNEslH!vyWDB[rd`Np~L64|8 FZG""""87KY+˄hN=oHKKn￯ͦFKTL.ĐJ^xyi,[eMep ,85F^6s4Y4 &H$xݸaf]͛3jԨn*,]+ &0vZo(++c۶mKٻ({IH! $ňWϱJ{ˢ~=TV-.]AhZ XplV=EKB! Y>? 3{efGfs]=3}vt|WmVݣFR]Ktlv&‰zF.M;Yc<3SXbff۷o#FXNC6tP+--=~M4ɺuf]tܱO>rrr׿uD;vnfرeee#233-99 ^jV^t̘1Ǝ}_k۷؇~h/ڵkgnS^^n~u:wl?ϬܯΧ~oڴ)h_quctF 8,ŭE[-I%9:a69Cy =N~w<3%5$=pLC|79tYgٚ5kرcڄ o/i?mvA8qbzWXa[oyׅwʔ)vW[YYو#|衇+ݻwÇ'?k뿬wV\\ϑW2_~#~E?Ǿ+;z=ÖjF[v%ígC SYXXh{f͚e_|q>"9hy.l=_P?Tdhh$zFpsO =櫑ɡ2[ꫯv,{Qիmٲ%h-lCXoNNm߾z۶m~q͛gYYY~mn[lY؜ǭ]vA W$qiζ[z_oٲrrr_N1v<=~_|Iֹsgl߾}ffqF8px˸\.ﶉVUU|ꭋj몪*~z}^ֵkW[nclNC/zq";}9o':C!9Xv䈤?xHRS}rrr[oUnt5W^ȑ#ÎCC iӦΓiƌڵk 3fw\j„ zwOGyDZ@ `Sꢋ.w}3RJJN;4 2D6m_ ;R?.̡QFiΜ97E":\ReihP\&]ʊċor9E$ZV7ydov%iΜ9P6I[HH'(R&NZ*Қ(U V$.%E$l޼YÇ׎;JTPP[JRQ@,,r$:9h]MfI.1ɡ{Lw͛WۯjMK'\.:,}gqo'a{IЖK͒Y)O?'|R5e%$4Z;jʕ1bwo(F}SL$1$yN[8kz1%~0KCO_$[F38C9rzhL<nWjyquvIʓ< ض\R[V+W /.bz<#ֽ{wر?wz~q4iuͺtb?wmĈ֩S'С :JKKv[Νs>Ӗgڵ?6mt$YQQ]ve~/[t_ۡbp;vnfرeee#<~uuM>233-99 ~?֫W/[6KYwO<>ɉǦq*O&%{Z|ǽ>\o1F'%:yk6qn:ZhJZ,PdQWI~' `ECÇ^z^~e>|xvJ+--R>|s= Z?ݻwmĉuguYƎ;f~M0nFzM2ņno>2dM:կlaaٳǾ;5k]|AHX~lƍffX~ƯHbvLbW_}YYY1¯zȮ ۽{>|~/~z헕o$(O| O8YIOLfLdN&N?qI;1@t_/hJ$U<߶/઒>| Q"--33;233mǎ~l۶z֭֫WwzޫW/۲eKDq=z233qZm[n޲e=p_n;huu?6rH332d=sA {C>''Ƕo}m6l,H.+,W(?SFpɓ< $IoY$$mE'y/όHۢ?EZ.S:1m4vwzhUUUqmܸh)))~IziL={kf={>mccS|wgOE]݋/vErlN]%I9t"Q*X*&{4%C"5p"-L,;w-߱cl" ڶm[Y8;=5s(''ǖ,Yb~ڡC,;;/-[XvvvۇZ7o\ɓk]sÇ7VXXq_"x֡CD{HhT?;y8&~O O(ONd&DI:DChr$mY{6N傹袋wq\|rE%r-nǏۄ k׮nO\;vhvk׮;ӯ Jʕuw{^:)LvI}3PEEFz(!@HGKHg|}QѴDŽMbjh)H,ObjC ~WoΏoҧ-$~N39XWb!M-5~WdC3ʛ8֎hN$8 hZM9"ig4C@幸sO$}9ı#2lK$􉤁 "9x$sq`lIڇj|簤m =iCHq@|h'B+Iv$~4Tى$8Er \'X'_%~B_`!TcvCrs$N]<wMJZ?>;D@"99 :\?NP($~v 󷯃<f(AzJdHjNJFCJ"9Z_$Zqr(URB_'=zHڭx&GgI]U67{DNY|pкBs:JJJ4i$-YD={+"9*K %44{噁ʗ@@r1/?/XvRvv.]K/%C%U?U 6ۇ Ѝoek%7/hj3Fv$}4h.\TM[>,S-+O@M/)!H狒"1#;_k۶mںu+͘1CɻZ K٣ۛXn*I1b&N2@'OOJJJT[[+I;wURRR%''{mY~>SܹSzf̘kΝ_oP}qHw$$ 'ruA>} 0,77&L`|Lvvmݺz˖-k`~m+,,43[ff=ff6zh[|clGLzW&//6o}o> PcNm۶z֭֫W/뜜[l YS_SKCӖży&⥗^)$Z˗׽OGX TrWmm}vn__9rrsssα+Wڥ^jffwߙƍm ZMP&PBB__TWW[BB_[4&5G_ZxhqRo8?Gp DZ9Ch 8 Bp\:3`i`;wz_رCݻwN:)??_EEEJNN֕W^j:Ӕ"I=z.ݻW:tiWNz={ꔫ޽{>rssy׮]ѣz-hm8 H@AHݻ5}t]r%2甕i„ 3fL:t-[-:t&OcJnFu] IRyy;wjܸqa?~ƍ۷Z~iƏnMUYYJ}Gtwl٢+iTB$ <%KС.R=zTEEE2?tOWvv̙ΩSꢋ.א!CTZZMv3FӐ!Ce^|EM}zȻnJOOW^^9 4op}q󕞞H%%i@OuB{@, LRSP+rGz|o9sf͚%I$͌n4h\ϛsBKih{+Vȑ#%iМ9>~I,vG[r4tPECNec%I 1aƍVvv>#2u&X*bv7@ArEsկ~ hUc D-Z͛7-c9RJJJҰaTVV&-p7|L}Ծ}{]p]_YYJIIQ=c#Z1DÆ СCU\\,{Qrrx>W_}UWW;');;[/$mڴI^xn?Sy7LAc={w򔸜}W]vW^u9mK`u)//O ;-[xtM7؝/oYiii!cZ.]gM7ݤ*2#F=TXef˿ [~ڴiv}9 tQ Yn_|aVUUeffUUU֧O/޼yw}YVVVȘm}uVիWı˶lEYvv}~)wѣGv{_Že˖˗׽7GU 94XvRSSȑ#vaoBx5\c}WAۘ3geddOmGuܗ%&&ZeeUVVZbbbИ/^l 4;c7o]uUvgUW]eo8#ضN ,v-!!$ ,!!*++! ]`9XZ;CqQɡJg~au7nZJJ]eÆ %K 7]v}}Ij몪*$LX*dn ErAr1iO*?KZQQ]~:={bjζÇl#))Ɋ?w9… үlmΝ}ڪU Vؒc[f\.{Wr|~=0`_ޛ4 O>zj{w1u`s#923ϭvau999do:}޳ffv%XIIw]޽mϞ= wζm,'''Xڽ{~裏 g19uVCD !ļQ|?Ū~zѣ6lO߱z}s+;Òmĉm?;PL4ɒ}#ۗe˖YFFeddزe˂\Mff͛71Ç[ffUUUYzz>|ر`8#r*aׯ\^{5KMMn)>`,cZΝ_KkGr(n5:9df`[uz-۷[aa.]rTl…6x`? >YUU11ʬ̮*6mZıWǶ{n;xM8^{;wnq:ﲩSz.--Ç JH!58)V5/T;x`Dɡ$ɡZ2dߺ7|-11rss[?gԩSD?o {-sZ^^k>l)hb~G{ֱcG[Jrm LR[&\99Dz%"zD{z;wnĂ3gj֬Y4K$ICXB#GFF9@cD;s=T[ͦ%h˚k|o8#9Z3g?ԍV}@2qo~8ٷo?hU.&V֚ @Kb .K7|TTT$IZn򔞞]VWvdq]ryTff|͐^|źuiwlwJKKM7.KZx$i޽_|ϩN| 66mڤ /Pn;dNlY`N}sZ֘ E=Z q+`¾%{gV|33߿]JJJ,77ׯemo߾zjd~gN˳իW;M6Yn̬cǎh";p@sGE7>v}s=.\h!cvgeɲo[ǭ?i HQr*++]vffv-!!$+[]]]o{_n[Ov***BeΜ9a}^x 4; ;9#Tqϩ`cvѣG94N˂#eoP܊cBkie f[N֭S߾}%IZvjjjT[[W6111d]SZ~֮]r9shժU㏽ƌ>@^|Őԏ`}k߾v 5ﯗ^zIǏsc9-pYc5usS(CcǎT{lÆ ֯_?s\f8mkٲeaN#sSM7/wq%''ĉ̴͒ypַI&YRRRsj7O 8[շeoCq+=!@,0[u.c}s) 3gj֬Y4K$ sZ+VhȑB(N+hHAri>v>B-;z@Ðq.^z)H5x`@il"%veR/޻`ݱ>%߼@K[7P_ǩHsJɡDJKLLx;39sXFF߾svzۦ?r{c/!!$ַcKɘDgX/^l 4;uMMߺHpP4նNPCKH5k?@448)VE4~۷;wz_VZ̡@IIIV\\lw9c .Jmt38~뽉XFe~a9Rؒn` ׆Әӊ \l[~t 5Zi\z^>~EzP0ߤI,))[vٲealٲ;d8qw'|bwwi\sMm,Ybv7ZBBmذg.^}]wu!Oy oD`HL7o^vym8ٳ>k)))!ַ`t 5p=$qaĴ Ԇ;N}.dX}?Q/ ژ3gj֬Y4K$MRJJ-ZP !OCҥK%IFr$35gFs9cn6@h7FѣGG; q%!5gYws%Ʀ7Y|ƍVvv>#%Khɒ%r.@k!qC*fz|O?fϞ#_WZ`$ך5k$Io&7TTT04Zx$i޽{Y999ꫯ$IvR^$I֭S^^ӛwǩm{Gz8c%X,G6|Tff|1S,NL>@RT%%%6lbZ߃i$CYjeeey5u+c$rQ{7ŮM[nffֱcG[h8p hkƊ_~xbk̬vZ+))\}"!V\iŖ`\Sn۷o_[zZ'K82dz&?y}\.KHHmرrN۶|ݙ-ZN&E]dW:X="=N%CA9sXFFX/^ diiivw:n7o<ꪫ3ϴϟoffnL\.}9!jjj/p[X"[cMLLJI$i,Nw5I6f+,,t755Վ9b&$ԩSmԩ~ɡh!9,lȐ!V[[븮)}6aӧnKOO?4d ISTQPcAi]輕bZKJJb-..$֬Yc.^}Us\ـlDC={ZqqqeM_m}sΰDҷ`W߾}mժUfE'K`|Nk>;:Ж.]jEEEv%qܜH5$m…Ґ!C;;vXuu믿n/Ҩ6[c㍥cWi]hb\;,99&NXL7ovLt;|mذg.˯g}RRR.k${--I&YRRS,-ضmyٲealٲTi bqҡCڵI={ڋ/G֣G۰aCؾErL75ChOwsd/꭫S]]mӧOLKNNB?v}g޲g}fvy ?rHXO8(?.}~]vvۦMy0`kmĈ֩S'С :JKK]'ו}'W^~ 5;1C?CA.]3覛nRUUcs窸X%%%*--Urr^IҐ!C~zIҞ={twȑ#znwӨNm:rs\.R33͵^_nv'e#HmĈadWm7nh^wBj#WSiqxɡ_TφH @۷~;7{ZX={jϞ=~o՝ԩS'竨Hɺ+U]]~[vRRRrtgjS҂q:v⋵|r߿_ IIDAT .;ѣu]wi޽աC":#/Ǔv0:,?^w}kܸqھ}駟j̘1Cɓ5vXIҍ7ި{!I4hTZZ޽[ӧO%\-ӥKmٲů;O?;{jzdfoyy;wM& 7@S! թ!Cszugے%K7mdn̬nYf]{n֫W/[m߾}2s̱N:]RRb\pn˳-zZŋn 0}ݐ曖okO=T2-q<48,LϞ=^[>j(k׮\ҥ!6m%%%ٌ3snݺYn7gaO )fruƎԷ`F_tL3,N+@kS!1Dr(߿6mnݺe˼ok׮ﵽ틕+WZqqY߾}mնj*+ɾ )fryyyzj{wB&lH 6VirrrqA!9֌Z  &wΜ9Q.ɪn%$$Ի@Ӿ>73KLLJDbv*`VQQ29Է`F_tL<̰ゖCr\+tWD;VmΜ9Zj>z vZԄ@yBG\[N֭S^^wyk׮1,fvׯ_k-ٳJJJlH 5V_|Mh BkqS ;~wq%''ĉCήٰa\.Wķv{l2Ȱ Ӫ&MdIII )frM7g26Ucne1s\5X`ֹnB$i!"zn̙5k$ "@rG;A@Fr #9І K.ҥK 5=z$և5jTChvU^^+$pqa\@,C@ځ̖gI|1B)BS  N}$r, 0Y@]}EJ$< F94v&X@ [Gzyq<H:yQQ%y(bhyXмɳHʊn( V?ywE;OE;}"O`Q-\I5K:=ʱ([!OrhKj%=ʱeT!$hyA#F;DQDAOyfH:#ʱ :%}#Ohhc-ayoE;D/9")!ʱI'g r,dI_s,X@ O2b$un(9J&J-O2h(3yiΑ4XRh/YlIGqDRFBCFFI%8iJT?)('GF-:`E ~cND(Td w NT?$)):a"FE+&(4h2Ivti3Ƃ[ KKsD!UA .\w !ծ?A .T7|YDTo_0%U)k NQdhX ZKID#hۺJBo%|,vhVHp"RIy3.H І̘b q"{N?9b30Cm!6@Fr #9ІhHa$0Cm!qr9>%9/C@C@+cvkL\.\.%$$(--M\pO74Pjf#8HHmm~i=zgT[[퐢T[[Z/uk׮] !t}лrGUVVRRRt뭷2u=3ӧڷo .@b9վ}{G/w3%vء#G*55UIII6l5))) `vm1cFD5&Pn`c&I555Խ{wuQcƌё#G5>w[ 7.KO>z29M$YC >^z%33{m~%ٕW^iVZZjÇ{A}ڞ={ᄈ{id8~ZUfAQll-(>*malw+ B5 *@PA#ns7H3s7sr9|ϟ?kss/--ՅX,i'AV///uttT{zzL6cbZ^^|ʟxAmkkC~1C:pXVoRcde|OԜLf52~W߯x\UU~F)HʌO/..z~UU~MV'vss~tn3f{jLXnUjjjtgg?99Ѳ2k|*C/U?vy=>>3GsCa)?爈& c!$n;ݱ mooגp8l9v}}][[[иvxnX,ӊdU[>D.5^~9s4 {=t'W F)? "cI<ݶձG]^^Ny&y@@C^^^^]]gاO72c?IrVUUGGGD.5~wQsh B!iiiڔuuu$Ʊ 9??s1vqd{{[DU%HbM9?'288ռO榌ܜAe{Voa}I$%+?+5x.hjjҕp8lQyF XU4n;ݱ߿۷ojcc/_hQQQZ__yyyZ]]_~z|H߿zzzr|^U[Ǐ:55555޽P(dtC>ɘ\4\p1C.Fsh!9b4\y_x<} -mp|IENDB`./Listaller-0.5.8/docs/html/images/listaller-design.png0000664000175000017500000011465212152724462023153 0ustar matthiasmatthiasPNG  IHDRbJsRGBbKGD pHYs  tIME*u IDATxw|WweQ"Ȟlو,ق_AL폪"l2^i&ΥmJ}'νϹȲ,W61q$""""&DDDDđ8G""""bHDDDDđ8G""""bHDDDDL#1q$""""bHDDDDL#1q$""""&DDDDđ81q$""""&DDDDđ8G""""bHDDDDL8G""""Vl">'6 | Cl6,[Rx4^dk ;y%]_2FV1(s@ 0Bđ;n_Cj uuY7|%ìKtmd`=omֆY_e(vI?@k.z)]$mbmٻq.ݽ;zrl "&DiW>D@'IDeBǖa-Qd8'Ue ˰fw2l+Q-À!i)l"&D% D%0HFTIjD5;]yB$*MM&ّ K&1) H"bHV38zѬ$UU:%jVݱ~u4+ afN+MTm-Cz& ɚT$SҤT:8ZjQ%6T,%2 dXiS%YFAFJ4A4Q$8$)KT~҄2&WuN("UHCZԤ'hDDDL(qsV̜}w9[[/GO;;e jA'i6AH4!1q$*HԂ`1λ%&κ/ru_vϩ5O 5$@-j !"&D8stǓ}.g(@-i ߂$@#~0XPО׽nX]Χ~؅vBP eX:%駍5RFr("DItBTD5z]0;!SȢB劣dǺ(Ҡ.Zmu~ W4ۮ'l eA9:y yoVW*"-h?P81G}[I.níIU\Zh67ܽ?9 tO"%&]L''.l?èV_sǿA[ٝ'F#Yo_P%}P4II$KDWq]6G"2JUqMM+DDđM@dt3QAx#1q$""""&DDD/W!6G" >^lUj6DԾrT)R AdCDdh޼9F+VA HDN7}v؁ϳQ G"t֭7Ǝ ooo7Nbj""QQQU9:u7oÇcذal ""&DDZ#F/^ѣ_@6xƑ ӧOcݘ1cm۶8z(5j޽{#$$DDđ : 1 .XU;w.o!"bHDqC;cqx`` fϞqƱ# (L:nc֭[F#7QTb9<{ለ#QA Ah(/^ GDOUQm1iUmI#1q$""""bHDDDDL#1q$"""<"8G""[A@RRqcG"hڴi6mqϟ?ш#QA4aϸzqǍSш#QATxq̞=|֭[6l8TÆ Cjj*6l`qx\\Ne˖# 2www,[ 'NxKHHzFc?DDF???,^XѣG\~l$"bđBZpԩSмys >6j""(ḇHDN4oC ٳF""n_|/ܼ"E|q(U*Ǐ_{K^=w_}Uw ~?>>|9<[_-[6oD߾P~;,[OшyYsϣGѹ<<ܜ9X1+(rtg'DQQF}W;2<4 I/mzD7}Ӗc;%xhroI!:]XC[~1{|^w˹i*wA aW4,mrz/7 |DDDD$o-*yfT#"bbJnnֵ A☔ MJ~ēKBΝODDDDy$83#qy RcT144۷64Q^}vtÆf#GDD8qF0Q6K;c=Lkɩ$" 6Nwタ'.e($DD3n8Z8eUenQÊ#U'cG]1M6W|fF5rJy_-}0SIlz,ԩ*Ep.~>6qr:u<})>z9mpUF5i)+^4f+D)8 >Ӫ+K'❐8p ݪWRX|$Ss~b%0f.v燯b,>gLm_؏ 0l,=_?G+Z3)8b8jor#LqXL?DDopDŗ`mz#4<<X {\<ޝ۾wO/VfoӍzTn޾?_jwOToa?W%g:K-^:%n\ԏ#GDfXqtLj,FDD[k ڽJuf(Rccw!~$D=$i+u.v ~+?ck6U Zvt,M!8b 'ÿXpE^;eoe$w_X=]cmDD٤'д 8{WOEӻ!O9<eOVFR Q`L3O˔% K'xn9t,M[mv"#ÛQdȊ"e5+gQ0}Yb|Kb=ֿvQe˫7.z6N߶[@f2xT}...8hn]DhЮw4"Ê#&bG]p$#Mgxpӫ慣ecV}7 1Фf({LjQ3qSiHKIƍl|l߾_B4w ~z,:hwl4þк(sg#,ktumzgtgW{4=P77>F|dd9s6yc?t>d(U&(٤=~;$IT):)Hq6hr:|*{tY>pusG˞C囏1p2DeGYݻ/5'POO 440{'o!"ʊ>x?}DDy̝'qhecQ[q^:"KwQHDF5rA`P0O]:-A([V]+ϙ[6b!&""""{j""""RYk4@L(wJ"3 CDDDDƖވ9sLfőLHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDHDDDDdxQ} RSS6v<v9ÇuCr*;{vnCVmPAL&_΋/k"=у0{᥺`KfpxPBEljr8PzMֱ3 fݻ7]q}C޽{ԩ|}}k<ॊ*p8{kyxZb- _[ƼyTAyD28M‘=;M6V~gjTQHKn{KD7cU$ԁGQ|n*^(ݻ;v;kD$''c̘1K(E8DQD:uTܺu ~Rኣk#=E4}G-p3E3_DܼJeKQ@Zt)ݼ%?lT45`ӺU@JBBB&LΝ;|( I"r^|Ҥx䉾أGX߷'LkMO:Cpp0Q{!́_D΋/J*p^hhMDDC+qFپAAAdɒڵ+Nھ};LH&\z՚yRe_1\Z/Mދ{ڧsS2Ê+8ο###Ǐc۶mx&NwA_|BCCir{e#dӗA 1ovcn憪Ubɒ%hؐOqԓ'OШQ#6ㆈ x{q]ђō۷m۶E2eРAlذ[նmбcG+W*T@߾}qu:t]vEQB 2FӇqFƍO?bccQF ƚ0{h͛71p@T\eʔAcEf,D s[e0x`iP^=$''޶m[\pAwdd$&MrʡVZϐb;wF PdIĶmЮ];)S+Wo+Wk}&M 885¦M۸q#5j`4iu1{1cVލo_x\Ê+8!(sƏm ;rƍ'޽{矱l2K,ٳqߨX"zYfa}6o/^t-[dXŋc۶m(RulCCCѭ[7)RD:2d:t˗/޽{X`vܩh D[c^zȑ#HJJOi&b=z(4h@ZѠAܾ}Fbb"KmYx1fϞ۷oٳgw;,]ý{p9O>QZهbP^waʕ>VZ ??h"^Z/]l>1[1cVގ-'GEϪREL< ˔)csa? 444Ce-[ɓ1o<k͛?NJJBfpUP~}2./ʂ ьKi ސrIT^(VիpE#[ڇøɛ/k\U1bϑce"Ç`}ҥKL4l\ʎ}{֏eE:ԏcV;|t;Jrr2??{A/_!Cxm@`yBe7ne˖Fl׮]ԪU UT]ov܉UVZڵC=РAnQ={Į]oѣ(UwuرchӦ ߏ1c觉¬Yp<(Zܶu-/S(r"e6]T*5J!7ySnyKn͛Kjɮ1ĞC8.3 ,Ke?9]te˰l2a$FeH}iY_uq8ok;bĈX*㚂UVaȑYfa(_<<^{ K,qZ;BJJ ֬YC k"11W^EV۷oGxx8"##If̶ˋҥKR^dvU)Ÿɛ/_P1Ŝ=___@LL }Y+ Ne]չѩS'̞=/_Fz˗ѢE ,f͚믿Ю];kj׮sΘ:u*Ξ= YN:ge֭j ǏWnYJ*J*Xf _ 1m4_mڴџ3g`ӦMҿvIE.ew?s-~}q8{ 4Cзo_a2;%z)ЧN2֩S8ƕ}Ǭ{}b >Ì3p9jT*?~oV,oȑ4i.\F .`ҤI5jTFcbXbV\Ç3 ѣGRcǎB %Kɓ'-~ٳ'ΝqcРA;wѵPvm|Ejj*ߏ?PQ:nY_wYه7?n_I0m4lڴ EشiOn> /^4?ǎ>fq>S1k4Y'm?0e@֭1sL̙3/^$IhذQeER0zhO>EٲeGdO󘕷c/8ڽzќpרRLݩ:㋘3bMWT qf/dD[~@>ìtcCɡq$)%a`?Ӊ 0_X#"r\QIa0ɡlJqq.A_DmEQYE,G82{XbM^X#&W㨻[q%tcca݋`ﱙNeYݺP,A!򠕯dGݗ&yĚsKckPԓ%Y7/j q.W'VodڪviS>m Xr Qxj qEXݜgN2L&}ǻ/ji!ct٪!O(z^ic3ֆv+Jb7?gPrhČj e,a?D9y8B{ZC_ƍ+gx~@3fKloJ_y|~s8-+C _'.n<2⢱aQ}_;ݭk1jTШrk_||poh ԈɡaL`8)cf8mH{7ri CF*ow  h|_[ШS$=Фu3kxxzA݋/r&}0o |zNWN@T }=D5v4gn( >V{0$A#xt26.vF .*LE'!T =,qAV}>ōM:Ƒf+d$خy|rԩɨV3ZOo?IC8 PQ/t0^[~_H{O;Wo3.JeOP;V{]mLÙ+IKFFnn';$8S̉wU;f^þQB~cؽuQ? 3{i JL> ߝNpu4"7 ;VB﹣Kuq {ˠ3'zkj}޼%Q#•3[!K"Ztvl9O\Ư߿>crq$zGW]ű^Y,5흆 Gj6}Uj*NۉU8}t'RR:݁Bd%]1to`X4lوz9/U</W]B|s^6&欻bS!ھvmѼxbDkK!I)_ DqqQ/JVmx|<$`W0|1<}ƨڻO/c_xx‘'wER3u<8k8.`YT:}hc&.Aw7oƈ0HN]_+!+9tuXXXT0xO֏#H0DZa Q8.6 7,@ي/{tߏt|o(Q~#{M` Dڭp`Z$$KMY86FLS4Fĸ߾rB?crZNWSnِٛ8'#Fbz(ZJB8$QwQh@(pý_q߰y8sW| q2_5ZA-zA#Uɸv0x+h+GaQ?TY'PF+{xëPa=6}n:>_ }iƗOn@ǁs_$~x퍩?'ݎgǿ8| 〯pvqtS<< (.Z]/vhѭqt? Ml_~!IPzrO#37@{-E0ih]ܽyJ? cR/o<ʡFT2U$D'd$M:O‰T̾ /i4Zv;-}޼ފNCDyS]<#ZvxKEp<o+A2e&E" b5d *H Z8˿,#:A$7Yx 4i*..뤒!0ն8{p%^n>+b;p|u#hYu,g4}bSZ,Mo*91Egg`P$'DPo{`Ϩ= U0:ju_X,S`Hxxf/$[ -/F.ºEm(\]#*N(~o kh,PW{ߒ$(׬v? g MGdN*>9\<°rȌR;b? nPT*YcGGp/U jp0*p-Yb; Ou}!>M%g{XZ(qvϲJW|}2{?TE>CNg!@Jr埊fTKoqt7֭FwRc^/(Uڤ( {j}wG>!)8ڽ3ixi0?'mE6jg V1X=^SG~FV}ۗAR!*2V| nIAF!D< #%MFRƦ!=xBPao$H]N*1h2 /5铑jRwoE?ޟ'm#ld$F U[ /AwԾ%[qouRbC&So={$cڌ[wӇ~~ziP%FA[v6G{`jQzr(?Y#bSK8s{h)H{}>5lOH|We&d\'hoSҒk#5k#-68U-@G* q"DD ("QFR66-GwYWmqFqlWY޿"l'^9?cq@!UQwՃU-oD2.q8ud#DQƀqL\tAZ%%hi ~ ,?` ,+5@)be6Ś/[) Qȯ(^~XXQElXVib4'xjX7-VLm~2;8"Emsxz⻐X=UWjW7每CMqX0"vt=AX1v0eoLU{ ~[>~TGBϡ7yi/}\? 5ZMo}7<3״ɡ9֏ɡPwsZ*!>IBL)c$dlڍzˠou ܿ~}q>՞؏#Q38Ȳ,Tj}._!OV\Yw!1"ǯBkěD@(?c^M.*e:l&.Ǒ *Q7qV2tT U~7tWTxqÔ4m8b6%ӐCrs Tץ@C^uڵYN]M-HQHRIO֞Nמ^I$"9UY㋈28jFFZ!?>OtUCV3 (V+7ICzj :UaaaxN_Nr oOY{ëAƙ fğx|9_DyO/MuCn>XSHۍwN($#2NKMIsC~"z2ۏc>9Fx\Fԯ,xyEs$k5ƚceKY_gjDWArEw+R?Xfuw42GcH()/k#53yQBdiI|eX\/>nea&1*[]y[uX.J2{1{O]rE1G+vqtDɢ(Vh= ,`ҹe#Xd+AlC 6="-bsxXX^nSׁX+D^ʰDm% i9*A#0pGTel^,m`o:_ did52R2//$5KE'T8Q ڽWA(٩۽\buұj:4ij7e qZ?ҽb{_K)1:XJOE}EKwhd0^XcQdGQmǟ7ɦX?֮59+(AqMM;*/i/]@ʪ㘽Gb}',}G.?`^odဥ L 2 C#jKér9c *l!2rBJI Ny[`m˟+R %jAOj8Tqt9IKҵFҵF,#I jO鯿թS'fGc53ݏ#ҿ l5ATrdI3sQvtgi<|5'm%&BνQt+Wl=<$iTM m,ȉ~k5Wn8>m%Jnij ʲvQELeуF|NyҵF6t;` %r ?ˉ~r k%Q.lFg1$  ӿxї/QZe~r Gs}Dn|1[U"DW}C GH:A^`a>FN`aB#Z:d_{1qXS Û90c^nMp1߭޼ɣAeYGE;(楖J,"&ABd1F $b i2w K{c'1rya/ܾr 9kmnj*?֩Qݽs#6ųGZV-Z63]XU2F^'u&ֽFbp[ZrPYW ǺR48. 84n-3]RmUqaqJ<} Z7BѠBiXAL:s!%)guafY^z[͆_95w_@bX_ {qe%YZԞ y1;T*z3-F~4ů7?߀Rjd|3sax}4'i#'J ޿/5 }KTnԯIC8 PQ/t0^fn{㚊wowo@-Pz tK]mLÙ+IKFFhmkK=qOo(bM@_}O¶ K뒿3'@ɘFPbfkB_D8Ȳ!]ݱňy2kQf_\AЮh\pB;(Z ]ND~!@ZZ*oRsGoǩ}K A5%(YNY["E *hCǿ~5W.aSc3oiMT횇'7@j:Ez$jpYrf+dID.Cӎ-дX4n7|M*m7.Oo?40G~o Ymn睫pyv%Ѳ'xw7pd@IÏ}snw!t=hȧudwDQ@:0x(}oլ\e©j]WhtwA9߰.NKl4)iaVםb} jhTUn_;cT?G:cmC5&#QMDDƉϟA2V8o?qFv|\$=Y1SHyYlcGو݃oƈ0HN]_+d}#]YH/[rczj*&& G/c ?wtZ.f龀ƚ .֮'>z?p4e}f?|/@뮣 2 ~ G_Ɲc->Id$M]c;y''n+]wC5H[B0~5_/[%e_O7N'%_{ie | B8}Vzk"aSa6W`y({=kRS0 >>c4O{Ѻ$L\r&{s,De-q49%r3tJw|OWe1I|2bcۏsl+$GaK]>X B1gM^{A"%Mܟ"3>ǔU_U8zspNƾȾM;G*eѐ@4 ;(S ε`[Kw@_yzYe:Jhesũɏo u)Usnq|bAy`x)zVtiIz"9][Wc1q;C {go7/:w0hH$t8Hzvf"k͠H4x sjO6.^U5ܬ>vo|`U#,Nn^U˕q ٚz~"(EPVC=lޗ3WR֌Q0C%w?M"B.@kɡ=kѬ0x6G|ޠ1_o+pd2TrAРi-iд:#W7w(ss8k!DCܩz6C/%J({z;jYf5egʙFߡuhnBB[7oF|jh>Vsz8 wXd!n[ 2Aĩ=rjMVyW246߀Z|@%/.\!-ܫژ9r4d RO_fb-nS=DsIyz~nsdoqhSX:zz.5q GS\ D߀`o oܺ}$%!FYQ85[T4:;=AIq̿,Gs;|fmh "hP>ʭ*|yViY d*C%*!gɑ@^F"ж{kܻqrA{7Nh"kn ]?tFNfr2Yx@4V (`Y>rRpjjlRh5_BV̴=jZ<dd&hz֖W&*v;akcNoB+ ƍg!c5@-jkjahSw㟓ii,\PE>)fRrZ .R%SWÞOlQhpg:["51 ćb1&b̕Yۡ8m&2S!/'v̶0ӭιJAnV 2WOkoGڗEQaYXB܄???lDZwPP C;ض??\9 ;6G x06@V 7_$ .\{ZLj5Z>~qoh=ѦGh|ٿwZϡF  3jƺxԨ G,g %.A+Pnq ]c z{f胨ߴx7D3qjvʕW(Jc{>pq b[5}^[__U^Q 6.Y~6=nq6c˒(j mMe cEA8Ex3Bo[I*[˷*^ Q+C!hТ7~^&RcPҪ8)vAQ6X|6zr@wz3^Bfz<*C>&b̕SOyQg"Hsv!~53 G,5wiCA=d~ݶ̴xVAX!h{q!u[c c̖pzM}PܫAoU\.3 =Nxz>J΃f{q%(99x H݊l-Q7K QU(ʴ'E7 f3{d|u|'R/so(kozM[z5,ZiQ>ŝXm"RV,9&wYc_&srAl\%:gpW.TڟaN[7h{Vkh7DŽ7^_(ֹ΁OX;qDu'nVm cKS='Rɡ) 8s ]!-E8;*~ hzѡ2[(vșs!OoQ2 8K4F#W(EaY3LoEAk싶FJ#kaݜv '?L~bFQYcML L@$cްX81RpvV劢""OE8(H[Pf;k"/5(e yʷ89I<)ZUr|^ڪ+ Xڗ8"5zIyg˖Vo!(Bh_k+mǑRzB"؂{/ Gz !B*qǑ MyT*\k7cEL=/m֞uv%Oou*}o,>Vh1go}b?2"'Dq )Ԯ]ٖ}HHE #3G틐WUbGg! z !B*0H!B,Tq$B!qtǹ9q/B ǑTh&yC^iѱ{^Ĕ)Ha9Bh_'Ǒ;828b9Ha9Bh_';8sо)OH!R)nG5\uA \% q4I&ӊ\F,fZk6LE%ɤOE @\!VxCsvxD$mM486"wEk\2mXv-Oxl B셵qի]1hөi q vAC"T E T1z6~M}cDU&2>z*Lh\z[M*V;+WWxC+KpLۑh2lkb 9uu%S6^ڙIɔnٻb'vD}cq8q pAerH'Q뉉C^4 h m:m1)@,qm'8ˏ0YɷqIEqmqH\8,7OHGƼ8y Z8"\ql͐7$tbq}ILCvVR%!cҤIf3E(رò844ec) Pg1 ƿr@^jCgnLA>r90 EmMg 7_R3HJ#>Edirfʑм~?cϡBv^Z#H_G(_fbÏ+Wahٶmڀ‴ǨU?\77C{Cj8b^ 8Fl͔O}xDHOƞk|(|=+}k?y܄ w,-SD瑜{~bR]^3#)qL{uzKsq q~ݹyYhi0|o%\* c?k%Fз_"-Cծ"ݻ/ |G2 ct\>"ǰ%8AػYZ̴ǘU_/?Gfz<5ċ&-m{7NB.vx[~`5OM#/m;[G|'Pa=gJIz:|Y~6Dfp煈>BzOFNH.Zuyl,GM{&Bnp煚r}0y>R7D"ëVف8E rmLp WaSu31eQW =?Ɛ7Q.T \ ??lN(UA: @8j!V# ャw+oɷ+1Gw}=k#XcTء m3p@>l \\+Y39khΎ G;Gѓ/Bq)tfEeru.wO{Kq=$.'Naշ -%of sDE>Exxg9d=*?WѪ{l0zQ:z2}{yv7bc?T=d"šzFjJ2v|)jis} jL_Uk6 +gpzX浳x?ɏ1oy[sI X3 EhܲL9lJй3sS_E. kl[0edž؞JǸg0vid<ı=[%6g%q=I"8Gq,aMrr1sBOS D|Cͱ@ᐒ\U鯌Y w@{"%8uda;ARkgˣ(>8|}u:μٹ"2UHH* %CY< dso ]@xŸvnNuޕMcW/<Цx߿I{{qn.RTrAY4};K'CXWOF{xW / ~5ށ6t!rFفÔדzݎ__c֩h|ۭic:dN*EVzؠs&?_P-| +7? 9ZA#Ceσ\ҳy yBFn%uzboFڅ),cmll0es~*Oy#B*2"~!=s"Vc70gU/GГy p?CZ~4 e"ښa6ZHOUpvlNhd+Deg&?vaj#;#Q/ߪfq+|C4coÑ]  Nг~ Gw/AnV DQݫG̴8lQEl~kvzJ_Pmy:4k7 !-t7#54}+9\=?m}m"4hޣ1[32JZ\Ư—?#fC1v, џ鋌x U̴D8{@Rr[ud%"=pO Z0ec؂%vlg)sTyʋR)q CzWe xuR[89 ''nndeQܣԅ( /H#6 =$<o 0oރ_P"ށw R┌ǹBZ})ˑxO3gV6<utF%7rR}Εz^nEwWIT_eѮkzxY\N/`%C@p=yQ+Cዶ=޵8_O OI'? M3$^ }0~v2,.Fo -"CF@nήX1?ڎutSZA+} !%W;qNJbl0esldGTTșs-^=|=\졸 !5% 54 u m~999HJxoLxpYHKMDZj"vl϶Y3v~= )IHJLŽ3ѬKHɔ#1M-`3q</#4hrECg#'3 9Ic,@L4p&0_nhܲ?: a.mǖ%=Pmq\ZvAQ6X\FC.ڴf^́/êоOɲԨtԴ[\Nş?E!@# x5)r0r9ڿi6ߎ?QSf3pzU1}lТ7~^&RcPz8sl\y 049T{$ /}/&CԨ }^[?_LP[pԳ9R6=I"8JDQsr 89ؚ8s[je3oq1=ԥ*@raBQ6OkEly&ӝ- R85AP˕Crƒު9^&a-\uM)1u44sh_ϾL1{ <} K*'OĬ:G(EQ)\@f$Q.c׎mI{ѣG\v ,r.ә^{š/½؇Xb <2Jәn?2"7/[ HڨQワLgzO' ]_mFn=-ڇ)S]gxWuZpK÷ȹLgzO\g/.vEb:g_prFFp"iΕkN3̧[{OZQ&xӇK!Bٙ984Fo+lB!!^mUGq(#!Br ͛rlddQl2rsi!xx?!7b!uwÍ+캽 ÅS:l[# Z=С^Cn~mrb]Qr JmZuqq.-~OYQO-?F*>W4E?=JA^`r @ Tr̶ dy1V|\ut= >*9v+_j+yfOim}ϊ}RvnUo!G LDEXB)d8t9  GB1 SbccMQ!DB 9pbcck׮eB8B{Jx10z !DCLLF4@^^6 !P8B.ׯ/o͚5lBQjBһXfM$%%I۷o^|E6!C#!_ F^GBQC#!h׮Μ9c4͛_>RǑRrI04!P8B /WWW[lAVVBH!,lٲP~},[L֪U+1(6!‘B**QQQfBtt4ZjIsssw}Ǐ#<h GBTZ7ŋgÇYfغu+h GB9RfBfpIMZAA^{5t ׯ_Ǹq` _9HL6 ˗// !z !w}~h#FP4B(Nhh(kz EpdB0aim۶Bp$%={DF qQ !P8BYaÆq!‘B 9r$t=RC!Rx }\C!b$e޶E>)\屯 jՀFpae`2H?\LXϦo2;:>:ڪM*z&S:ff*dRyxڕmAXZ?˺e9Y]G{ $kZYcyc|6p,!j^˜u,[¸"ױ$K@ǰ#:K ^Ǟu@&+eQB#C.WeZNVGyXVXD`Ycy:kj1(+,Bhp ܱh._8GܓڢPCBP#!֟k//ϓ\R~~i3ڂPBp|{qpqHHcHğBQt? !eD8[coD:K.)u,/?pJk BCA~Bp,Gh?ܹ8t c.GQ_"AB#1;T!mTG{.)]u6&՟ !‘Ě8%Xj\hɵ8ıuԞ7hKG1H!6PGk:V.)u,M"Q_BDQwP\RXqy1! BcA{U5:Z#rK7@D+?#BX՚CJ@*ouh~P;Mw@a1c\# G;ahC,/GYH ?Ad^h۷SeQ/Z?ۣۯj(n !eccJ,␲UGC?m=G T <Çq~rX97 Q]u* r&8|Qua}QX Jݲ%>|YNF&>#APsjP S(0Y|w&ZĔ͋}!) 0Lllq'N`;vuEd~FEΝב%_66voWWwO㗞=@QmUo)( !eQ8!5Ǘ:^(D7ѐh|Ѿ=usϟGڥ `ޅ K//WW̿pHǨƎ1 4Ԣ|g? xQ<\ IIKus'ObٳC1_/:Eo#x`$P8U\:C4S_jk{Sب=n..xjUxChvuk~f߷}'`Uv:yzK.]¯{UPx6 ];wOuGsݏ۴AΝ:q̱c8ֿAH!I8rqH1o!H!LyNcٳlhD+qNf+1tD%䠶V^^:?A;E`}ǎ8|ӪajBp,O\h(f `aCXѶ-zլ 77dwMzdf]}_?t޻*aZX^f&bt P]q4ۍ ]o{e` PBcš8\b:i[F=3θ餏|)w$6wꤙ=\]GG} "fhaQcʙ3ر# iqcP aKk"=={`t?77HKCC??~ل 2)qtҺFY{~1O`Y9LcsNX0i ARN>+1)/v0=`.cyagLR ӧ1eKr BB#)Phx8M Am!c bPooI={65k/2h B*<۶mCDDN>m۲!RQ5k4:T 8wRP5!ѣGSi Ӭ_4r㍕X^_ I3o_PMA#!>D}H qD8K3_??3QbBܚ/j >u$īĄοO$JP8BHz!,-bHXƶk$FDĈHٜL~X(8aZĂ2JOp$3!‘bGRS#SBɐ+iΛ'1"LmNjdZ愩P.F& GB^ zM0u*0Raj&mN< !G%LP77w80Q&Sй)1!L m\@Hp$8 U\ѤO(P4Y3ј&3՚9 l:ڞ!-L&c n"P2Vg-olE7!P8Bđ#X20>OИЕa@*~k򍯄 GBCE)qdd>M 9\ Cꖴ]q2! 6gQd@PJ_!5u|LdA9M HJ |VX+z@B( !OL@J )d ڴ"I"Yl@SHD2߈82% AX(M]˘ d-+L\I%= GB<N:۶k3F(΃^NsOX!@ueJ'׀"Okc%FB#!IG}o^Qo0{( ;wп^ t1z TEQD._GzA Ŝ(Wo'r3@*c""#3ؔHfaٲ^ O5g5߹{9{  _()>V8C F%쳓ZnlH3ѻHH+`mU.eA"Iˁ3~C*!""eFwGD2 ={.c\9!!pпZM_ o!޽?GBBN^ChL3,?\F?xzUaٲHjrf؅*Uc""6"33OVB͚i͒ GBH!6mΝ`sT~cҤvHHаa "#@YT GQ\Q\oXXw5y>|h޼*,9 w!]1}AǐnُI{w0gaMZ~bҤHHаa"#<;WqDܽ!bc3ww{oڵ1qbGU&uDBO?uN=qcdg% WW_}3g\"pMl0>@&)(BUBթ\Ne:uӧK('qJ9+WȑhժN:ҥڵ+>LG&aBR%"AUۘ>g\Ze+xxYu~\\nP @>LE&L֭BHqx4PMaak1aBsCaŊի>||̇"{ ??wbClr~~o>=ի Pw囹<$!8[sС[bE_P5yxΝT-n=:;OLC~+WqCff|}gh{T^9'ĤRUzu C7`Ŋ!իV'`ܻ8$oϺBHH7aKV+킙3䔛+T wa̘_t'ō0zԨplx6èQ4iƵ1?T8DDS##!11٘G ޮҡC4mKP',UΡ Oϙyڷ#ƍu.FZjV5}w ͛#sh߾x7R,\8^^Uk&4mյpˇBѵ*xxL0h367o~:w^ ˫ju#c)kdȆ{ ~,<04$mhD2@ѿ^1hH;hh#\>};qq !ez )P X3VM$wң*PN6hN!VJH6_K _7 2[hzerVE7P87љ52t,X A#!#dɹSX qg2ƮU%XtW-۹MV/866!o֯* x 5!,ZmC #UITDHJիaغ, GBHF;~ q_c&HJш:L*U !!I$%ShADH\sKF32݄08jns'o$HwϑPjd,-;|F}|AZeS?(h 4(b*2M^\@.W`ƌ]Re*<<& "b#23t_jNN,DseΒ1}ӧ?й ܺx(t""ZYt}S顡3qD4l @XB}9OPe$O6YC><O=lQ.W} ,A. CHYx){pCre/@ݺhݺvgpM\9/; *j}*Ur (,ͩS1}ϸtUGwO::ť=Jû~{'R%U[b΋Ǒ#7rPo*T4i2O)E X~ֈFKtԭd0--4GB( ! C2 mq7{FSbğPvڵwJrrxxpBrr7=[r݀+W&"33u{7IыIBpO/ "bT^(ئN큉ڢ]-_>εJJq ŝ;68^x-ZԤ9RAGBo?gXV`:mڄ3g^k•XrrD<|q㢊/s,Z͕A*uTꊻw1fwE܁L$&fb>&7n[|qꫭѾ}=mԁ3fܭj ˮo.}ܸN3;ܾAP :!""6iMFlHKۍ^gعmNS$‘R@s9}#GŮ]ѣTG:'nN /<7ݻDo ]4[M6o~:w^9Cht>BCgreO)O-^Ue)0};/K^С>v] >| zDmf.OCm2wn_4n[#ԪP?z]ƈmhT^c)kl0_W*pclΝ$|`<,Z޵އA({{Qq"Q%*Qaץ(WV><,,{Dⅇ;Ć{tD6ZH{Үx7!:YT7){q)KzSˆij$07RUmGeV,r[(>a) z •Jc8j->Z5 _j#@;iϫְ[;(ពM~JB΅{$R31c8?̋"sԲ!,_S+tyvXV.rB7M/r0p(ob Vܞe򯖎Z9 j%wj{x(Q^Zx>Nr5q5 ~tG2w,H3V4rBty c~[,VdzO[O/'*>gIUnP2bbOz.xȿZ:j.]Y8 _jQptGjQ\$*,vY垝;l8_<{_{gCY^?.co|$6^NEcԜ m"y%/ISj'ORjWKGBkcƜbT~GQ hK<2 񅇔Q(?|ώ*=8xrn?QVo; Q*~)V#^ާnlH<ˉ7_o~خt;eVۦGmU)E>ΜQ򯖎Z9 j%wז./ g+@CQp6Gq?ebtq"-GZ"@OyhPOWAk+ҳgZGQQN43Rq< l3C +Ճ.7?alo:~ER:<ˁf{DEo7G6W)ߝ>t!]P+dzL{_(2_ \#=z}=8 (8)#0/呾A.(8 (8ʐpQGw!G.(8 (8 A(8 (A(8 (((BB8 (BB8 8 A8 (0P(#b8 8 ((8 8 8 (((8 8 ((8 8 ((8 8 8 (((8 8 (0vbpVk\\ԑ.8򄄄phZ&VNL&WKgg'8 EEE (0ttt8JSS%8 3ނb2(Q`vJp܂h(0"/n8 ?(fE Vmoo`V+d21pt;w")'0Ȉw:1#ᘗ\VV8 `X ghG_cb[F(`innj+[ZbV]L񳀣 $q'ۿ0`,({';񳀣 )p8f3~pcXf ֖YQCssZaďLu>Ɣ錟 p@^P ߳JZ% (։GŇkW_=_p Ml?3kֈÇܯS(jYݻ'))b|QUէ6񳀣n0n`WOel{ZjA}}o{VyiSGy1ujs|A}=mm9ZV7nlҽm>g Ncp ()k2plϟ==m;V1cƍYODbbx>2Dwd:ѣDnSkxղ*L3Z9G sNٜQnyٲE44_gyFVxƋX,"94/%;+>\4=jYݰ'}qOn;wr*clt_amĔ)=*9}&S{*W_VBNl$xCIRي{ҥ⥗z^BInẂE-=Y xg& _),gd8 @hkk;Mѧ)]*W\ 뫯!R\&O&>從9sU88T")+MM3xj~88ZVed.T 򹯧bn0ti#uuD{{DnJjQbpܗpxaTPZϹpƧ ׭3Q\'ǧ/0())?߯\|񒪪pVwBs"oחӯzcR22Xe/0H)(--7ϟ?/v8ʉ{yJYʐcʶwBeq#G?޴i{_:t4Q{ǻ& &++91q¢E}SOK)^`ta0k>os_|g2<WٜN; >'tkȉϟ/3ȗ' /έ6#5=_μm~zv֭+O=VP8 ">4>5G裻fNvg~>xZOCz9)H;&>m[u͙99=5uѣP/0߷yϟ&:v8wB>ܱeOu:XLNu 5QFz;WϜ{/?^z{<ʾ}W^)^}'R[cy9rgر7l8=_o3++sP)^`ta6e*ʥx|nY\!'<7xGyUyyy/\[{KPG?޶mɧL=Q

j5mmm)04;D=pP:;+qBݦ&rB(PTTd0̶n>mh]YQQA1xPl:nQMZzet>P^^hjkk)@^'j_W|B_^LQ_O6P?R zOuO9k9pPbFaNaaNm-mm#P55ofL&~|B+,ֶ̫uBzoMKuP8 JsssqqlqqqBxQRR;P8 DF 8pJR8pJN(R8pJN(R8pTN(R8GTN(R GTN(R GTN(* GTN(Q* GTQ* GTQ* (>JQ* pJQ*8pJQ*8pRVkCCC*tڵ"bQZZZ***("B#666''GNxԺ:јINWUU9vD(eMPZZ*'l"\P8}}fbhZ9a2(F}}^d#==9UYYI(g|Ӓ FD!&%%RR\/N7`m6?p:pQQ"w;߽VNc5' .V{TIIp4u(IQۗYhy"ʂB8o֕^R|ɬYtDɻwN)KP3)}ҊY{p pPC٥o/H?yWp먑aw=MnN$L1OYc 747( 5DLniأH|J~ur<趲mtrW5tP IyʣohƜyfδosq ⦫E1)^KXnU4br"k(COU--XoW$5V| IqoNϚn.6\s;(rKğnqaC|ylT Qp(uuY[}EBZrR!#>va.[d]uw}`GpSR+2V ^A{~ld;Sb6bl1vDŽN~QV,VxH$$ZS5qȭ5rB~-no}6ǔe<r(N@|.%_4GT A M="fNJAɾ,2ϺɭOԊȳuLPnzN:פ;jGHB)|Vb07Gh:;;ݧ'Nccn10Uc(Oן+. #Bb1Dlr;bQYݓUIJo]_VMt{N_󖊗)q9=ӟooyU:߯Imw_GT(%OuJ,~vsH nv)ȑK.dw:߹fsY}Wp9MEB\.8J:WWa8ѷqIqۻ8 D|?kYZ'ϯ|{l~J{ݶJFew.Ouy=qDi@{=bZ&|{e?w@$ הdXmj$30c8>zF{Znڳ;ɭOg>u_vIRjT[W,7oalo:>Ǐ;묳N8!O|0*Uw׆ l].V+]Oq1l7DB|9ӓO_x[ٶ.g(-6*TMQ.3F9vϷYEZtL27zGq$e4n# gJm +?V( N169!?(= m]7j)L(>ڢgw[--"}V(~& (S Sm] ߼]?(ُ=W_}pǏHչaə3+Z>JO,5ei"C88uk\m XD!ʞӵ\x{rt^?UF\.:!T!qn꺰څGOl!vm$'Y8@Gě,ͫ{ Ӊ08[|wOoH4TY4qŻO:jW(u@Zec{:e2枽2୫R0KY%h]xOn}P[]D7ߓ{(\GQ|>RjT[W,cuy+Vz饗rssî.Nǣ͏n.ۼ0oiɧ)Rb:ZH\B ոzV_t*!:!  q{II_yUGK2v'+_kel&֓3q\3w@}+%!-aY{Q.\#rmeSzQax"7].Cœ<~XXIHmҾn{}ul/]{g)uV >[}Np 9 [PJVFqmHKVƎߟڷл<+V'en莢;ޡ| 򩶮ZXoخt|}=iiik׮}C_;hy+)8giB]9#㟮)魮t]!6';\W59蕓!>u/d庂"]] z|(MįZ ѷ鉩7XohhmQ`E4R,7s'*<7e~8[Zw-.W8س#LGQلe 1lGQ˶{!w_?C WH;ePҔF$.#JAɃPDAnNڷл<+ʤdұTפ;ޡZ>U+[qjN_^?|/{r1cd{sFuOONOb+\\b*ty[LJc}MGZgdkkBO d…}ԯ'^WWW愄))kJ$%MpL诣k6!x~\BpDτ8jP=eWv _J'k~_y\Bk<;҄Xz`I$+]r\k+.]u=R+bzUիwdLLRU\\,<ƣ~.tӔ"eDma&66v޽[{Z,۷ 9kJ,j\7GʭJq}C՝ar}_*'}^ޯ[pu]-}M)\:2ݕgj%>2).h:9H3NޯI}7w"~EmJ_L霒R^*kTTFsNi_p "YNd2-H^:ouZy慱Q@XŏdnyzIzJVVMHH0ͅV5l)QGT L_Ajjj*++KJJb4n_{lfl>Gوs{v=74?(zvp0p8 aBK ϵ;utkLF\WܢEkJפ &SSSX,hhGسCyYt$\q?Gߋ\Gyq[l;\,xվb(n|RRRNNNiiiccK 8i6wFݿnd~V>eILg8qzrZZZw8 AM];k-?`0dggK)ihhp8 2dQ̪9[O(V&OT4}pCeɃPP,:vo9s"PJ/[p^y+)(Ր>~i+/oYu||沊eM#8 (A(#)"F,Җ߾⪋n=;-YlOY0ꊣB2bq}NEuQG!GEC8 A8 ((B@؎#*:Q J((8 8 ((8 8 ((8 8 (8 ((8 8 ((8 8 ((8 Cjmhh(Ns׮](0 ttt Lp6$$$ʉ-[555(0l׋^zJpf|b2oAc,(08xR&@DPPPq& pZZZ܂b2( Q HOORYYIQjh4]]](A8Nn9`Fu+ վPǶ1:%% &=P8 :ۿa42#Y#[pTtQXy!|eY99";[8Gߢ-F}CGEE"5U*suucu7? rseAtt`?o29? @d}FlxF.`,Ÿl؄Ѐa l(O:::za z-Kxyf}ikZ݌Q l,Ioݜ}zE['W_ gt Q Nꬬ1}ЋW^)~vŗ_5o}K46O?w-֮=~6dd,}e[AAңPM̜=-[kKsŮ]_ U_/Ow&kJ R8qB'FeLCDF/9qK>Ud:<"RR_a|//⪫Dkk|YJF{;b,gg:9p_*Q(&f;:ʚ5aa[*dG]QDaLNy牗_Vs{2p^P`ÆR3*):r_TBjwuѣŵ׊w)xb|QU6~68 ȓq:hoC׆%Ku_Mixi?3ıcCM=)dfgq1o\ (7*6w_Pto:ޫ/[&x"_0~GI Jb\$&FYfc?̝+n1LQy?'Ӧc3F9n\&&*eǠwO:ދ"`p:Q q_Gqw矋YL:J{0Uve˖q :(u;ʆ gxjr(KB|wZb2PC /g+W?x? ;4eD/ի{KqIMUF|g$!pnH^z{ɾ}J(;zT\pApGP#^,8;wr(WQX_/8C,ZYL~܎;}rO"(/P.X .&LWmʰ\[tdRd =U4%1Q ES]͝{_L(, #^HKKKݹ3ҟ.SDCY, Α@g0]Y|~SWQ(͓ږ1fΒ*iNБ $( Q444p[ Ns(0 TUUitXD1p=dp@w t|_nf,N^^ެLCSScls(08 fmA8)Q`p8ƤI%%hG4w2NGA}NקYXx1dp] S^ӿ b.aD[(<(0d F|| 8 0`0U{H~5]GٷԹ/3RS~ u~b6P0G>G4kȉϟ/3ȗ /έ6#5=_μm~zv֭+[f3 8 0?/|]g'z;3?rOm[u͙99NG0 ōW{隧?~li'fQl[F= Cx${$˖-+_!<=}=r>c7np{7)gVVy(ÁlQ\g_Uʕzrs'˷]F+uy$>mVM|4̷.M2AJSϽQ Ņ 9ݑby!$$$[]]]R\Pmb˖-)z9M@)uD&QN Wz.ч^d }Q28 D1%%%>5{RRESSaL%Q:2}_ H:y||L ꨬGu .FC%# uJB+piS_ H}^AI%#xNMM 8ʨul|Vr#T連N±zhn/9Q_/thn49D2Bk6dd}dFG0'G(8ʨ㹦8N)N-*>8 2rF#jjhGK \TuqGe $ar~f;Q8 (5";[8٣'V{ z}pGeq:ص~nc x20x9pQF5WhʠZhd ݈ q( "}{v RpQ a&hkmB:e;^Y#bbrC#}] 쌹}t~e`sD/EKS8J:!9Y抮M5[Ze:Q]-*r%p(O=%/ K?%}(sE$q&TW+ҕG9]4>,K抹3Ů1$GAYE\Y$IDŽN~r%CkDR8w02Ϻ___V H)cJ\-3PJ^-q<{'5쪭шp[nE;/s/:ʷ%ŧkm6GdO_e]8vgoY֋;ǚe}^/{ZYFjA"q;pj!Lő2ZEASɢ )< qR>%='WRrCb=|+O Zf<Z>ypCzQ)GsA6 a4ݻ=C ر'#%[#DqU{,eEʦ}.긗;r5b1w2_ (>|STV*3{W޹ӟiO C,)'gR~O"sgR~L =6E1f2s\.H[V.(.~~}yZjSɫ%pe |+?qLRwOXu-g3tO<(6m zOԩӲQ-څ֦N_Em/NоO3S\Yғ?ū#2-O<>1fl~qw8_DEn/IwX[->Y4z.$l8sdȉ7I; g<ʇw\$~.ҒQ-zKWvLcs{Oa.rAIgTC_F-qQ|QGhj3JJ,('N({Ͽl Gkr%NXDrrG]rN2矋fPGQ 6g>tjںUu.s,ɏ,gY>+H_"k]~`hnnIr.12Qi2NQ߳TwߡA̙$UK>9_oe8J<8,k~hTF.8K)&=&eo*+=coK7?SFʢؼ^"Lɶ%>Z8OR8 (N{{rɐӷ>_#GgcǔۯpR&Eo(WV*)g.]$Yx %}]]2qP_Q!V/\oj`)? ϊj;MIs[[[lq8TD3X7{O(^"("$38 (NWWWnn.)tϽ3|RFqnۦtǘLG|_|HʕJ 1DG9p@1)SYij龧Ƴlׯg}WKjOP4eBVzr%z,{3G)޷MHh*Q)//GQ%y\p"A!^wB=b΋%p33c78jJDDcqQj֑](?NuP˔?/RwQ^Vf6sߞ8GN/Wn>ۣzTc{'G%*X,Ӵڳ>l1u^d ١<5.r"Q^ܫ<֋+8 (,:*, )Dܪ߿3 c^KƷT.BD <}_G,bzpnH6'6"wGIΰ;l[~QW%j uyFѝQ?kt"F8 (YTTxFB8uv 6^oCpG R_0xٮ_UyONYxAQSSѬ1#w":^ڻCJ9S< /:bښ6//)#ǐ?7wQ.@ٱc-S%ɹQGHZڵ+۷xEF)**m30 QGhE6ojj J SnG1 r14|8 QFsssRRRNNNt1+####--3S*Kvv4DM Zp(pM))TMZ[[F 8 (8 avLyw:3?ZT83 3GG)h .Q&(LSsO(bLEzQ|s2f$~FRMMTt:˅GbH$EYiT0l6Ga42Q(uuu)l\.WՅ<58 z{{9kiiA RijE)SG9YA655<g-ȎR fQsdCCCF&=\.vpLSGNgg'q(كlf%Mog0JV5 (Q@v Rz(,iDccc4zfB08 pEnV555rre900 Q Gfp8 Ӄ l6D"IhhD>8 p0;|jVsAJg>x0;~F78 pi9nXPH86L<ϧ!zzzW/K c64(wfD"d73&ՔԘ0b#ze0MdRZZY)d~k4 Ry *VРw8 <㰚F.A~NV5_~o}W4\\Vk Ǔch'Vq"J.+&*-_p dn :J,^h0l8r}`.;u^<0ćZBʲk W :ݖn2Qi4Lޔ1 Ckk+J8JV08^_-VlP韎Gk8hrxT9Ĥ-d׫s;ƯOnG JII G nVIX,<ܬJ+=Ce&it>q;}E*]1'RIߨ"ER;`@G}:;r{SNSW7پ==< 3b2AT1*|*}iP8KMF8NsEd'oz{%3$c0Ř;}B!QAQ(((%EnQb?>($A?Q"vQ*]938Ӈd:J{{;J8,TutaM:/ h4Rw;]m4~ڑ&|>H`Qf|Y8|4%J 0ljBr9IycDMMMcc#8,R])Qj`С` Ev:2q\ig&LD244?3G)y"V\zgV0lӭTGb /{KeN5ӹǻ|>\.y)jIV]]pR(X,?lh^{9.a˯~{}u gPw;;Wlf"N'z2<<4)Kh44!SOuf8JAizz냫zĭlFW~E߬m˹G=gBr1e6-{bio?pnmn ܵ~}g=:Q>'0Kl}{{&^~^3Mɭ_6MP02|ş?2٪QA,X]r޽rt jړ'M{[D׳Gㇽ޻V[x cD<ߌrcǎW~Ӕ'82vwV;WA)!W4e``@qM]q(H0|dTpЮ[#0ܷoStyUmm}FX-i)f$|ի+媫·=wsGS &4  XV/P(Jim[E(_ؚEsX3ܹzzɒ/b <4&k**>>>}h秒Vi1G.ۇ2ģc =6 lh8|n^\[-Pw;͝v+OZ(^o\.b4662M YJ6< e_)Hw{Zĉ[?'oq[Y-lfdĶw\-۩rۉ;WG9v]k4i天i8@9"K1Q:ʗ_v-ZdJ:[K˘۾7x v1%"5}(ܪ*)Kl!6'>utQ__?̴1Mɪ , U(J 1Ql2]¨d0(»nn'q͒ѸPRD:w1Q#Lm ŋ~?n~2շb8ۉ g0l ;iN*/.^կhvIyǔRtLp|E.r}?vNw Poձa):݌r8rn, rmt0_ӥf|GL>H_"tLpT/La#Tbv0M^Rt淓8rJ @7?#zO 9o-[F>:/'O?=I ڴzjreZνM)([T*Q?"-Ip|+Ez>%b#''}3dʡCtH֚I'nhVɓؿGFH^:xp,~=uukNw:8J'TxͰFqQ;{wv)q)<]]],ls2 壏{iժHwП4|k쳣p%S oGZY۷S[:u Wm=LZ#(fV'] q\DaLpϙvzV53 Ebqә>]w]MebGH"lGpee%GҜ9$>w"=`,D+Y**J/VHx(yHkkL&zDvN#V$ךv?|n''-Kfʁ}BLkʿ{{JL;,'ӎR[KnNJ+әJ~N*y2Ԛ"T8O: vt?vZpRVow&"h4& dUOB" >swC5<_neX.gWߤa1lz pG9X,9a)MMMwE$ɤPUc./GphzJiJ *1 SRvQP<$D0db0ISJ#0AQ@RiN@~y~瞣QǣP(r,0sjVg477O}NQ( p\&NiJcc#Ӕ\'&ɘ8N}nV;8 ɛijj9?]BX,  f4X5u6s,<ݽ;p8 (DXؘ'qͭlat:U*nf(pW yvsk*j:9a'Gp455kDy!h$+^GpF͖gt:9ˉYgO&~G^w8y|n3Bp0#JJJ2 J2kg|&K4ݭhpM&mmm(406{p8b8D¾%}ee'0 Ed7Mm۴s,_ZSёN'ql6h$p:4Ӕkk֬͝+&Xn+4D"UUwy|nXp8zH$[-R Q(Hp>uG?2[]QQZT$j  䝔LD"#HT\J[/%:&}@t{0;jp$\uP(Kֆ\ϟ/)*DB REhFi~>r%F1/b0Q(Hp3|~Ulh%Q#hF24@ITO7O4wfwwwV5v5rbIfCk__L&Cu(pu`0v-?^,D"7Q1D5sΕ.]Zo39ӔYVLix3pԯH(`P._.*)Q49|p%X\D橙7|@kﯮfOz>cZZZR+XQ(H(`tSf.…RCq%"j#җsee|E^X,n;MM,`b0f)P #>p8 l:pR*--).+3͙M4 KȲ#"jUIܹ*nvH s 5fex?Rp/Qf˦g1y~/\([nѢval*#)$4nY ˗bD,8*i&3|"a(39VDQi88Ji:|%Ṝtw'iv2 =֜lL$'>q ~Gx<ÇWמw^…B1y+W*7OeKCCfKz@)LS&xYk[_F!/JS(Vk Ǔzk2jeZ*x]#"U9_mA'[=kV;ߢ>E`Ҹ|y>غreƍebqҏ&\>fDnu-bBa{G!{^>w9io?m +28sav sXbr;3˟FOC;7G[`JJ?F'**|1uDG{肵TQN78;oIxL y-]Amߦ?˙Jr)#m$ԂSj^Yi =e1qV(_wi}-q59"۰rc7<( {R1M*^%VlP韎Gk8Nl4~=q_3WglcwBzgĔ≻"+u#ttd3Gl'?#r5ͫGKcg\gz4gn?I/hk5hꎒ0컎Nul$,:EGa'Ac_ziUDAbcŵK)rGaXV^-X {@| nnT"}K3WHDtO,?8O~pjDG.'%%1G%sH}“bΤ#z='q.ߧ N.ǟ|bcxQP?!*JQa$j5\T= >uu}*zzzR~ٗ+(;+e3:?G>O_v %#˗..?00hcnj-2)*l<^Ԧ5vיZ9j&it}|Havj #, 7/̟v)"_1~9{Ŋ-LZ)w3]6&%y2a/YN>KMB6";s%^qxmݑƆՑ}"_=I?i;ʕ-f.4D8qUʪlgXy]d% ~/)78g90^V'?-RV/=6&~icX9ҞIshg%T;(LgSErD"r [(LU/(&t+vXh_W "mlǷFTec+Bvo=IlDŽ'ž}϶HOoK#s7O^t8e_]uC$ñq?Ͽ`~icQvXbr2 f=Ji.ZLeAtQ qvg#z,.'=_ L$M9yD5m$N!=)|<=j:^8+FVDY(6?s 6p+9_4Mf|hLS3;s@a; t^5HMB>TUD[`xd,,3^81Yݹo-Zxf@J8 )WG7W3}챃qv#rdgVFŶ/2/}|6Zcٿ54gNܹzzɒjڗ_6*WQ($ tn‰bW:uQv\\ESmmQhvJT 8 l: R9TZ? kwg굯z?ʱc \?h4iU,ɉ~OxD3mzf3 R+(HHI:~*D)SU^n޴IiLEjm/;|٣bSGiU4c/xˡC,YR|;~aV~2&+w*WQqaԤܼYTZ]\BMc+(/oZl'6aʕr^qc#xSl6N\Gj8VYVV-sq:DdA.ZԡT*e8moox<1vZ.uJn;/s2@GG yV)ŵw\.d*-Tz)L&36mpp07R)w8X`ǹGڱ^~X$o`Yo< J`̬Vn)Ʈٽ$rSRYٙ+(p0k"ehL*D" Jr0Nii-juKR2 hs;IDAT'lde~Iϙ 8μp8 }R#]׬i޴1Dh8wTME"Q㤉;eɵ[ݏ@C7xWTl\G!. $$~ϭJGԌrvBN'qZ͆ Ggl>v,T *pt p8z= 8 %(jAd 9 C.v08 p0S~ii){p1 ~v9aB%%%(QL1Aڊm5PV((QrW;՛Q7p8l2d2Y555@V:6 thp&Raԓ`"+QWmm-t]G]bthp܆J.(vL/ꖖ%`PypǓCQQT(GU<O9#~-ӥˡ9 ; x1\ Q9dgzs:qK:qzDb1sG(]bp\JHj\,΃!LMN0qOb28m/v}h2zщV~=0 :NC͒b Q8)A++s<4?瑫WկeA5D-'CD–5EݦII,>?dCtH.9OJE'NH74I'#Ywa+4xtD+YhzJ_ \p]2^o8I{i֭Syg`'T7hhP0`صk֗JE!hGWtP8;;HT*5]λ~ Qf.iq]ӎ3IێR[KnNJ+Ӛ2l ps|KϷR4̟ωhPI'MvKK#R #j't6J(#2_9Mۯ~1 (`魤/42'd\=}gp56F2]r9Q"2veooQ zH7#+mۜ/hn6uAT|i>Q*y3XsET/68)=y|oKcTj+搌@ČM2)TQED T 66n=9peF}>⸳:ґ^z)<#d>8-)с6YW闿 ^{l_~I/铻dIUwپ[ҥ/her!{lr<߳d *r<+r?5+%#DDSP,(KYuIq~k AY%t"æ8(ќj%%/8Aǜ7__=KQ3sڇ i+"͢mm79nzn9ep+g>l2Yt888((% s֮]?_6Ǥ KpAv;q݅:MGT1"5+Bb8屣߱ggΥKD#ɇ L熾-,7,Yt9{/cP¸ gg"[f_p8ܜsNQGa޷:,VV%Qک ]y1kvrQ&NWi}јз 6oO#=Ji.ZׯvAtfuC\luDdc2a#S6}Nt{ K)<W&©y Q%6 6+)-SmirH+F98J^Sww vhhv/lyPeZ3^M!Vj?tA #Ro u(%.l$ѻD5K8˛`ˈ^&Oy-z/SyZ(D$P,/[嘳f?*،=D/ N~/l~JxJxg4^ L3mhqmMn_^0:TRB`2Dgfu`0X[[sQ>,oeƭ"|7%|P]~[h{[l3<,j$|FkDϞ{L2V +o$fYo|hbGIx2W3 }˔efI09G t;;;'jBz944#ˡX˾wNFki*g֏,W bX#l67nXzO}o{=D}yޭ;B%B3#+DFKp}oƒ$thq:[ZuGxQ4X, Gh4Q#n%EEYy2~F",,ݥߥ1kv\_.G9ڢVxpY~Ah t=v^C*hx(G>^I{Dwqǟ3fI(x%0զjVY..gN3Dp0 'fraNgg'~ _u޼L> 5pljǓ Mk&IՊe+EݹSGo!qÏ{D!T]vv *&>[tG~yZ[(TMtdY zS8M¹#ڸo\g&>٦jM&နQ@ZBL}>ߤ[\.BQ *B#p&DTVJ$4Q(deۣrLY66]tƮKN|$O|KRR,Y.aرRR$UWW7551)A*dǦhT*ѿ!:G`!NI{%ڕ+SgkSk;mZ L&+mlt^ Q%qe5JW[UuUMj&%Psr8SSS3xy\pGɕCxY^;UUKsNi6z=ruZۢݽ{LMnUW/T*x<;do_X<_>O"kVH d/EK^J>G`j)IjҼ4jņK\~rH4-\ñcgM՛De2`00)q_G e,(s熆RɔEkܷs66QXT8Rxhǖ*S (9â%o0ߪST#V۪kڷϾOU.'))*Խigm5ۖH +laQƒR9^H)8Se?'#;;/3]vCS%ijz~ (̴¢%në'DG8sW!]/dS6* seٵͰdR(L+,Xr:PJt^`NҢbr~E[u]X;;^*ja+/De (tâ%Gᆆ\GF8G'D\#[sI%WZ޳""}>~u뎺Rt~|upLX\a`b"nVnWO׮ӿGDJ*+oQի*"+$e,(=RiKK >":9:!RD.JWB=OUoRX%SQ$$e,9( sXD'DLYWo5UՠJtZh`®Ѵcz8 IEKJXӾ"FG8pQrEJ(Jjâea^r*)2J#%IyXd8PJl@hGUe, p88Gae, 9Q4EKq( /,JBH_A\Ѐ((@Zâ%MRN'Ge,#v 2Jae4J%G+2e, 2<<9Qrv5ͅr uu}GIz{y~I@4qb? suuFݎ cxW"Yv?i[H*\}v d U uF!sQ2Doo\,>8[y+9T 6%*MV5./sQ2 W*K/?Y3`˗]& Ţ X";d,W%sX,?lh_{9^ߞDNwLro$W\I8sQ2Niȯj[]?NY.}য় FWVTmڴ쩧n`Cu)UHZ(ؓO^Ϥ%>}(C&[5*/]ϖ+oPמoܾzoVlFAl{{Eik[fx3Q;2v d:ʗ_v-ZdJ:][K˘۾75W,KEbk>QIUURBlO|a8J0&U) MÞ3(d+SPXY8JF7\O l7tWe8Jj)lJWG(JV)%6`y+9$ uǝ?88ǹ(fdV6t:y+QZ[[e2$Tn坝+Ql6DRp>uvt-\pקT*.ݓ@ww\^xG4v].dkMý|? ?<:8pO JɆG4l6kZTZZZJD"H&t:2[#e3WeʎPzQQGp8 (p(QQGp8 (p(QQGp8 (p(QQGp8 (ruww't΁GBD"t1GW Qf Ԥ-444vG5|>A$AGMjjjF9Jcc#2===e8JV JchP %+X,1Gq8(R&(DžaGF#sVG"KJJQ%hkkC!p949LU*q/h%jzQ2 -+O'j#rz ͑j8MÿEpT^ཻzҚˊb&TC"舟i[ز&,%|rrYw_}Cp~] \\iLDA;N'#it*êV(v2xW[^STQJDDMDvHɤb}毫]gw?q#(p)S:mjش@ "%JFN"Q8m^2AAE,?  6m>T0)d EZY*+Mշ;ncqQ2©\iKd%$"Ҍ ,)8hrmBOss*{~;8r()?vukS̋uU =I:*8зŒ5+.o?|oqQLtXmgƍ T#:foTp>sC֯opG%GGM`+Q_ γH\4_:_f]cΟ#%|:;ݸʹmvqdZ>Ȩ`g6 &CT4зDk7~ "|tn5K#%#Ne&DLyrˤΈΆ-*-)D]pCT䤣&𛻜wi,JCQZ) ]{o䊣L}/:7-S~ / uB˭[Q,/t+N5MU3MfdյD} Vhz`_]@TAtC\luDdc2a#S6}Nt{ K)<5&©9GdƓx%0зbXݨe02~WU΍HjdZ5c$.ٙDjD*.l+BE{Uq(zUZ"l+&`Z<4a?Ǥik[F3VQQؓRd\*yPȨwb dwv3I&{gwrv]Kߞ=Vy%7E\Q*C/꙯kIT⯊jȸv˦gzW1EY9TV= :>>ܱ(4"ַɮd`˃GBsw+l5G_ٯ{sS UP?dt򇇦P?Ц_t- T~+$d LߥF2O<<$`F1"[FY&&-]TZ(cg,#0~c.(3')h.6FRv |5&]y$/._S];}| <^oCf(hzqq?R)A7gdFkkk<)9)19qNG#--/Re+ _nÀa8LWϿCsyz;}P>4{lQrNQ>*A+ QȨB|^쥭K 11jVVV644gdFqĉ]v֖&$&NOͭoȟ>>boN(tEொ򍢼ޗ*AQT1E,沲lGvllnnjjdzzzZ[[+e/mj^e^AC̎d3*.k)+e9$TUU566:tP DFwwv6-'m5ͻ݌?/Dgd.z}5k.;VYY)c``8riyp11Wٯ*)oΟ55W8_ƏO.XTQHHLম2eD¹J9˕U)oO=+ %OL/UXZW,wrSWe$ػwoCCvqZg~kF\(7,/uV8'N⦮2ʯΩ;6{B_x$g`u27u@-luuuK,?Ś_np27eIHpt86,iibF]}!vntgtd^[SX\TUd˱qSW(Ðc %: ;ӣÿ)Kbw{}7u> g v{%.Ñq;n0*5.)tdrSW( 222$rwzI.RRT)(M] 2/DԮpZpSW()(d2 Q(d2 Q(d2 Q(d2 Q(d2 Q@Fd2 Q@Fd2 Q@Fd2 Q@Fd2jt+ }7rhy/o7JM6)Q(d \ddrQ(d2 (??vU2m6)Ԟ={رc\nkR.Ȓ+g[x㍓&M2eu]w^2z'ONJJ*))9|pHeϞ=K.>}b;wƍϝ;?a7j}oR__ѣ }~mBB|a%z{{WXf?ׯȐV\)F w4U}}%j*+p” & 2|FkO;I믿D"Ro>u\aݾ}{8bQ| eMf˿ڼ<lԇQZe駟W,flgΜVڵk럻[3qd >Ko* 7er];(x|#Gtuuy<G^xA[-[o-iii򳭭MJ|IްaCD2JzzL[oٿ A*DY[n1Qx NLLljj:zܹ3++K }Q[iӦ'OߨfVߤ{Oe\_cǎiscɒxĉgy&555D*ǏWVVW_FBW^y5k%viaaw>QLe˥MP* ,fy2-íLksR|r޳gOD2d^t#e?[G??>YtQFEF_~þ3#@F ?hHxQ'|zj)Yj՘1c>3Q4k+CvmF=?% 2 N?g 6[U;vƌ%YT;̴٨B((6h3J;(2v~;99>W$d] woqNJCprqy! H6ѯ\P$$Dr)h95Wé=p.KgWӪ)o:NN8\h\8~ǿQ*9!/8j8SƱmP>D@"H,"G FG{h{jg=,'JUB)~˳D"Y|pAsQ1a|=pMH=.c#l=U$qՒO' H$+Ik7 |s<_X>\1r(n6zj4= ʇz={LzC֪ Pn<_9+Gʌ'̕鈀D@"H.$sW uE+ r7|=?j=922nGG>D1{Ș̌Ix9 5c=8濷iH-ll{a۾>OD"\ HzWh IV`yƾn]=*]Aӣ̸ޭ;(3 uM ?Y~Ɓ G <ON H$R@һ@5ӣ LgwAjz>ّ=/ԑV̞h+1 ~­nKhs+3__Y·~>?,hҋW-^*fH@S$Dr !ZtWWA0lل7UHLϺ/i]n@_>9ϳ9$rI7ӣ;)cɟ[9 %M+|D"H=fz$9<,2YaVUd V E:Tb[)[(_wE"H$C|)Ì@4=-Ahg&{$Y|#H$C3 }6{g OUTtnH$ɡ$b ISBN뀇D@"H$D.]TRR0~4BD"줫W"͛P(N(&D@" H$,111""_PTTTJJRlnnz}q` D3D6Q@B,!n].#H$NKK:u*'PXXؼyJKK[%λ :\.S" H$U__ ?~<ҥKm$I>v7ĤiH\D"Ucc#(:::((H.# /^J`*P! HRcbbƎ($$$...77ܹs.!3gδ_C]A" H$B o:<"FȤ?{7lԗCP({Q# H$xbaa!(U.EGGgffvQ&$gDZZurCCb>,, G D"Te͛B0uT$P}}=fOOO$44|?HW*@ ,^YY"{cN@"\@E I(RxxZ`\{DX*2,IZF̙3{ꅏmMl??d+H$'>{Z,I<(({yy`G<4]YWnnĭg~~};088822Ů2& HR1Łdco#%%eHZB;sL6ZG@"HzDeHT]]ED"DTdҰb$#"މ6n.d& H"l!l?7C#x$,>v>;== DeH(tH^DeH%̜9.& \_Tom\.džJR$EDDwu$"H\h1w1dDeH $$''c&M@"NTq$‚rODeHH\ "..N:1H/*@" Uss3&x? WXDjQYD={j!!! $LK@",QY-*,,Hnnn%%%$TQYɺ߿L]@@"YMTD@`#D$+55DCeH$ 6t}>50#$R{9=Hzzz\V'u\ `Ow삞سgOs L"ڨˍ#a]bބµ `)b',%uign=#7tSAAE YA6"^mc\l" Й)U%Pp* 3iu/4J$+yqqLkb7K<*ݍ[ Km$yԾ}C"Ss3jWѵpf)EpzS[q 4@c> 'shX:8~h]GP Ӡ;gkSv9^Yád8&Dl{ 'YxN#hTIBhQ!B qX#8( QP G|6cR=:Y/~6' lxS+F@ mGU4;II&mB<[x{6  {IW'M`J 0,' .س U_CWP_BſX( i;Y\;GS8t T!R`9>!H;Hhՙ )Mo$QF<~f<0~bQ`q ?xP@@@Hm?#i0==RӳB,0=-I؃BO=qP)ah_,},D ',jܝ*渥耎O?e=+L\b i#$ ܘ›JMT$rIwVVHZ˸]:pR;iχӓaI4=IGjz0="{bz>0=*{TVg46=! ~xJށ`Ig5@{$H/JB HFČL&[-ؔ F:vad:~8Y5$3*0$h}1az{'Z#d2Dηa[B 'B_(tx ).@:h H ?Eۅ&VR)Tsknp!ɛ-84ԠC/L"iFK4/p@2}ϧg-n-쑘dO=7 :lm( —!T\K@;5 T&O-7L@j7 me=j Zx#17 hX͛"ul8b: 19-)E<qzUNwceYH$VLL 3UpvM=aly7c+=WgKϐ3!1aHqH /@hpPmL҆æa1{w=Tdc9{nn7p:upw|j֣ǐ7س2~sG Mnȏ ]w]g H$GUNF0N1WTyy-Ug{qAcO HX_Rw \ϞbE?6O7yu=Bn; |ۯ;x/5> H*>&YeqK2kz&ja (1M= WaS1wݺwUϖd}BY۲R~vj.@0@!TQ*  _P'$ycan-Fsd)TF͛Æ!6@}EYW&^8DA`l8 {xq^?rp?2ͪa^<)>c1]:mUB"t%DrD XeAaۼF =o߲9`\(L֏Q`<^.ϗā ٝSdɅ'|ܞe?Wm m&,@h1@!Tjj*5@ׯg닔Z/rPtP4/O|}oQK9 >/>_C0ЬpҴF07,l۔ѵ g}=ٴ1< (7=)A6?wnn]ؘAΝ ӏ,OX֋{2 }GHY+D,@b<*) uaKgďJAk}Y h$ F >AهT48l8ƚlpuUJjnUq]bvj룞~%i.M@"H L>3Vq3[O{%뱅)BLre혅oRDpöYCz̛qkG]3Ó`]eg$.٢dM C !- aL b"Zv / HGgk I# !KKP wo._.'C5k<9{U³|y~Nλ6-x1ZOl$o3dqh&S|6l ad<_GcAnvw<;܁D6>&]eW)΋W\e7{(O#l/ݻuٽhz؞ {<ʿ2=kGpS0xD9g\>8Z?)ME YoٵiO 6y`.٭ ? k>{?ґ=sLӧ}?d@Uӧ?S8:_yO|ykN1iCΉdC 7@b)f3H${)} =|Q6ٳadTg>Xw/7=~l-nV #}(nCmK8] RW ['@~*af([| vHR7R/2Py+ =fa+naKNNvi@]ggp C Djw 1&ue>ƞ,TG4=i?I{=.RI ~8~ 7 _7% w, UL9.@IŲ^,:)ݘr[H" Z.Pgód4wN#:lX H$TQh8}$: [(OW\}$DTjjknn))),_PPPٳgl(;cov# ^__T |T*!WInnnD2OA$Vrq] " 99ѺO!{80`@\\ŋMiii!]R;f:d+]X.7^V{2NhS '燅cbbLsLѣGbbB/--ds&OcwGI(UPB>-=-2&%%EkBBBJJJFސIAAA5552c(444 99ҥK]\Rͣ`$oԞ EkEz)ÇWVVZ8 =ΝQQQ\L^^^tLvOgΜI@Bsez ĠӤ;ֲU $SǏ&H$SٳU= HS"`|||n&(O銯n@W&..$$$[ 5666}0D" 9)j:1|>A;wΐN!lddgg K I$ O@BSbΠqV*~i56~x;D{ADzNt⠬D9c6H)lO6sƎKD@r%ajKюoL9~EkuK EIIguuuTT_||<"\@|iꅏy3 6\\  -FÄP?~|QQ}}$ 4R&$$(gLRZZԩSu9$;_VVV/""QZǪYz"r!޵HjHtH(Jdo:@%%%TD'Y:V"##uUtܹ\j$KNJŋ~~~zH[8XQb-TED" ѱ" r;HII1TvEٳgDNJ{Y}sjnnnpp0.%X\YP\ZDhpKH$:V$jzgDH$:V$lLUv.`jjjr9""X\̛7$IE5LQ;^"NcE@"477+ #i""⥴ D" HBBB}8%ED" HBCCw{s4dZD$$˥\Fn}I" [q0K_dd$SHyDDjhh #C@"ٯxq8+ED2Qeee2o߾F8 H$DV_PEVr9""Bޖ<ɮ~ر18%^?l`` "" mHtkcTYѯHVK.;`s%EZ,̂o4 +a>&DMK*4\]`c_ 5nYj́HG䔪)9$ƔOm+N;Ashԩ#I.lH={5$k_u^RG,<ә_YV)B$NbqADŽ&C$_'l %zP?S^U)8;\0~|jV蘣8R.NÁ_4y# 9)oJ09Q!!Hb=e`+3 ZD\1(M@wFuFb o5yS lT !*XT'ql 2#$J\U,!ky-0EԾ#؞tQq#yvkX|aGbYļ !vMk HzBsc o*5ySq%giXYa^V|~c+B!L'W~ ̍U1X޷P D@R!#ia#~MSL{y=}yuN;%j8%^YVVF>*8ҫYƎ piKggM0~N>rjN{fB 83pNocqj+4nḣDx Y[2̀kPWA}}lm*.P5Kb8 $8Ȣz>{>m>vbҮ$m ֚&od2ՂM`cW#k?UczBV-`=%#$-V5ImA?Ϭ;mB<[x{6  {IW'M`J 0,' .س U_CWP_BſX( iWgA57o~Mɉ؉q QѠ= gH|Ϥ]w+0}.:{l||\.GHl'1h5ysI ጼvaӳN0HM MӳT'a ٣}P1L" iic-{`QhF7jc{LئBi3ӫeٻ|- q00effR-"ӥT*[!ޔ0?d|hz{4>pc0==R-S2J"a۰-!Pz jit076<=|sJ~=dW5uuxyy'6w.ns.kٳهsj!0,ʯ+Gǽ~vi׵G3>Zۼ&~&4izW@@@|/r"##c (%%%Uh\jŋ VMj ]s1A+ 5msL[Н54a+ ʀSM3Kt탖HLև'BOћPlWYBːN@7R 6j0بyoؐkMB lp߾ɢ+g/"Wp l06={8/]yI9 fհ)*᱗&OxL:mUB"ĝa\SnrV5uH"[QQQj>>>^зI#*~___CM:Uۋ K.:t#<_4z=vrrtL17 Z-s'hMY U Zs9V @ezfjƞ`hzT c˻{^au<[eGif7[ǖj[ n7qo}ͽC_+֟u-6 }oN^}2Opʖu [~Yʽ,,6-7frNw^eETh{%kff^Ud/D4`zjƌH)7jK--cj (&&F/Y͛wZd@z:w۷/K>𫪁;f Zi\ ڸ'hq۽Woqm$ë 6͝N2 jqEŞ7YLȞR/q0汰Y l XL|HV1K{c!% Y$1`IdfSM# s<kaUV++٪eJVuک{zݿeDN_\v A(`.]3/Z:[":w^B ZJHH˭3gB]PP^:2HoQMN`^s2A67- w_,\wU-u&h?K9a3&h9U|M1dML0=7ƞ{Q9d{1'){( 8l| }L8cdUvD˦<޲}H $Y6T_=M%mCؤ*XP&sOmXBY"2C4GEHx>nɛƔ4}&hk OЮ?-/1Áֽ ctcsQܻ'pӃoW=}˓A=>IAjsuron<yO nRߣ{6<̶c*5[^0d9/xi _M]}R$ބ"F{/><6Z@V\CIM!3[ nVOn Lƚ=Aլx&hU3hȽHV|*Ϙ(l=csӃm{5厛bh?Q#6<7\1hz6QCzϛ4@fz6B#׳?zzz!kdqWHTxu*<_[d҂PٕD)j\n'd_]R企4zcV8B<wZDH|+4UZ 5AQgvt6BgV=z5A=~7 &h=z?g9l$} nz]CqcW7_y6mM۳>lZGƀG=Mws ҹ+ۃ/𸁱 'q\OVC0BtN=/2kE AG-`x-"??UUkbClhhfk0_M<|\-72AkC i23=˧̨[U(nY>mp[N M3yȕc=HMf)F1oonvdoyu93< VUvNR(-zMִ9Q^ҥ˴ YtYD>ؐC2Kv M_\>kla8%ZDTe|j q)79K 1*M1w^*#G!~ra3Fޭ_@8PQ0Y;[}<%49z4OOQ1IYn*l-> Z޲k ed3& Y9L,|dQEUcc#"I Z>;UB V=!<&{6< 1‛G ejbmhغo=`IG+IsEQOy2IT,Ôn)888;;"ABq={XQp5 CvXq [mwXwru6*0袡A*kQ*,, Z/0Ƣy" 4Ęԕ$nz{FP5{y&qBy711QSƧmee.hbl#ի.vU-߁h@$b Iz#eX uR1 72' C={www#eQro߾b \Tġ7!!ܹs.Is:,wiEh#\dzODG#111bq0ĒevH\TġⵈCCC]uU&Y1d<+5񔙙ӝ3hnn12XTJ,0`ZVWH@E'׮ELBl?|Yb>>7t&-> 30&)s673=?/qvZD @ؤi4I: ~e t9<;_Էo_< 0sxyy577#cp LoN5|1Z~Ahy*`k566ӽ"˅P8Hu^x6A Fٰ).3^L:99%6q OA;^܎SD'>U.>X'=}y$sFIFku||*`7c-"2 )}RS! uPu&2 ^yœT{*`g%$$ֵd;+fΜ٫ל;cA%)@3;&dzU]]CMtH|@TPhԞ5y_ov(Tġ]kaƕ9Ed\Rȓc:JЀPU[j9ݒD@rb;Xg1tt-a:qh_!ЧbW z3ǟ"" H˂:+ !Ew>>>pdMOhh(&hD@" `κ9Y>HEm\`{}Qǜ"V"b-"dq-r&<<|wOwQ6 H$ RCCCXXvo0RԾE$60!zx.461q0X9T9^x2)^|9G; 0BT=]+m347"[85Uh.??S-m&U^cS I/"AAA{>q"ⵈoD@rqa_պrEJ]P/Y 5Kb8 B8@Wo6 yOò^mҼ z_+S%Sƨ,u88Q[ED@" 9'\$gḣ`lسA>Ϋ3cR{=|'g 4=o4Lc {8x?'={Jt:w[$D a! @'/СZկ`\:*b@Z?Zs-UsMezCnSD ؓ9m1=*d=îilǿÏS1](yJ&C#)V^33XC CG"2#-js j pNKQ'1'qEhP1_q,Qq*3-'HmRViȟɀۿ4x>4=Sez{>3]=|vNo7(Ee@*@>4/b?_q)"#M78qjq/pP?úC#϶ w3haX0==SLQ#R=2 Eo0l{!2 5|:0.͗,--uoɑ8)g-47fH10~bI YXaKD" !==঳ O>NŞ3CdhzVez0by֗`x(x-C/3)07gMq)" TڨcnZMHySqR1ΰ:TO@" 9&6>ʀc ?'W|C=S4ZL D * 4=/ <[dz61Ӷ Y XܩUL|HV1K{j(/vydA8@Bbn577J)o$Q4c/SlnF(j H61 K{U3=npLÀ쑚x{a/F=͌Zޓ d@X+g@tBUvD˦<޲Wf i;q)"bs-oMM$v5?JD@rP e?wF (Bp`J|ܻogUhz{fT !bߠ˧n~%񅓇)BLreC )5zHy-ݏa/>d/6$ .٢dM C]L O폑Eh?e@}sG>[MHzl*67o|0@ӻk@\wUw \ϞŊl|o2೴#~N !s_>n]N79d$]&*aŐyUA=d'Q6c:^H4=lϸ/}aݽ[yU>j9ǣ>>y3'e=d$VjHxˮ-dfc1]:mUB"J߭$}$"xXd?(G@;9{< ?E=Ȟ27 HHG]NSDUy \Z a#nE|ͽC_+:ĐޜeQUUop"aϽ9+u-3-7fH_/L7OMJ@" Hhed =kG|={a-O=[ o)EhXZ lX/, 5o02X{PL@#(((??ߑFCEhрdE lTH+ 6"o8r tK]ݻMnBA" YHm;"iM#"4E@#\E1 3.rW$Ɇ@ ڡe֎|_"^O>)"kd[ nQ%mO}ݷz… ) H$>͔upv+WRIӝ"iZh H, @6uԸҌOYʭ@@qp*6HkiGGOdggweUDV)@7[J\ N@j$rvOّȊٟ%|!+d6SW&u.]{<*"8l$I.H7j*:HemwATTT[o/--A\gS__IZdd$ |:;_OOO|3Ǐ:u*$_cǎM#t@oh"""lTfkQJ%h|1qp|aC}ctt4v})#Mo߾"6R;#<޸}l$KDɶkQ/È )88rss[/cItųdW ϛh+vmzv@JLL;\W^Kim[Lx }r88ƣ5G)+|'蓤=<“8׈(gSRɏk4N*j4dx:EE'z~V,B>ܝqMII~Xͥ)gH<ڎBuSkϸЊp-ϡl5=CB#fY!T>&zM--D$3umv7uʵS?j( "/5@.Ođ;M[:9V /#QxrQF@ou6b!ɓ'&fp ,ф}3g;bъp~bo* L\@jcAXBΝJF-ppg4It7 [ 6{hE8IYִZр${3B'JLLhIIIVPvNDu!' 1XBaņU@SZ0&BEh+1,̙3L,**JJ:ɬnvhhyX@ҺVҥKx6 z>iԊ@·8h{ #oƂBiaaa6@8/(3haVHxΕ%F}[CrX2, HP|b7lx!T0UY\Q֯YO/Dm{L*jǯ]F"Ł гgOnmE%4E]YYLSs=4ޙֳb!TVϛ71bk®,( bxwY PxCH;z?Uu&\֝kU|b{ҥP"4[_/b[.k};{ v&#~:ME5]AFъpWRttd׳gOLD^ݞuDž!!!ZT@֖R~(99 ۷ Hv1$ 1b8waJ:@auV/LJQ7쎙~C¶ܹsM.|3h_*kmehNMQ޺JOOHvX G +a>!v ߹Je/9/@`K$1|8qjqH<)7=Hhba`W+NKcod> *qE`I^ZeQ;{59`vkmO7L s۞T156gV۞1s`mϔ09TC؆m7V)4^8@` 1qH T*.aH;~ #LSrR3+΂R@$; ++,ISl$4a0l֓ rnhͺ<d$ <;697Ig8TP@:1sJITӚ T"N!vQ @:r^oO~o /9OeQS% ʌDd-T&# RcRbSGhx [%hl$#mO7:Ѕs ഘ 'R~Z5@%)bۄ @ʭ5m:yL&[/3؅qŏdXO}l[.V# dk4l?$ۉpc:9ߞO4Ig8XP@Vg1ҡX3HZB@L3@?bMqlb#AWgvֈLL~Lo(-8^8kuE{Ăҗ=鋋l6a8l%AH6Ƕ^* "7Ienz#:P}]#j@2#P>f!6 w mev0_^h:1 [r^9_"ul8b: 1yi&y>%;"ݯ$|56rHaLJ6\z  ֠Zm&fHk70>\ى@“ZrA3X.G$` V ~x[|}쳈?f'O+mR|'>TQ1ߓ71zxܠPܵcGIY.hG<:W'޽P7ssg;ةSwxǧl=~ y=;/;ϯ^p7ֈ9<2ȇ~` nlma|{I-]vZ#̮bmCYCWϪ؝A|oXԜS 9aQ~\ <:k!GK3/_T[eޛ/xN6f,G䊑CGyt~ϰћ1Ͳ{҇>#l7@@n=xXi?AO^|v߾x;sH 21VzmOk0͡"*f $lf2hɅO\ +FSjd\B+{ sw# v( ڦ9$No<c14zu%Ř!ZOi/V@2o}L tq9re܎:M>D1{Ș̌Iy-f={̷Vꮤ濷I.^>ϋyBodS~3V^qd A˅:ߒ UY\5~gthɅ,qS,5/~_8 3*( ]0@듒F_ХKgďʵZ7o[%϶C 릴vԀF-9/t05<\hn[[mĜa;wsu<1 ;BߛӽW~ |9}5{vzX–{sVꦱצ%> CWܓm6ҡLɦoayƾǽG+iʌݺc+i&l?=S;w,5#t,V 2pP[HhmONXaUO:UG 7=<0)Pђ 5b.SlO saG{nӉiAII 즦)ø;(J F$**YZk7jij)I^UAQQThn+Hz9gan}~\yw=KV$bx:~5/~P_<==9̙yyJJݻ1ÒKašd1=x'8[txlԉNdS1q[X:%[I3+4rBRG6L@SgӪ2`S|v'6;q_엇/oIrA|z.xsuqܵU%Z=oks' v+/@1+oSP@i\zy`{G =2wm{9UµZ!Ke1}!z4BY_(0un?ڼI/G>.f*t8 ?َ^d­[ E:{xt]p,GΦYwu$hKnn.n  !C<__;sΜ-%W[H֙SDNVy|:^t26>F)qi[uY!/L(2L@±XU*tnilp'܄z[,Mo_ mʗIR!N͆5%Q w_ˁ0u;-RzI#4MMzC;=tÀ4y䢢"smOn{$VH0yquw`IywY_X" hyd}AkoUR| %p[5mVϿ%q%psqoKֶ% t!ޒqhO6YfV4S`H:jv[pX2;ox*'Tdr(aKG‘ ~!!!fRKm0XH8Z¾P8L:44C<YD%9@M2% $z#MHͮlXZ:c]URmdIHko… Ç7+v$q @>67A=c!ƺ$96Y7~,Շn>G\#:|1@bLa {ZK8(:% ^J@" q -hâ4ͱ@#'YǯTV^m;njԫ/aiu J}Qw!9uMԱvg ͛7/;;TP϶g7nm۳r 1GȺC4QA]wsɞ: ^sAqAou 1-;c SC=۞ݸm& H³zu~|U{m$RccMl{v`@BU^dմwQ2HOWdPFx !}ڞeDKA`aB2rydd5׵VAAA2BF*99yԨQ=S[[虫k@@@EEVzOD@2j .~PR'Ǘ2upo=sGpooVd5Qaai׏4p@J{!$5 sy UUUZOܡRgơz8;vѣjl&Vuuu _V(44ۧ?&00U7HV*L9dƌ~|'NhpOAaڴi6h k&Sy$OQ*' Qt 1{=`P?0`1i2@&,򾃰K''`[5xbD@" }ڒX]]VœT*[74,Wd?>p+W:xkV-nIZw}t%\NfpB `41a; Wk/y/VUaH@" T1V[D?i~~qgEtz2GwCcǎ|L D@:WUUYUXfz'tcLБ=M2_wఇ H$8bʒYչV% f"V H$pm@bޘÂqg".[%2wwk? d]$=h* zJtDQdd$trWYl !y6eM" %܉vֶ* z'$$ Y19-e ҈D@" YpV*szٳoƌ@Ay룊 #Ww$H&&V\U[T=9&s!ԶEz*??DgHV1cWVeRo['OK@|XCJMM>|8]ǏD@8QH8㞎v"o{ s$)(((<}:4Ժ%]ӕ>h$/#HxPPGAUN@" ܄Z޽]Q|r~~> IWo+Pcc+v={߿LXiQpSqaڞq>2'ᴌ$˒7oxܹs}}}-"8I5Pjjwvv_>V#ZxowbIb$K(<<<((@BSpp> #ΦONEtm"`;vH]vݬ#6 b8q;vLC Y;i HݻwǦ֣G\}R>pwF'[^!F"ngpv3j! YHnj?pgMmԨQzN`ٳBGf,,QjV, N #l>nA87[qGc`؛6mF3VTTкݖ_pjj\ĄԒp#ɞu濐YJXsvvœ&V?~S7e4Y@ϋ)c:C&d@tWXp O}ʪk1h yɪU=-0,s~_X9Nu,(Ț8β&I!D(PzN^fϩ-'8+7g ujW|#\s ^YȬf(^%rqȁJI7縿6P|JڧX|~Dת|.U}~R\D宄+28w),PBck#Bjr@ffc>oslf|LUәRn+ԥ-,pLp"NCm2lPp|TEBZckX8 r%TP0Fº,Npz/RSSvjgUK&Y+ʋL 99oj8oe>>ƍ@|[JhB~r:dOrHr {cGn8K\8f@URaziƞ=UaAO1'®î`i#!tR'U$H#>" @!@yBHRF5spsH v!57pEр&oԼ٣n)]jOcZr }q{?]l{3Nn3=5؃Owt8MHҞpCFloCU8xBc?wɞU9vr^fe9^ z\A'$,NE;dAq;s;'"a[^NN?۵kϐ'?Lb&x5sN@v/:JǸ.U'=ܳ.3VepH#Y4R"=BnxrAb 5{plT5X6<^6%҃a7?'l6ؒ@xV@Ls۲qfҗU@ŞnMqgFayCO`8l&dG?жy6 R|aMe0E駊a U[TCr1fR ?JtaT|n^<${*prnpE*-X޷@GKgWB#u{q^yֶ_뤬wܾg-,}{_$mpܥB.Ue5_oauy xjsogs->Xh\X⡮fRPasHGN=ܻvqH OҙL1[mzZH-o"q&Inp{Opc2٣nWCqX](<wY!=*|ċL]j YGLXs/wKO-o/{|uJm䬮3ܥӽ}z_!96>L+nK)wVJ{usOgaׄsg5/ xؖO-܊oRwNU6(<]r>?۴aOsv{1;D-zIE0U%>9tqee'aMb Wy3$ﳺ xm欈M%c#&|tER! 5Up DNm/O=hc˃G%qˆ>|+ci j>I =~'Dj ,ooneڀ&vA},?๝%>=]i[A~NǷ_X>^L@Z1^qmbfe^J _*~LaH}7l۸d$[Ê Moxάaڑyis;9w~ oRƿ}n۴==lZn-ڠO! 9iq<ԩkC+ X24[e ?#2`GzA珿qѥl5 =ʤzNұϵȞ-Ϻtl1d 4$RV?t[<;9u`Cv6]{{2sGntX~E5d4oG, ukfʕ>c37%ۘ2eXi7n=.0_?w{|}˛E@ !0Hii2g>:MƕCl9l(cUsl׈N ?|{ ao{oRE<4[ebf9'6;q_엇/oF|kǧ7W] \O;v{h퇣͝BPDECx-`fĬMA%cutBW`聜g= wygn{Zs> =l;}m޾^Ra)7t#?' dK~K{o|"} r{}L,! !- g(f)JM#&*ܻ(v0k]oMcfOCO='$$ğM9ҸSrsc'OZ^>ӧ?'~O~Mp# Q% $)6IV)cm%wL<,׍ sβ(jf Ulpn =[`˗%틩oS,L>`Z2C*MMKWwX%psf㎏UfN9클~y?o.YOIUY  B?ÎgN}\zؖW</aoE>K{r<>7vn^eTd(+@⩸J;S1gdrsi~GTo3@9J ED uIDATeX~=|鞓0٣e6!5wM?JN~k$t DHC1cvU45rdps\cp4©*W$6@i [J8DX% ]\;۞SU9҆Inu0=i=qRR||#t# Yjt, U|X@R]/"G:|s$\ +C}jܣ  쬖 1;:y{?dɄ[xJ\h[g S n֬\]E^rssp[E] yܙs挔6FEMz衮]P@Sv֭~Cb#1m4Ն/& Mhob .;x΂F2^4?(D@ : vD@j# #~"&N~ k UyUr1ӕ}! HKc "$XK4bTcFFI8FxOy A@"[?d'erFbkIXd4$8-ttkَNH$鎺XNnu@ ~mՕl96A踶C~겥p&D"HЫW/|׵v $D@d wu>D" PH#D" ٜ*FH҄# H$*D@"H$D"H$D" H$D@"H$D@"H$D"H$D"H$D@"H$D" H$D"H$D"H$D" H$D" H$D@"H$D"L+WhD"YNH#PllT//gҗC@"H$*00PP5 3D"YZEEE MeggB@"H6D#oooBH$6J_D"FݻwG9;;KEw$D"͛@z H$R[ITWA@"H6ŋK H$t `'@,zӏJ@"H6oOt~ZD-ɃQ@1@-ߛ: u 'ATs>p0^ך-*ݢ_D"lE?wEjhNMS-Ï@jq(K8G6.L@"Hs}RGT! @?-ǣC vHH$Jco j p!i=D"HM~ dA ǝD@" H$Rb Cw @j'й$D" %4R9?yj {@w"D"H @:wt6?uwC" H$d>H\HS{]$֭]- | ?Agrgl2eXi7n=.G˂H$΁:񰻡a[ATϔ&Pw*VNHɓ߻wI\)*D"H 8TR*)'Pv<=sr/[.#{t>GQXaٲq ƕ?{$Dr mԬޣsH!Au!ť<ݾۻ @ g^J`oh|yوxo/]Jl_}*! H$I#Hǃ ?Jeh~'#37ӌ|PhnƧf9$GXH1bGfc1=\Hs&HtEAG1H@ƚSk#lCƫ6u_"7R١^rh$B tl61(ȉ9Hr@O7iT4 b1vŪkȭ_1IyN>ߛ=9:`m1=8ͿݽJW |֧ . Q߱KeVa x"k]j}lKb)A!gŔ@m&DKQ # M_},7;4+Amlق k XG0vR3=\iIVctڵ)FGB[ǟ{n=9zj048nE LH>Q)ױ(* g`HCقH)6nA1db' F ),M\ &񪡡m^z 8ػw/?f6ofç0xOj5&'&K}|N Wyf Ʀq$c< LQV@SY}|*S&rr?4)&mY')Q.9"IhϳBdTDU6ha4B)e&,g>l^_.L[{=5|qfff"CVaq}OU*R>0rlB !p'Sp9(!!JsY#' Õ<}Ŝ4P%{f2W  DQ4Q PojL Jhch6ٰt&X OljMf1rq'Xɾ"4A 뺸m(ˊqAړI /oQ#5TK69KPmBݯFZA( PĮ7**"#LJP[XJFϏh:We*ŚQ`MWI۷m4VgFY ؖ¶`- %JJn"uװ'GX +rG? "ynV&~)T*E\v{(Y8%4~^@2' @SmFkj8O "COKSrDQDQgjj rH[b(i]w c ccc!Vá>$0iYضeY8X44Q#DAo60aX\R,؀-LCbiki_zHaDhRė*}9Ei~lH8GT.bQĞ={amRQl6bZk@:.mؖc;(kWq, F(B1Nsf Klܓ<(nP ( AZ(0ք:B 5#5C>ܾ^` 4F p|$!IJcM6ۈp)Iu/ji7x^HElx5֌h2 s^Ar wN 3R),pryrT4rIޖ5|`#‹4ʶ1"ץQ̱ri1CslZr#) `k1 8z&%uhm43ذbş|Q<9CPi 5~cvUV#^%NO,TSn4& x`b.BI\v*T%%%Ai`KX$}sjh% :-IX6DF`:0M|H_0QxcC!W!TuBFclf'ǩNN0J0HUhmW*(>/-͎Yv3 \KFȤM(@ pI)BDayP0`4BHRR}(ٚI$'4`HCљ)asc'RC WWA(9I8gc""FubhMiX{rU f>@u|y+ҘDX!踻Pks¤\M[ȅzB$5\ag$DXH0:TzA-ZcL-]R#lr\Y 7(\|:lԘÁJe)c;Ԃ5hN37ԧPk G&Z62q9[D8k3,a8MΈPvI/a0ب9MEh'j2@YŁ5H5j;p"ne%O.XBuIK0ؤH?7m,rN ֙ШMS9zc`QR-+Dbnn]o9 n_` k5k&F ɻ}إܡc s.{ј4II T#@a0($R&K" JH{0`M)bsZݿFsz/0L/n2-Xvlnغ+W?zޱo]{9s ge#EJ'm)l?ޱ}{NX1zޑwO܌ω&?=Y.X|+N}šcСW'YʼTcH|Ej"rtי*)>"gVZ6FkAI`!՝E(d&ɊǎF/zX0ѓEZ^yšckD^ !%BDVŽ@Zf^6j e _v7 tY1{* 48GUw }Vw\amނެ#J'&&o LHd;H:o,:wŢE%0r.@j& #4؛%˴ z5Gc!$|e7-ڦ]I5S(D !֏soΠ1Wޓ#A1Ul֊69ք !ngV0fxJskV*pq3\Ȏ'G XC/+:B,#>$`Eʼnv51"RaDw1fQITȮ`]\\,"` 6ZU"{VO#hLuH7-/d 咚y)cbn֠Ģ2B>ѧøk>:HT|ES%:Kn\,dP`DzؘL9בn5=f!d櫊F $mpe9X2o:o@ B>@Ye7"Ki ZTf~J`%e>|FO|=Y$an~> 3I.fבVc*As&2&Kˎ B$TFc;gr7٧m1_R-( "Q>׵S͗2{1uiH&c)ʵL&urH9"L%b6r>Qil.'k& r;E4QhR#GєF2VBIʻ\fɑ[D֭@ PGg֋9mH -K6StӈNF^ӿKYOzJ]ՙ)32rmLHJ˕ٱ_#N6ΚJ)wڴWenfm4At3.c G1/x;~O23$RJYf {Y$Vk1yBѤ:Qk_ƒ1_+Yw*D"pkr47|z-ر%]#BH\"4خShQM%6ɹd7I'NQ( ['F;z5kbLϜtDY)b▤mF;k(Oo~|W/ ^~'fW/>6>֚qo}s6=φMue#91_qŕ|?e1~O}ET2 I~`=aG~G;M(lKLÚvS'*+.$`%ӝ&1iwN瘬(*Y3dјBfWV V%^M`::5$J4o.}U22>%η 3:IE`^O,&8S8\E ]LWHD D25ż=+:SYvd#J~ m7M t{Vd dm+vJev_fz)8riaN/}o|^xv?\bhL_awm7܍$PO~|yHk?XppK$m`m/7TjٮMO5 fd b簌.境]l_Jˋ4\Kv~AskUC2}% CJH5K|p%laa _[Ts,!!o~[K<켁'JA9J&iF-6i8Xs<#5=c2 C!o欮rަsp"1fu:8ļpr6&RxzmY=﹊ /|ec֚5VgPDݻy[2~rO|0 EU!m{=l|ٳO\S~m:X>}wJY]e:|k$+/н>9sbr1H˷vё`">CgTxWՋ)|vTWӤZsQ"-9g!nl#p\N0 ޱ󖷿( вq2yVG8<38fcpT߷B.I8Sش .a`F?.?r_wwicqy's)'󲗽xǘ> .UmHSBacU5F;s4.Lk朣3ZAH $eul R]ѷhE'J'e4ʖP.iMMM/&B9%R#œ#YӴ@ c%7M@D/'q\ӓ 8`>B. Ex]_i7RZ^~'w2 e{=*KH,,Im=Lu5qE;(iqOP&*)1#I|7nH*uҊ&1&fj=Ye.<ĢEnu|LHMH*K]".rBH@HqSbsâ5쫪A1Qגr5-&]%L}`mZfݖuMc:LdÀ1:J! %jݕt1Wkoħ&BDI/%k @ndCDEK2l j/~6:BchP_}}˻Q:P ĴZJ9yZ$CY2'SI煞YF{jMd1%uJW,1Bgc;]b qi0\Q<_0$bJ[FqX2)H{fg|9 -zO=著J,lu@t 0iC[暏<8B.GQ5Ղ`5ũ5Xm3]ۃLm-ώIcLƠm mhix%,WnS̟7 '=H ұ4LEbnL%ի7FG 6 غu뒯q_?EGĤܵk7x/bBB\N:`lDӴiUctb O &y$Z8ab:oگYNh:ݮMLu1M&2,!p*xÛ_mϢ!&~?*ʘ3X:SSxH&55w;vi F,P6QGmc2ǩufRwKx8y_>5l wDXX_o&GȮ ;& sg'Snv>m%~uֺMk Ns^Lg4ȴhjn+DG(X&f$ԩ܊u^<&b˻(bq q{EfͰyvi÷UkG0ls&ODQĪu#ut2->O 7`0ɧʔRʹk?VgqNUJI/R-FNr)?jK_8FsJ`y+('t&mo`,h7=!xagh^7 -wJ=L]SLn:{YuMPvn'4dRsw w PČ㡗\r)}12qt<窫wXWg^xx@"o|__1/]i˃&97 t-p,2VgΘQJ`'(YZV#Ϥ}+$j6cMw6q_@IǐY ڟ+z>6 -6Ye*SMy!հ"4gj:6EOS-Pinϟn,I,{j41Av )S8xRJXz5>BJN8VQ[6a..I۶sW??[rt|/\Gq ]&~LZY$>??+_6m:MXd 4Z}´sO49I׺tLZg&H9i{Ҷ|l{FӴ{şEr!b*Winܰ-& #p"jWUGE |Vmu6rd.k"r)FdϨc6h=s-R6N 3f|1!т=έ@Gsd3'lc^.r{H#B02ncsץ2]ԭn>-~[4nDe9mڏFff^kxq|o-*6Ak{n C+mtHXA=D[Hj?)=UN>$=mZܱt3S.Y;~c۴“K\f1ɻ. jl?gۖLML'sR9ӎ(JǶg^RضéB!_hE-0!3Umёi#뎘0Ub::rs;)ס ![d>}[ZD\QDCB&Y]-+,.|5j?O>>ffjwǩOկy5/z氏y޵^%liq}v6"\y';]w9锓Qa1DpS*mX#!A$jɗSjR?Xt)[RgJZĊ4 HE5Y*iK A; mP<r88Ǩ1H)mŽKp^K.KodI} 98 J+O&_XrsWi2HsA+} ~|wٻlr('mb{ ,\.ǪLLL0333bNyԿԂ/ym͍ y* q-v)&uټ55bkbw4B/^EgDymKfg>߿;rDEUeYT** k֬Ȟ,8Mo] {Ww!L\ڇyf 'xX,v-M$"/cFc+r4ϲqvzkww"lLk&U u%E.Sa) U LčX{r(p'Ajp4n`g?)[>LQ^opK^NǖPԛunvI A)>sx !M}OX1^L6]_q13;wl#gH)) 8q,HG(:2)$lc3mF5n)Zyk_Ek;cr9VK_֞v씅C=G?| o}ZF322iN$b~/| Qo4p^<"I E?|>zGIBH>ĴFc83b ۶p'>ŝwzAb!_`ݺɟ&V G{z9bε 䤓O?| ՙ*7 qZƗ(ꁵ'`jy6]ص{'ws;u ַ֨x$JE9{ضm+FO}Z%33(0P;L?0W]^~wX$p9a&ؾ};{AY6^rIof>cYVǻ0ިg)jTU=}VLYdAHõ>ء~mfgg N^GAgff۶1ưĂcsE(?wk^qJ_`|Ȅ?nömR zAڵ򼋟K-h4ַÃ>H>z3N4z|>}699X{r9n&jlFQŽ0K.=5˴GTo\r S6`+_ݻ;Ӧ|ǿgAK)ֆnMH>^A"75m>~{KRgWJeü}Whl=l8D~aYZk<_EN>VK6ͪͻ/ٿǸ馛󌌬߸ړC)c3Z]l>x5wߑi6կ/>!lFs4 TUnF.R"u17Bp9Ug4jMB.X*{"`bb=\u՟?j[$?Re}JFIvž}Xԧ˱ZGT\t`L֦7qqB˱x)l8X{rhpy֔n!gӦ"XVl:q)~0d %o[*)s_y^>: 9zj*8LjƲ,֯o(M~@gp]sb$quwTdnMOz:6a7aB Fyy;+WK*nl6ׄxH9w9H5h3t'@I՛ߑR)ܜm;.Y{r(9y׋1(c%|MM)coo4u X$?$"T-هpq큵'mZhl *Zr%SSS|g5Ƕ'[kO^iYT{Gq-*c>uӟR\np==苬 'Q86o8UX,X*rc r{`ﭟFDtaL-Zk6n<OK 5^'GX3rh6hY@8.iYJe۽ßUf5Tų_Y{rJ\l4rp ]"_%87)qdd|@yY{F}S 9i\tE|k7P,qo|@m||>OVcݺu\p8s` ^ps/{T*[neцpZ:,jfx_ށy8Rn𩧝[*z`r1i aqmbh:W&N]}?B ¢׮^i[vA|b_+ٿfll ۶m{`Ws).F(7}&FVass4 45]R>Q2j[N"BY+Wa[vOdbKғ\c_&N@bdddn! B>կvu]F[)Ue9c0CK .z'OWپc;+ؾ1jRʤ+cĖ-[XbQ<씤wIENDB`./Listaller-0.5.8/docs/html/images/icon.svg0000664000175000017500000000512412152724462020645 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/images/li-pk-parallel.png0000644000175000017500000007037412152724462022517 0ustar matthiasmatthiasPNG  IHDRQPbKGD IDATxy|T$a $$5PAb򭨠{Q@E["V@kQ+BU}ZmU|Ee H>?Nvf&ed>2ss?LsϜ{ l:(u"""UT!%*6BFDP,1!;; ׹sg6nQ,""qB Ԙ.d񅌈AD3%"""""A(a B HJEDDDDP,""""fI>tJMMe,_BB^d(aef[la9TŒ~!{qYgLFFF"777щ0KKKK;(M 뮻hժM4/~(]???kMҦMNzT/y*?}oNaÆdggV(> G}o;vb Ҹ+KDDD\6`VPxϞ=6qD;Slĉ6h ۼyѣn(];s=׶on۶mW(rU-[ګjoƮڠehlEbfv!kذ9r&L`lÇ =ښ4ib[?~]G֠Aԩ=3eB~kԨQ4.""" lÆ ff֩S'[re۶m֭[>o׮YUU:mA E=a2ffo 0<%"""iI̊lڵv믿nffIIIG%>tD;rHÇW;1j-?222K.o-;@Gk\~2999ֹsg[jUJEDD$Ҳ ͛7[6m,//:t`[l TNV^}TyIII;wNU(QTTdͳ6m*֏քG}d;vG-S,"""M ٥^jO=M<نjk׮Ç۲el~v[nnm߾݆zTy}xo[lK/:U/wߵ-[.KOOP ZYHK}3gm/^wflBL[޽ЦLb:u  '`s)]vUWYrrjeK.^zYRRuɞx Tٳg۱kIII֣G{JM4RRRLШTSZyXHׅ#6dggaÆ !;wfƍ}6z]u0%"""""A(aQ,"QK2"" 0YDDDD$%"""""A(a B HJEDDDDH:XnK.%''ŋk.$&&NJJ ۗ^zѫW/=X> A Hټy3wa…۷m .,}L~889csхGـegg[4ӀSx-08h4->d-8 x X/c{֯__M.mڴɞ|I:tT~5%''ۙgi>Y<~]DDD$ee١ClܹvZbbbj?0,^駟nfͲv)a u CـlVXa fxb馛ECD 9x4qtgv죺9 ppmDġl%3gڞ={"mݺ~a;*'K_K G*p kx!#"""q0r5zv̙3m֭u[y0`%%%O~ůCU&6/d%Z.dDDD$%#)ז4!!g<[iӦ"[f͝;.;餓*'`kʚG,DX 7//dDD$ |^ RCs [lI^hӦ ͛7y$''~vݻٲe 999U.{7]︄RE@w9(+Z%?$O~LϞ=ի:t@+-''͛DzeʯR{}ZH 7p2*~W| .ɫbBFDD$dJ>J-pV4q n{k\v 3: {}qKl x^JEDf 0_>nI<hX߇7L DM2DjN\veرjUx_Ҷm[y ruHHH --^z1a„?O5,p ??nI|0xX+sS^/\Wt""""aXFFUPx6j(⋫UFUFZ}֭[ۋ/X庡o>[tr-ֶm[۰aCvX{ϋOr 4m>%ڷZ'ffvMٺuϷkԨ <ضo^nAAzֲeKKOO~ok{챐=p]uU֤Ikݺ=C;rM0233-99نnyyyG߷6m|zJ{6jԨUW(q?ֹsgkذ>5ku4h`={e˖nsA/~a͚5f͚u]gPO>i:u*>''' ahco\ X]o۶^U]vܵkWCB\⧔5({< pWq7Kw&tda"""j0L͚5K.Ķmfff~ߚ6mZ+611>.]]wuԲP=rHÇWHZJos=g-Z `ȟoƲB>Pe;WP  3vcL".)Kw? kr<;u$vٜ9slϞ=VTTd{~U5̛7oc9?VܶmaСmٲcz뭷y[o<`_:{]y!WqWg^۶mm͚5WZem۶vT3a. n5ko G'йVzHWu0h|M;t萭[Ά^aᄏ6~{6eʔ˽좋.;v؎;jl˖-Ç= ZFF͚5 $:G﷥Kرc%Nܡλ[sϵ۷mvmU`j0Gq[w[z7xútbֱcG{+_PP`cǎ-ZXG[֭[{6qĐݿ5ʒUV6y m mʔ)=?p 6gΜ_X۶mKk/4i=k>b'|?BWueށl̘1j6f;p@ $dW^ 7@soB[j&.ؙΝ;N\C~zCK-[d׮]-qWY ` ЪܲB`1>_\ ""1Eڋ#z+wf۶m7ᢋ.:$/>g}pqõ <\WZD$&(aG֭]v%=='zė"`) /8_jn ދ`EDB&m V5ɨẳ)e=l@D$(axYB sZj/Φ`-p\ȇ&"Rdvp[ÀW)?5hI""(a5Ǹ r\;|tI  SDf&KpM0x p~ :z%"" O-@W`0hQ"RO)aX- 7Kgz\\D֔0H* ]2-r .^ Ew"R """^`:q<`-0(>aJEDY뚮#oθv3'F:3` o@rF3` gœ;^r0G$|協}^>N0&z\ -d O7D0L[I3a܏HF ,a0/EDD~' cDw w З$cL%nأ7F$"".,Y~XD +5O}EDDDB0dyDZT%R 3!57S־x2 hw*n&{K("07>GHGcDcJ=p] gk$fN jro+ 'P7MCDDT`3Kubf) 3 j2$ 7pej5Zĵp_ pMb 3D,z dKDD$.-n*aNAM; ^/ӈDDD"j~ױƫ4ďvzD\\q,5e Г5w%6?APDD^J>}q,u pDGpe=HDD$Ln}m=6!ax j"31e@s/K퀽/ <%a֠&|/q@6Uòr)%33zM6q'gpb] XvS$~$h0 w_DHkgDHTj֬=Ϳ#F H\ %uq5qÌkP''O]HfyH?~|f%"s{K}VGO4oCX.܍_C J$U'iV, ˋO287A\?z']4.2y Ȇ^%BM0`P,8x3Р&6=ADPf%"QO?5i OG{p } J$U4+a AY݌ԤH<Kˇ@Gz/ff%"u-i7DZģ|`'noT.y|>m۶e٥ƏOrr2JTyo ЩS'7oܹsi׮6m`ƍo>`y8p SNeԩ ɡw$%%Mۃ>HVJcɲAnn.lْorP^`1yK^u2337/?u@XX;Р&r͵@ﲜkٲzw}ז,Ybiii+Y^P^?KZǎ.sZ׮]mv,ff/L̴?N:$>}:tx=/yܤI1cڵ+W_}=3ѣWܗ smC=/u>{K.c˜1c HՓ 4оD10Eɝ[`)~OF.KffZj_|AVVVɓ'?]v-磰*o|9rfFQQ*z 4"|>SLO?eڵs1? _-*rr),Zt{ҤI)c3g3g$''QF1c Ο?'|3㦛nbȐ! tn*>_ āhҤ G*Z/)M4]RqPT~: ~+cV1lܸ-Y-ZdPV#\c*/OKK7o^^=l…5?_|,ffK,KIIKى'hӧO geeْ%K[r7n8-++˲ `|4l6lPa^}T,mPbܹG0Z?Jj#ݭ܃S 7 E'fy"DK^(~xaԩ191fϯ~ k-R'͜9kkbfѲeKFq[y[3;,;g֬Y\{;Қ￟g߿3{l%mw333s636l9眃A 䦛n{:t(zcmR>?0W\qO?t;pϪ@& }xdp Gn׋F?Zݻi߾} |Y_ُ5=HƍswVb[_1h |K7xHm[9olVFD9nj3JK̬nm턄;8?*l`1 |t2 R, *-oi^1fzhD9s'U^sfFQQ:&M:x8זwԂf+IsAA|I ЩS'7oܹsΛ={6iii\y啥>j 4!.YV~_L233y7*Ǔ~e;2uTNʠAɡw$%%tl;/QAA撛K˖-)((e8U9;eJF=Jjuy|,77$> 2ZhQRӼh[ƪ|6qD+ 03ݻlK.;שS'l6if̘avѣ-\4 4/;;>{Jޖ,Yb7z6lh6l(}޹sg{Ca./--rrrl޼y@ؖ,Yb)))bK.53O<ѦOnʲ%K|KeYYYVPP0pSL`9<H6裄9(a3% zry[qƥ۾ka[=c7W;awl)Sؔ)SlРAff'\Z[bִ̙iyb)^JJ=ڮ暠UuL9dq#ކ#]0%q|lI޻R#JGwFa}%CD\׮]裏h׮πN,"86)aP,"Aຢ<\i4"UP,"aYD7p>6•0Aś3J.ny/"QBI!ـG˼ GĿp%EUs_H=YD ܅I 6%ܯ׀a/^ ӾE/"K, 3gpyDhbO""ȑ#Yre5oޜ#GOjK/aÆ^!1dժU^P7,kN8pDE[ҜL: |K*iD"2vYذaW^y%}I$8\ Er607c2jpsp=izH$̥g/x9{ Rqy0[]^W_?wi];C@_c5vgYoC+C#MRT0'''۾}*̣*--~_λ۬I&6~6lذ )zs̱6mXJJqֹsg[l}ֹs啟9yGWy'|Қ5kw-逸tKOOzZG 3c݄k)")Ӏ=E$"xRyҤIa|O?իW[ӦMG}tԼʏS^Jb,!!:`۷zȮU'P̡={Z .MOOEUy間c999^Xw G$ uA{72H Pe|g$qƶd[hQ7XlYӦMm駟֪ǙpB+,,43_~233 VZ/<3۱cGz mŊcYZZZm%̕cOZZ߄9X 'zH,*i/WkzH&WU0]g׍7h6nܸ:IǏoM4nN^{:vX޹s|>kӦ|>۹sgƌc5KPAI ͛7[n%dd*OZZZQM2B%e 08)PDbx c=FMj\U0KnG"kRg}ԼI",\5%#D9S7u=46؁:{H gp??E$p 8 xpDb&"p$3aTˬer=Ӥ]VݲͯM92pm/ G$׼ Imvq欬,ɩ}&074H-< mD}Kʵ̪]mFϞ=\|֗j{7I#H/R=7KN4tU$u+ߖYmTafU6#(YVy74mڔ;3>nFZh>jmXfΜIi޼93g zdeeKc98馛xꩧHKK2 /䱿cW޽裏ݻw$$ _:;q7i4"uD#ŗdhsnK*WQjXoTavgga.G(^8бUvƌ6b+lƌ FM2*h|;zH,:߹HLH% sQ=6ިt58< فOO>i5H?e j$"1ʄ?#K 6j^yQtWm+?7jff\s5Fecƌ)݇QMfM4)h51b1"h|Cym˭hPo>CM"#4ҟT.a6\5tp4HdRּcz(7s7u%N2(0X5\[3 G*)z^CXW㸦?fj.~O?lP_yHYL6/YD9u 9uU!p㥭*ܱL("hK;ԉ҄4EԶ*%.. &`3@\10X E`pH}f6[.:'À(unUp7t׿Hul~kG\/ZI%Ip:OpBҼC7|%5U 芫u6ujۗn^z/R3_O(RcK:Jm6o$5ETKZR2FY ʌf|4HM41`DZHH>_Y$:te]Oƍ֜߶@ĪH k׎ ߅}uU@URop?TGSy{zWm_Ec5IZf8aU&[n .\h?OlӦM~C_vƍ￷3˳W^ۡCO> . qի-^ lƍvV-lذasN۱c?o9񥦦*aD\;Tl9n4X"k~\q,&̇0`=toi:t۷W;a,Ye˖ gZrrrmmVСCT}vwۂ ᄈjߥK[lYq;`۴iSF{UaǗYvy9ֺwPXDbͭ6DZH ؤ 11Ѳo.?N^xF eeiӦ<+﫯ѣG[Ϟ=I&i/r'%%Ç1[hG)}~ ԆY4W =\Р&"ՑҀ6EU&cǎ|j'o^xۻwU+a.+X˖-C.s!0]O֭mƍׯ_omڴ fI#yh)( wӠ&" }~.81NK|ֳgOۿ cU222߶|۰a]uUJ dϷ~gfͲ;\iӬO>d;|mڴɮٺuk7o^91^6|p۵kܹ.RnY$RqC箤,q T_!=*j"KOq'=EbHIxG He;(K-ҳo7F MwPEMD9)aL#*(KjO0^c<܇=Eb(Y$*DssWAMDeM8JfF"%S{W7\`U3. ͏8rJfTһ*mx7 …$ x x/AĀ'(q,|7HuEFl%""""қUT,"R[˗/gԩK8O~ݛy7x#+W?W_K. {"83㏹yIu\/.*KYD̚53n8yw8S4hqX!5s{7k֌7|?Y"nj3hРO?4}!IQ,"ڵO۶mM63ΠgϞ >_uzڵk9Yh^x!}0ңGn)?5 ={0}tMƮ]> 2VeSL/ҢEY7ocǎdddsZOڻw/w۶mk:UIF\P HsqFNJ֭Yd C,Xes=s=@~HHCjՊ]vqZHƣ> վ}S iƇ~X2'M߿?EEEw}dggswcǎ,CjW\qc^#QB 6l/K/_νKjj*8p _|1_~ee|> '|BNNÆ #//)Sо}{*֬YC߾}%"UyILLGeڵ^#Q@ ә8q"֭nqƼٓ_lݺZBG IDATsgqpa׿r'2|.]C7N>dj 뮻Gn"~-9s&0an6]޲e˘2e EEEhт;w]?"ձ}vuF^^ ,g?!E'""i׮ӦMcݺus=tؑiӦUN:9sb FM uHZnqJ/8%>ը/䤓N WLZl'xaի9cCXre^O>n񩧞LFjGI/CsϭQ"tޝoFUo5fe˖YvmZlYE>}֭)MnǕW^ɪU9rdCDbի|Lcƌ_,pLVU-j\G>sϿ5*M4I&1WW\s=z8snfG}֫nߚL-GBBiiiՋ &I(LB;v,۷o>ٳ7n[n:񣰰^!2Oj[h*3Lo]oΝ;KvidffV;.]пC=Dnݘ:u*vY4:u*IIIL:2Cب m۸馛ܹ3 6E 2<֪jU22p@/_p%B=_xUUFm9rT>S.… ֬YgYz5yyy̘19s攮vZ:,.B[[.B<<* Ig!C A!(HE,(H`Fa , A%EFȈ "J*5 (&š}tIeyUuw:]Ucǎ9,/$$|ø{U,xlp֚64 X|9н{wn֢N y(6lW\\}m߾]  uԢE IMMSȮ]t%"2l0Yv}8??__[j 6LDD˥}xbС;,r6(>}Zbcce̙#%%%rYyeРA.۩9=zTZj%K. .ȅ dҥҪU+9z2Ο?/s̑ݻ\4Lse׮]@z0ҥK/K6mbeڵRQQP@n&=zKeƌ#/b/=zH^dӦMsǫ 9y'd޼yz6.ϒʊ%00P^oחiz披/Kdd}[[$̭[mӧOWolHyytQo.">߱cG)//{R֙/>K=G6ɗ޽{eUN/\`/㋄YD}?ҳzoU>x衇X1Fo\݄YumLө$""/^ H|BBdffV)[Y4xq"2h yꩧĉRVV&yyyfׯWmډ'0{ϐYDg{Nu}l 뮻믿PIrrGqGyDT_ݺuf͚cfOED9CݝDFF&Jhm[$_6ϟٳgo~z]_g+9..NRRR&N(&L$ի۷޽{/^'f犿jR1a[322䡇_wmʼ,-WRR".r4gY`W_ kʔ)Ҿ}{{lڵ%KjY~gvߪ|±~ڵI.]dœ]fOשv3ɓN>;ӛ0Kjj >!@tf9ń{%VUz)۶m2]Lwݻj]HΝX:u$w(.[ܱcG_m^$"Ǐb")**"'N/r5uLU^'?OʯH3/W\zyʖ0|nm{~ AAAu¬UVKddZJ"##ae+gg?(}9\+ccceΜ9^'#wru-1cȸq㼺Ŗ0۫uZݤI_"x0YZwיi>;%̓&MR=OII{ʉ?/wqf 2qD9yd$"_믿Bԯleń;f#+ [oGyewXbz ݻ7,Y`tOuUgggcʕعs'.\L09U]IIIxSO}s`Z~k_M4q^… [ܹsqw`۷ô-["77ڵS79LE˖-,CDp ?wFllr/???ߡLyy9 mչ/00 ,2>,, ~~~8{,6mڄo/_F@@0}t`ݺu}$((9W>Za 9t<䓒Pݕ̛_=把 4hPGUY^^ȩSDD$''Gkr\QQ!7n>}mѢ,XJV݄]o:X< +V%"'0?mVfΜ)'NRtl޼ı:#<"K.2^?Sv!R\\,_vmpB]ݮJ9(ɓɓUQYDK%00Pz%֭s(w^%44TBCCeРAUww׫Sݱ6l2iӦҭ[76mÉ'|9effʐ!C쟱l &>W HHk]zs,rw~"Y.QE,Ru=={S<ѣ2vX {Çw6f',ή\p㧷kLD&ޫՄ0oo͛73fH~~|M%~|ᇪnܸQz%"MN`D3'xBڶm+fY"""dȐ!lm룏>ߩ_UQQ!/8 %KnV<ݧD_???5jTR*nLT^^.cǎ߈f6G\/fp}2ɱ:O8OD%ze_%TF؛r5}w7aMm'"OD'k֬_~EɓOw]/_LDŽY={Hv_˗/kW݄F-azLw_NcƌIII_~Mw syy}7iDML$?=QGyDf}#fw'"}<.rO<{Ry/~bCou놣GVطo:wlt(TC͛#**P ???bΝHIIAdd!(cҤI:u˛K4no̙5k&MW_}룆ȑ#ԩa4(ZN\ f"F(//r oG:ѳgObڵ>|xID5%|JQ#4uTcС,7ߌ z)9sV%".0527nİaЬY38pѵV`Сشi͛7Tz=DD`]t O?4`Μ9,ʗѺuk|Ǽ&DDqIqĹj gy0$""xIQ#}v}0D׮] gX|9z;v 00xH?^ADD jœO> ,ŋѱcGdeea֬YFCD{ٳg#55r dtH;v஻?G~thl=L=z@YYoߎxCr /`Μ9h߾=ك뮻萈ȍƖ0 "ǏGII &NXe@I{$''Qa&"j^yOBTT8Pg{o?ݻXf FatHD03a&"jN:.]ҥKشiltH.]I&!<<{ETT! -a%DD ĉq%1'ˀСCQPPdz# 05@ѢE  XZ%i|@  Jnp,DDDDT(9b/ !v h3pBDDDDuh5PJc!""":`'Dhp,uE{\1X@M>op,uPy1BDDDDIf0K] XP @/cZJQ- J"Ocڿv38"j@DAс5f~F@DDD.u9 a&.%// ;={6222?15Va&""0b52&Ɗ 3Q>I30a]wf"1a&""4 3Q=8L &D`LDDT0i&}L&D 3Q=Ĥmٲ_5999͍.j#>Ƃ 3Qt=.?CyyM<@_YFcR-,,QFx=z5J k&Mض&nD a&Fd29H5L7ߌ h]l{o^u 0w܉޽{;IJd{-òe<6aF5{=;/5X{ ,/""_Ktt\xQdǎ9zhc ]vr!ӧuz=DDD-… e… ""YYYrm|zL&eZVVf;wDDDT-//wXZj]/jjjZx9tfjԹVU̙3Uu /W"%.&DDD-Liڴ4mTDD$..Nj:LpXX޽[6mTeٙn*i K.uV{%00Prrr4,TWIDAT:$̮WYm^WEO,۷?Jz,^X^{5z֩o3t۲W_}U-Zq% &iiir}Ȯ][nI >}˴iӪ\kXdUꬼ$y_}tQL&rԩt>SҤI2efy]ʱj%""B"""엍]m+<:uno~ٹsggddhCDdȑ|QIDDSK^^,ѱ՘@"!jPf""""" L40a&""""@QQ OV.,!DD0a&"l20Y~aٲe^OD f""VB@QKu,sV^eQńkVd2aڴihҤ ^xիc嗈Axx8֮]발#Fh&o\ι^Wu8۽{7zlWtyZjU;bb`Æ .P[jŢVNo}lQ}KDDBCC> HffHLL|'uYl"YYYj dC^Wu8[%==]5*>qjŧo^>*gݻW8Ihh&q yKW/j2U^^0J6OVǙfޙL&eM|0;gfY\ms8zSkjju{W^CI||&&D5d=z4lb Þ={yfr~~hlݺaN:a˖-(//GEECy~ЬW:w˗m\Wyzs=EGG/_uX _|EBDDDTWa.,,QFهO.2m4fUVIfdرq_}tQL&=""SN`z]l׮]ҭ[7{yZ_^"""$""~9uRU99R ]a&9uf"bt,D5&$$l|H4 """"" L40a&""""Hf""""" f "  5: SVVftD +GD ]>O>VLD ]:_w- ,`~;u=cF y(6X eX Jb@N1e ^HDDDPBuO[gl# 53dhPe;ժנ$B[gؓP] vʣn288 %imp,DDDD5.a( cN(w+Xj\(rz<( F @/c `'y?o$;/ _7Cybnp,DDDD>5Js@PG(ү󻉈z78L>=} s&AIn68j8ZvGc!"""Ǡ$5" aP"]]mCDDD0mUƷpJR3V#Bپ2V(Ԁpx=J(F#F!(ټ:N0&4"""kµK/# !$"UL'"""xT^Æc05 ۶mC߾hn Т;f""""" L40a&""""Hf""""" L40a&""""Hf""""" L ɤ1a&z&k;`Bj]=LFK5CD "-&Dd߯ɗZY_DDDufFExW|]vE`` bccl22&ɡ'CYf</H֭Ons6l0v;̰Oj%"JBsϩNs%<СC-""RZZ*?/j=z>|uzÇ].{ɒ%Ҷm[oI(5v9}a&_'~ :T"""CqFel߾]+EL&<ߛf{ywy 3%NVӾ<V;#""WѣGۧV[nYY}!1u=yW[vNnW[mW0I50TTTȦMM6ڵk'?^***… .^ū 35x뭷0a„*1ӟO?.\)SL_ h"<3i8}ZLq{dNN?֭[522'Np/֭r7qV֦M+'r%11Dii)Deeei͛7Ç!88 t3qDL0ǏGYYߏQF-DDDFv͢EdܸqZh!X?.#Gt޼ysԖݥKIOO͓˱cǤT'#GԌyС'yyy2dygu5?tItǩ.+{gqۮV0IaV{9o7WN:l.]͛Ν+M6u(aСKtt,^XWsyyILLH׮] 9{.Y\QQ! KXyoG}0Z/jJBBBdܸqRTT;֒INN-ZHxx_R̙3ҹsg={8eqEEEcI&MUVpB& scf?0IL`L a&""""Hf""""" L40a&""""Hf""""" L40a&""""Hf""""" L4>;vL&aQ bLԀu]F@DD0a&""1Z&j?2eM!IENDB`./Listaller-0.5.8/docs/html/images/listaller-work.svg0000664000175000017500000022132212152724462022670 0ustar matthiasmatthias PackageKit abstraction Package management system (APT/URPMI/zypper) Listaller (Installer) User Internet (HTTP/FTP server) Listaller (Manager) Application ressource (e.g. /usr/share/applications) IPK package Command to uninstall an application Submits IPK file Dependency download Reads the used package format (DEB/RPM/TGZ) Nice installer GUI Files, configuration etc... 2 ./Listaller-0.5.8/docs/html/Common_Content/0000775000175000017500000000000012152724462020647 5ustar matthiasmatthias./Listaller-0.5.8/docs/html/Common_Content/css/0000775000175000017500000000000012152724462021437 5ustar matthiasmatthias./Listaller-0.5.8/docs/html/Common_Content/css/default.css0000644000175000017500000000012212152724462023566 0ustar matthiasmatthias@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); ./Listaller-0.5.8/docs/html/Common_Content/css/print.css0000644000175000017500000000030012152724462023274 0ustar matthiasmatthias@import url("common.css"); @import url("overrides.css"); @import url("lang.css"); #tocframe { display: none; } body.toc_embeded { margin-left: 30px; } .producttitle { color: #336699; } ./Listaller-0.5.8/docs/html/Common_Content/css/lang.css0000644000175000017500000000002412152724462023064 0ustar matthiasmatthias/* place holder */ ./Listaller-0.5.8/docs/html/Common_Content/css/common.css0000644000175000017500000005042612152724462023446 0ustar matthiasmatthias* { widows: 2 !important; orphans: 2 !important; } body, h1, h2, h3, h4, h5, h6, pre, li, div { line-height: 1.29em; } body { background-color: white; margin:0 auto; font-family: "liberation sans", "Myriad ", "Bitstream Vera Sans", "Lucida Grande", "Luxi Sans", "Trebuchet MS", helvetica, verdana, arial, sans-serif; font-size:12px; max-width:55em; color:black; } body.toc_embeded { /*for web hosting system only*/ margin-left: 300px; } object.toc, iframe.toc { /*for web hosting system only*/ border-style:none; position:fixed; width:290px; height:99.99%; top:0; left:0; z-index: 100; border-style:none; border-right:1px solid #999; } /* Hide web menu */ body.notoc { margin-left: 3em; } iframe.notoc { border-style:none; border: none; padding: 0em; position:fixed; width: 21px; height: 29px; top: 0px; left:0; overflow: hidden; margin: 0em; margin-left: -3px; } /* End hide web menu */ /* desktop styles */ body.desktop { margin-left: 26em; } body.desktop .book > .toc { display:block; width:24em; height:99%; position:fixed; overflow:auto; top:0px; left:0px; padding-left:1em; background-color:#EEEEEE; } .toc { line-height:1.35em; } .toc .glossary, .toc .chapter, .toc .appendix { margin-top:1em; } .toc .part { margin-top:1em; display:block; } span.glossary, span.appendix { display:block; margin-top:0.5em; } div { padding-top:0px; } div.section { padding-top:1em; } p, div.para, div.formalpara { padding-top:0px; margin-top:0.3em; padding-bottom:0px; margin-bottom:1em; } /*Links*/ a { outline: none; } a:link { text-decoration:none; border-bottom: 1px dotted ; color:#3366cc; } a:visited { text-decoration:none; border-bottom: 1px dotted ; color:#003366; } div.longdesc-link { float:right; color:#999; } .toc a, .qandaset a { font-weight:normal; border:none; } .toc a:hover, .qandaset a:hover { border-bottom: 1px dotted; } /*headings*/ h1, h2, h3, h4, h5, h6 { color: #336699; margin-top: 0em; margin-bottom: 0em; background-color: transparent; page-break-inside: avoid; page-break-after: avoid; } h1 { font-size:2.0em; } .titlepage h1.title { font-size: 3.0em; padding-top: 1em; text-align:left; } .book > .titlepage h1.title { text-align:center; } .article > .titlepage h1.title { text-align:center; } .set .titlepage > div > div > h1.title { text-align:center; } .producttitle { margin-top: 0em; margin-bottom: 0em; font-size: 3.0em; font-weight: bold; background: #003d6e url(../images/h1-bg.png) top left repeat-x; color: white; text-align: center; padding: 0.7em; } .titlepage .corpauthor { margin-top: 1em; text-align: center; } .section h1.title { font-size: 1.6em; padding: 0em; color: #336699; text-align: left; background: white; } h2 { font-size:1.6em; } h2.subtitle, h3.subtitle { margin-top: 1em; margin-bottom: 1em; font-size: 1.4em; text-align: center; } .preface > div > div > div > h2.title { margin-top: 1em; font-size: 2.0em; } .appendix h2 { margin-top: 1em; font-size: 2.0em; } h3 { font-size:1.3em; padding-top:0em; padding-bottom:0em; } h4 { font-size:1.1em; padding-top:0em; padding-bottom:0em; } h5 { font-size:1em; } h6 { font-size:1em; } h5.formalpara { font-size:1em; margin-top:2em; margin-bottom:.8em; } .abstract h6 { margin-top:1em; margin-bottom:.5em; font-size:2em; } /*element rules*/ hr { border-collapse: collapse; border-style:none; border-top: 1px dotted #ccc; width:100%; margin-top: 3em; } /* web site rules */ ul.languages, .languages li { display:inline; padding:0em; } .languages li a { padding:0em .5em; text-decoration: none; } .languages li p, .languages li div.para { display:inline; } .languages li a:link, .languages li a:visited { color:#444; } .languages li a:hover, .languages li a:focus, .languages li a:active { color:black; } ul.languages { display:block; background-color:#eee; padding:.5em; } /*supporting stylesheets*/ /*unique to the webpage only*/ .books { position:relative; } .versions li { width:100%; clear:both; display:block; } a.version { font-size:2em; text-decoration:none; width:100%; display:block; padding:1em 0em .2em 0em; clear:both; } a.version:before { content:"Version"; font-size:smaller; } a.version:visited, a.version:link { color:#666; } a.version:focus, a.version:hover { color:black; } .books { display:block; position:relative; clear:both; width:100%; } .books li { display:block; width:200px; float:left; position:relative; clear: none ; } .books .html { width:170px; display:block; } .books .pdf { position:absolute; left:170px; top:0px; font-size:smaller; } .books .pdf:link, .books .pdf:visited { color:#555; } .books .pdf:hover, .books .pdf:focus { color:#000; } .books li a { text-decoration:none; } .books li a:hover { color:black; } /*products*/ .products li { display: block; width:300px; float:left; } .products li a { width:300px; padding:.5em 0em; } .products ul { clear:both; } /*revision history*/ .revhistory { display:block; } .revhistory table { background-color:transparent; border-color:#fff; padding:0em; margin: 0; border-collapse:collapse; border-style:none; } .revhistory td { text-align :left; padding:0em; border: none; border-top: 1px solid #fff; font-weight: bold; } .revhistory .simplelist td { font-weight: normal; } .revhistory .simplelist { margin-bottom: 1.5em; margin-left: 1em; } .revhistory table th { display: none; } /*credits*/ .authorgroup div { clear:both; text-align: center; } h3.author { margin: 0em; padding: 0em; padding-top: 1em; } .authorgroup h4 { padding: 0em; margin: 0em; padding-top: 1em; margin-top: 1em; } .author, .editor, .translator, .othercredit, .contrib { display: block; } .revhistory .author { display: inline; } .othercredit h3 { padding-top: 1em; } .othercredit { margin:0em; padding:0em; } .releaseinfo { clear: both; } .copyright { margin-top: 1em; } /* qanda sets */ .answer { margin-bottom:1em; border-bottom:1px dotted #ccc; } .qandaset .toc { border-bottom:1px dotted #ccc; } .question { font-weight:bold; } .answer .data, .question .data { padding-left: 2.6em; } .answer label, .question label { float:left; font-weight:bold; } /* inline syntax highlighting */ .perl_Alert { color: #0000ff; } .perl_BaseN { color: #007f00; } .perl_BString { color: #5C3566; } .perl_Char { color: #ff00ff; } .perl_Comment { color: #FF00FF; } .perl_DataType { color: #0000ff; } .perl_DecVal { color: #00007f; } .perl_Error { color: #ff0000; } .perl_Float { color: #00007f; } .perl_Function { color: #007f00; } .perl_IString { color: #5C3566; } .perl_Keyword { color: #002F5D; } .perl_Operator { color: #ffa500; } .perl_Others { color: #b03060; } .perl_RegionMarker { color: #96b9ff; } .perl_Reserved { color: #9b30ff; } .perl_String { color: #5C3566; } .perl_Variable { color: #0000ff; } .perl_Warning { color: #0000ff; } /*Lists*/ ul { padding-left:1.6em; list-style-image:url(../images/dot.png); list-style-type: circle; } ul ul { list-style-image:url(../images/dot2.png); list-style-type: circle; } ol { list-style-image:none; list-style-type: decimal; } ol ol { list-style-type: lower-alpha; } ol.arabic { list-style-type: decimal; } ol.loweralpha { list-style-type: lower-alpha; } ol.lowerroman { list-style-type: lower-roman; } ol.upperalpha { list-style-type: upper-alpha; } ol.upperroman { list-style-type: upper-roman; } dt { font-weight:bold; margin-bottom:0em; padding-bottom:0em; } dd { margin:0em; margin-left:2em; padding-top:0em; padding-bottom: 1em; } li { padding-top:0px; margin-top:0em; padding-bottom:0px; margin-bottom:0.4em; } li p, li div.para { padding-top:0px; margin-top:0em; padding-bottom:0px; margin-bottom:0.3em; } /*images*/ img { display:block; margin: 2em 0; } .inlinemediaobject, .inlinemediaobject img { display:inline; margin:0em; } .figure img { display:block; margin:0; page-break-inside: avoid; } .figure .title { margin:0em; margin-bottom:2em; padding:0px; } /*document modes*/ .confidential { background-color:#900; color:White; padding:.5em .5em; text-transform:uppercase; text-align:center; } .longdesc-link { display:none; } .longdesc { display:none; } .prompt { padding:0em .3em; } /*user interface styles*/ .screen .replaceable { } .guibutton, .guilabel { font-family: "liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight: bold; white-space: nowrap; } .example { background-color: #ffffff; border-left: 3px solid #aaaaaa; padding-top: 1em; padding-bottom: 0.1em; } .example h6 { padding-left: 10px; } .example-contents { padding-left: 10px; background-color: #ffffff; } .example-contents .para { /* padding: 10px;*/ } /*terminal/console text*/ .computeroutput, .option { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } .replaceable { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-style: italic; } .command, .filename, .keycap, .classname, .literal { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; font-weight:bold; } /* no bold in toc */ .toc * { font-weight: inherit; } pre { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; display:block; background-color: #f5f5f5; color: #000000; border: 1px solid #aaaaaa; margin-bottom: 0.3em; padding:.5em 1em; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ font-size: 0.9em; } pre .replaceable, pre .keycap { } code { font-family:"liberation mono", "bitstream vera mono", "dejavu mono", monospace; /* white-space: nowrap;*/ white-space: pre-wrap; word-wrap: break-word; font-weight:bold; } .parameter code { display: inline; white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } /*Notifications*/ div.warning:before { content:url(../images/warning.png); padding-left: 5px; } div.note:before { content:url(../images/note.png); padding-left: 5px; } div.important:before { content:url(../images/important.png); padding-left: 5px; } div.warning, div.note, div.important { color: black; margin: 0em; padding: 0em; background: none; background-color: white; margin-bottom: 1em; border-bottom: 1px solid #aaaaaa; page-break-inside: avoid; } div.warning h2, div.note h2,div.important h2 { margin: 0em; padding: 0em; color: #eeeeec; padding-top: 0px; padding-bottom: 0px; height: 1.4em; line-height: 1.4em; font-size: 1.4em; display:inline; } div.admonition_header { clear: both; margin: 0em; padding: 0em; margin-top: -3.3em; padding-left: 58px; line-height: 1.0em; font-size: 1.0em; } div.warning div.admonition_header { background: url(../images/red.png) top left repeat-x; background-color: #590000; } div.note div.admonition_header { background: url(../images/green.png) top right repeat-x; background-color: #597800; } div.important div.admonition_header { background: url(../images/yellow.png) top right repeat-x; background-color: #a6710f; } div.warning p, div.warning div.para, div.note p, div.note div.para, div.important p, div.important div.para { padding: 0em; margin: 0em; } div.admonition { border: none; border-left: 1px solid #aaaaaa; border-right: 1px solid #aaaaaa; padding:0em; margin:0em; padding-top: 1.5em; padding-bottom: 1em; padding-left: 2em; padding-right: 1em; background-color: #eeeeec; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /*Page Title*/ #title { display:block; height:45px; padding-bottom:1em; margin:0em; } #title a.left{ display:inline; border:none; } #title a.left img{ border:none; float:left; margin:0em; margin-top:.7em; } #title a.right { padding-bottom:1em; } #title a.right img { border:none; float:right; margin:0em; margin-top:.7em; } /*Table*/ div.table { page-break-inside: avoid; } table { border:1px solid #6c614b; width:100%; border-collapse:collapse; } table.simplelist, .calloutlist table { border-style: none; } table th { text-align:left; background-color:#6699cc; padding:.3em .5em; color:white; } table td { padding:.15em .5em; } table tr.even td { background-color:#f5f5f5; } table th p:first-child, table td p:first-child, table li p:first-child, table th div.para:first-child, table td div.para:first-child, table li div.para:first-child { margin-top:0em; padding-top:0em; display:inline; } th, td { border-style:none; vertical-align: top; border: 1px solid #000; } .simplelist th, .simplelist td { border: none; } table table td { border-bottom:1px dotted #aaa; background-color:white; padding:.6em 0em; } table table { border:1px solid white; } td.remarkval { color:#444; } td.fieldval { font-weight:bold; } .lbname, .lbtype, .lbdescr, .lbdriver, .lbhost { color:white; font-weight:bold; background-color:#999; width:120px; } td.remarkval { width:230px; } td.tname { font-weight:bold; } th.dbfield { width:120px; } th.dbtype { width:70px; } th.dbdefault { width:70px; } th.dbnul { width:70px; } th.dbkey { width:70px; } span.book { margin-top:4em; display:block; font-size:11pt; } span.book a{ font-weight:bold; } span.chapter { display:block; margin-top:0.5em; } table.simplelist td, .calloutlist table td { border-style: none; } /*Breadcrumbs*/ #breadcrumbs ul li.first:before { content:" "; } #breadcrumbs { color:#900; padding:3px; margin-bottom:25px; } #breadcrumbs ul { margin-left:0; padding-left:0; display:inline; border:none; } #breadcrumbs ul li { margin-left:0; padding-left:2px; border:none; list-style:none; display:inline; } #breadcrumbs ul li:before { content:"\0020 \0020 \0020 \00BB \0020"; color:#333; } /*index*/ .glossary h3, .index h3 { font-size: 2em; color:#aaa; margin:0em; } .indexdiv { margin-bottom:1em; } .glossary dt, .index dt { color:#444; padding-top:.5em; } .glossary dl dl dt, .index dl dl dt { color:#777; font-weight:normal; padding-top:0em; } .index dl dl dt:before { content:"- "; color:#ccc; } /*changes*/ .footnote { font-size: .7em; margin:0em; color:#222; } table .footnote { } sup { color:#999; margin:0em; padding:0em; line-height: .4em; font-size: 1em; padding-left:0em; } .footnote { position:relative; } .footnote sup { color:#e3dcc0; position:absolute; left: .4em; } .footnote sup a:link, .footnote sup a:visited { color:#92917d; text-decoration:none; } .footnote:hover sup a { text-decoration:none; } .footnote p,.footnote div.para { padding-left:2em; } .footnote a:link, .footnote a:visited { color:#00537c; } .footnote a:hover { } /**/ div.chapter { margin-top:3em; page-break-inside: avoid; } div.preface { page-break-inside: avoid; } div.section { margin-top:1em; page-break-inside: auto; } div.note .replaceable, div.important .replaceable, div.warning .replaceable, div.note .keycap, div.important .keycap, div.warning .keycap { } ul li p:last-child, ul li div.para:last-child { margin-bottom:0em; padding-bottom:0em; } /*document navigation*/ .docnav a, .docnav strong { border:none; text-decoration:none; font-weight:normal; } .docnav { list-style:none; margin:0em; padding:0em; position:relative; width:100%; padding-bottom:2em; padding-top:1em; border-top:1px dotted #ccc; } .docnav li { list-style:none; margin:0em; padding:0em; display:inline; font-size:.8em; } .docnav li:before { content:" "; } .docnav li.previous, .docnav li.next { position:absolute; top:1em; } .docnav li.up, .docnav li.home { margin:0em 1.5em; } .docnav li.previous { left:0px; text-align:left; } .docnav li.next { right:0px; text-align:right; } .docnav li.previous strong, .docnav li.next strong { height:22px; display:block; } .docnav { margin:0 auto; text-align:center; } .docnav li.next a strong { background: url(../images/stock-go-forward.png) top right no-repeat; padding-top:3px; padding-bottom:4px; padding-right:28px; font-size:1.2em; } .docnav li.previous a strong { background: url(../images/stock-go-back.png) top left no-repeat; padding-top:3px; padding-bottom:4px; padding-left:28px; padding-right:0.5em; font-size:1.2em; } .docnav li.home a strong { background: url(../images/stock-home.png) top left no-repeat; padding:5px; padding-left:28px; font-size:1.2em; } .docnav li.up a strong { background: url(../images/stock-go-up.png) top left no-repeat; padding:5px; padding-left:28px; font-size:1.2em; } .docnav a:link, .docnav a:visited { color:#666; } .docnav a:hover, .docnav a:focus, .docnav a:active { color:black; } .docnav a { max-width: 10em; overflow:hidden; } .docnav a:link strong { text-decoration:none; } .docnav { margin:0 auto; text-align:center; } ul.docnav { margin-bottom: 1em; } /* Reports */ .reports ul { list-style:none; margin:0em; padding:0em; } .reports li{ margin:0em; padding:0em; } .reports li.odd { background-color: #eeeeee; margin:0em; padding:0em; } .reports dl { display:inline; margin:0em; padding:0em; float:right; margin-right: 17em; margin-top:-1.3em; } .reports dt { display:inline; margin:0em; padding:0em; } .reports dd { display:inline; margin:0em; padding:0em; padding-right:.5em; } .reports h2, .reports h3{ display:inline; padding-right:.5em; font-size:10pt; font-weight:normal; } .reports div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0em; margin-top:-1.3em; padding:0em; border:none; } /*uniform*/ body.results, body.reports { max-width:57em ; padding:0em; } /*Progress Bar*/ div.progress { display:block; float:left; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; height:1em; } div.progress span { height:1em; float:left; } div.progress span.translated { background:#6c3 url(../images/shine.png) top left repeat-x; } div.progress span.fuzzy { background:#ff9f00 url(../images/shine.png) top left repeat-x; } /*Results*/ .results ul { list-style:none; margin:0em; padding:0em; } .results li{ margin:0em; padding:0em; } .results li.odd { background-color: #eeeeee; margin:0em; padding:0em; } .results dl { display:inline; margin:0em; padding:0em; float:right; margin-right: 17em; margin-top:-1.3em; } .results dt { display:inline; margin:0em; padding:0em; } .results dd { display:inline; margin:0em; padding:0em; padding-right:.5em; } .results h2, .results h3 { display:inline; padding-right:.5em; font-size:10pt; font-weight:normal; } .results div.progress { display:inline; float:right; width:16em; background:#c00 url(../images/shine.png) top left repeat-x; margin:0em; margin-top:-1.3em; padding:0em; border:none; } /* Dirty EVIL Mozilla hack for round corners */ pre { -moz-border-radius:11px; -webkit-border-radius:11px; border-radius: 11px; page-break-inside: avoid; } .example { -moz-border-radius:0px; -webkit-border-radius:0px; border-radius: 0px; page-break-inside: avoid; } .package, .citetitle { font-style: italic; } .titlepage .edition { color: #336699; background-color: transparent; margin-top: 1em; margin-bottom: 1em; font-size: 1.4em; font-weight: bold; text-align: center; } span.remark { background-color: #ff00ff; } .draft { background-image: url(../images/watermark-draft.png); background-repeat: repeat-y; background-position: center; } .foreignphrase { font-style: inherit; } dt { clear:both; } dt img { border-style: none; max-width: 112px; } dt object { max-width: 112px; } dt .inlinemediaobject, dt object { display: inline; float: left; margin-bottom: 1em; padding-right: 1em; width: 112px; } dl:after { display: block; clear: both; content: ""; } .toc dd { padding-bottom: 0em; margin-bottom: 1em; padding-left: 1.3em; margin-left: 0em; } div.toc > dl > dt { padding-bottom: 0em; margin-bottom: 0em; margin-top: 1em; } .strikethrough { text-decoration: line-through; } .underline { text-decoration: underline; } .calloutlist img, .callout { padding: 0em; margin: 0em; width: 12pt; display: inline; vertical-align: middle; } .stepalternatives { list-style-image: none; list-style-type: none; } ./Listaller-0.5.8/docs/html/Common_Content/images/0000775000175000017500000000000012152724462022114 5ustar matthiasmatthias./Listaller-0.5.8/docs/html/Common_Content/images/14.png0000644000175000017500000000077712152724462023057 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g9j;l ./Listaller-0.5.8/docs/html/Common_Content/images/18.svg0000644000175000017500000001170612152724462023070 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/11.svg0000644000175000017500000000405212152724462023055 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/note.png0000644000175000017500000000302112152724462023561 0ustar matthiasmatthiasPNG  IHDR00WIDATxՙ{lSUE`4!!* c= r0j@ޠq`dY@P0yTX1{uXuv=nk{I>Y۝ss#D ywRo3Ax1Xph 5 L_JbԘp6֛ _ppA¢/(=3jHg-f]32i4:2J.a ~@v~ҙT":EvjqX]j0v~yv{%8܅qTђB-NrwZbYD[ť4c|W=V c7I#%u4or pC@񋩲"pL F#(4* Zzhkɷ:k34:|1;j;$x ip8:FJSQ w>887PAjqw0_Z3}i62cq*M~GMZ& ?zw}G0hsEIФN|`7FSqmXu9.*7ڂʭ y&p4ȁFjn) QR)8~( SVVo%'Fj2P/Y@ݕ /a.%`IkѾ,< s Zͣ_oT ̂(ߴlxޓ8p\l$R:Cb[/I ;T&V{ufŨע KqVQ[kVRUPF}@'Pp1HZFr[gR;&"ʕ I`w8kTb .1)(xƓSaquɭjc`#|+N\h$Y@62^+UXષK\ʫlR,D4"$2 5t%XW+?IN@oI״DFWI>٘9(|b eR\.q,˗;1<][+zE٘*/}6-:[lRSyx٭z\-_HYotN k(!bStVF@&= [SɟD`o +"-ů\/O>.[ݥ;6C σg=QiI |K` 4qlQ%|B}d4 gV#nˎ M=I(,b5ѥ߫RU% < 8јYS@,`2pWK ),17=3ߏD\-9A!,qYy"EdBq}U@~f 2O(0$N( k |4`j YIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/1.svg0000644000175000017500000000247212152724462023000 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/note.svg0000644000175000017500000000525412152724462023606 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/36.svg0000644000175000017500000001362512152724462023072 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/stock-go-back.png0000644000175000017500000000112312152724462025241 0ustar matthiasmatthiasPNG  IHDRĴl;IDATxڵϋa̜m׶v((vy,l:x@gA>l o/񍊻ݮ- 6&N&?mLw!d23]i#@ bsMǿ!<J>ͨbH$_L>_kxŌx< _BR)fbqQA|:pꘋۨ&* xFR- HUxal@e Fꄽ*KL@s]rb}D{_\r#HeϬuySMLd 5J调YdJ cqa+g^Zڛ?78̉IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/watermark-draft.png0000644000175000017500000004150312152724462025716 0ustar matthiasmatthiasPNG  IHDRߊC IDATxك FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUطМߍh;qMrvp֤p#9ENrp2.(MAVg(B ====<[˳w==~/]ik:F҅t=MdH7ӵ4=eפ\fS>t6m/PO3Z^KiW.G|}I0sn3`gT:!ߐF6|"LUwަt?Um4z !ISYKi#t,uhxޤZ'i[ Uˬ|)|c~jWKVِM'Gc-vj<duC8P|]\.|K0OS-r> 6w+U|-†/]l pCySXC 8slejMLH,B PT0!bp>Ȱ&RV|`˚YlV bDˆ~{?e~{>ox=rvJ\5F;E\~W`1N)*a>G`>G ~&XևhNG->=1M}SJ) lWb,D D'a gsP"7q'1)R0KQ >/QEx98ǿN)J0_6XLç)J[N)J fXLz 1_9H8R*AA| I3ӹF,)R <,%XDmX}:O[RJ~h -F1Ga!A #|=JwuqJ)TCq4 ݴ PC4PE)R1 n\&f!Bn#~.5~dz6w7X)LwJ)T? ^yЎW1~\EpEN)jeeۙe\pg V8R*j3Yv Ѐ`~2RJE|in1ULG:z}>gᨐShiXN)U׌sW:&w/4EpRJ)VX۞-echr e#RjPa5m<:pY^KhXnbSJ)5|r A'6`d/˃V <={FRjP h =d [`l/˳*y"O)^XN)Ԁ7a!rtV/ۀNX ..c 9Rjc.b^U5Ysy߽ )0|6bҍ:Jz<`< XPRJ _bt`;R~v8,zR y6,&'0/15%}"4R`y^yXLbuka t%>aYjqJ)?{$u]qKw'rMu#Ȅ# j Ihp.*fטVbt:*g9dHf XsjY(Qf@L)]āpw"-w|޷9Y}w?oU' Hb1m0}]a)\(D~ z r`U0$~KaR] =s<]ZC7,.XܗklAX7R~ HnǙ,ed9XJ%h-RJyq[Dta?<5#GR] Pf7R2e݁9<.xi+N2օ/<ȧįCSw L RJev7т2'^o,"cMXw/=-2b8 .owN~SJ)'KVB4D~TXx꾆 Qa%x<.H𦼗aeDŽ2Oa w9')X< 'Go{z7Ľ,u^V$x8L)X7]pO~SJ)UKXFvǚYXӧwÊ8l9LH?KIEj RJU7,#ЄZO)'Fns؃<`~ *>^ ,bMFJ)R}3>5t"vp1/-oJ4 g`),W c;Fn!K*j?@` *X RJ ?8= \Xa1 "<ǏJ3Va}yX R%]^>>Un)~8 ܃<kz %刑gahp- Ka'jREu\^{VaG=]Ƙ}x1 l=́RJ)r-6X[QoJ)('TxLxMbwހ@) /QXF:0 f-c'X S_ s؏w{$,9RJF'XD2ߕ UZ}a%]X_5v \x 0u-C@)NZ +S3.qx۵^/vXC[~ 7֥wcPVOǜ߂p[R|&vR qxјh*ceFMXw =ss ,(TU>%+=,t=؄,ߩ_`E,qDtBb@[ Ϟ:4VGܓ;${> ,?W'GMd[+E^a&(,8b3aUO/SA)נ V[Ls EtfV9g"u᱗V Xh[5xVa7xћaedx;WI~V`pPIף!j8,d|OFf&]* <\,±ޔ&x<}%F&<{0#ޕ`kcs~,tg}~s K)uFn"nt=-A1a c"3RclC{G_G/Ϟ @)|-tB~XK`Ա0јwc1r_WRIr0|)]6y^KKҕR8ִV{#'X(zfX?igfG^)oЇ|}ai8do^:8~vץ ՅB*ƵXlqk"b$Eڪ!)&ڀ%(}[_T5n p)W.;f̽3g<Bfr;sF3ʚb -Ź=ax":-؀QסVօ&X8Zώ\FBUG C' e$V̶R >=O'OPFSeMX =hPWh/4$OGY4{AnSBg4zRh4 (k=˰P馄kG/ $ DMzt'O/6PFxh45Mo?&y3x$"0NrZ7V$UxG! -4F㪬#{5ca،b6a]t&\zC,bLrZ'އ8#j4AYSc%z_Ǜ203yԆJ??86˳sIh4E+k iC9Y]Dwayvl$4h4M˚:rS=:,Hڗz,Bqk1}]cмFqZ4O0L@IK8t#=w Ih4 |[Ga?O CJ#G!)XRXK|QQh4eMځ=.kڌ zp*Z#mX5xb`)QJpncB XYÈ"㪍F8-kjfAYSqʘE\0f;GXfHA5&arqo$ h47t8~u-8)-hh XZ.xR6HG#U@>16E9֠@$4h4s8x\EH )yR,Eb^/\j\FLE( M6FN0x 2!YFi IM\qYqB+: ޅY,q1$g{'A,=l%7BFb$?LGI@Ǐ|2B /@b, =MbU bFTn 3=*qGߌ<{!ֆ[ ']Xǿ/x;agy2G`%gX^Ǖ+bm@O؃"AO8Wr! `K|kP 볱vLCX,0;!Jva<,]; [!Wǚt%xp A<ޘ(*Kxɶkg@Rw}* i,KlNlp,zcUsn݃cY`]4[VAq-T؋(nmͫ#C}E{K-iITA <@rĸ ϑO! XwVgX\V {8 )(f"dx̪9Fz8;c $$"Y,/ֆGd&{lW_Ѻ$zdz4^E gs) & |gXئZmPxG%$eʭIBFfX@2b gYO[Z9Wù}6ABvX,O| a_2ФxY8J{YAif*9^~Yv fJ}wi7qt[+H1Ţ{_U|}D@g Z;b,AeE? Sc)CЈg=D0yo J梕X,_QV18W"==&Q6Y97'cD6 w%Ī݌% 9.c!/1XQ |s0ۘ6ZoD"u% ?(ShHw=sud=̎Rua'78)/p%TQjd51 Qt0%t9+/@X,^-(7%cxDt+ [#GM u LZl,)7](h>4M38p˘x : Kg1 {C*_JWbY,/XQ/^ 5?J}{h ob>e8p!cJ1[ !3Wr,KQRq(4=DX$x'dY[ sEe, Yinz0Laie6CݎY0a#/OށtG;Od-.p@TB|iG3lxodY[ӎj/h;b8~J -V8Aa02&L'qCeL2HD9FjMAFR` C !j~8y$iϏSb9LA;>DQFW,:>d<1`[ӞU+Z$}q|39h4ff;`i1=M_}6Q kGLYHyXi2ZU&EJ/BӄHKrL!cʷ\\wWBbX]4E9@ٸh4Flb4$E|A֣s1b?*_P-،rq1 kP 8a zzx[)8 HҊO4A_ab+A;q#,ۚ$B8ݰwy~7Z^G\ku( Xc02i^qy O`L,.= %g(n`~:B4 ?5kyskx |h? i 1,Ň-|g!Z(c1RS4JF a#n4|NZ>r  :}?$_}N/7Kk `Y(331Kch?C1UdXRjk=aHq  X9(\|< Ē xRۚj4X& hՍX b9xL >\p {Q؆[۷` $l;PF,AhODTo蘌 h78+ݎ 5؃l6]T#ۿEDLEcXο `HF17ah%Y(+ЗyLXNj,h&mEG/> HF$8o}rdzÝ%w"oz\ ˀFB$Bj B/c{#ߍIhlCkP8xoߌ?BR[Wh5}.uUjjcFb iQq{D4CcQ^~}mwbb2F\V6qOG`uF!TMna~CcR at5Q!IX,D1ٸ W;x*>P͋H gObhLmXg|Aڨ2/Vk}PbHO7-A}v8v*AhOYޑ|>7Ր6  уj; hTsQ{E'$qc< !8Xyx%u+\ x7xۣ8 ?FG#K 5m5;xgB\LjsLrx3$6so3 w{Jk2 %t5iPpODgY̎gB,E`$"E |li4Br[hns گi~j`e}iV8HVUD6v{)i4Snn2 !5!g d͜ea8Q64Ӗ\Ltt9 xB1AZגrEfE7s>=Fc;wT/:: uhJAЬ8˕҆dlX'͜t4M;?ptn1h4VܶDL}=nr,9HT -6* 30oB|5@T[7BGOVŘ_oڇᎏKvOCRhbQxƻa$G0{6X]*F1hBY䦝_f1 mS8䔏c {2ć4G5#ӱ{*,@-Ē]J8~-!u[@\(Y1* *tj|K."FewTb B $ªh]vxech&静{=w% srsGR{}|T^3Mfl@91 O~#}Bx_VdzX*oǷK8h4+%[WCRx"g$^X<Dp&@Br8Ϳţ?ZΕE\xC8g Al?h45OǴ5,EU Dx@Jla-GM@d;܋Qu؛bQY)Wr큿Y.xzFcL6`GZ/ !ñPﺶVy"u*25ŊعZ8# 3^ZH K[h#qv9ltT-lc͂x|Fa6(w<K~8Fcb?M(Oף_"ƦYU z$jTP`XzHN N6&~ d ˳k5 Y$kWd&8C=N*+p+d>OZSEouoBhB{%vs 4fEu:I@vOW b=K0 1"9&ԋг4ifL-^#xc9!qU 6>R#x] Ãho4$WmFnxRex.MBc.$`u/jEWhB8Pǝhg4^>@$0~/BRD̵ֿtFF'>fB f@tN^HۇjTfQ?p΍xShX_l4S_쌈4Qy؜E!s|>q: !H+&==b;ĒCx'FԗAQEk\Mϓ?OKZ?[ڀѮEіmM|J3*5U) *@/q9U1[%%0Z:r[ӭUq{2+~\`*it<Naj y} |tqF>Ƈkc_x7Cb61a؀bPlMkbDh4'6RZшÐ6gm1Ǖqؿ9U=1hfmMYnk#F܄֡QҤUQ7 ؟phXh4Me8aշg1_`r>3fzb֖N~mY~8h4h&QM1C8vmh&Kbl4Tzc^9E5]8$@oa6c%3&Ijٙ!|I!mp8a`[Ӊۚ~sF/B~?uhq ~Ca"=?$ Mp|}}l:h4 W{?$ o8tr8RqHLδeEG܏F3C~N.Bh4b EtcvSl{XUx"jQX-Sfpb5ߠ!b"ۚ>Kqh4y;ߚCWl(8Fp A,y$B;xeW2&'-etb! k#Ģè4}wz;0:F>Gc/x!@_fqlb߅ю_o#!,FNr@k|Ӊ(8~! 1$lj8ArtQm6$@ch49d&~yh'c 6mIKg?miª0a"(˜ᏈG毢[܂A4fؖD]qj33G!(9?`+"Bw?{s<='y¥=_.s<>95A)f!h4dm %p>5CmuhcVC=~׆>hoA/CR 1M8;a/ēCah4=vAz,b%[nbno2vCzI{5+*iL8 qΈX1ftUY2ynp%\xH'svFJBm;xͰ^l@ǒ0V }#Fzr#=n^zTĢqF"c-$m(XW?谗yA8dFcp+>{y.E+ijY9AЎۙAs!|ۊtuNǕIQh4.HFm!ž/K<Ћz6bU1Mb;Ҝ; K,}|.`3ē.ư@h,&ILG5hlj Kq:wZc=q`~1s̞>2.8ЀY߻n19lD?-: lEFX[dl-D=g#3owhz?O@h޶8!gIH4ZwWC<3']rtmDŽS%}kPh4rHLlAH UYC<9=ql0 Yj@KSߏDģ: 4&ۭUZ\ ~Z#ݸ\h4vzH¾G5?$k! {p?{ bFI"3M=nh>cfY;!p1TRǴ[NM;xnkgFƒC z2h8;$  q,;b{:b( !`ish4MOp= PKH7b $Zz/q' Cjh-*Rt>yn;#h4>x;wHD_,uL8|;I}WգIUH B 16mMwz^o1JFIk b낄( O :l>x}3jxLOi[<7yF9U$ksKkБiIؿuEY{;_bmk&Fs Arx*|7qx1nE&h4oߝDg 5LGbʲ~"\p ~FsԗAry_>P*-ul+)LdR_ mĨ@hNx18a2鄄1bikUJfwbi;0W_ ۚ繭6\h4MĮ.숰H=ԴbhAp$ c7St2o~?~mM5xbhUercjTlb! I4_)hY4R LQ1I,(Mj '̜)MDz6o?Cv9ܻ^/9s8{`ga 2(Qy;{ UFصu'vB؂eM!SJV:? 1,jenX"O{fHFxJ)NLzlaeXw1T*Bti )N0GΣW}{9Ə=o]fi%̑FBR*͹3a}x}:X&`8$V p`;0SJ)|ޜ-䇼Osf`Iv}i#C'Q<)}. :`O`V㸯JK`H= 1YXa.2=RqݸP4 db8c`2\$C_lq<zJ)?p!U (*h9T$a|=R~{,Cާ$w ?m0`IZT)sc>m%cȋ9`E)J!So%s h a#SJ)l>&s#?`I7Ffb.BOa=,)@Q }J-p 9HRJEzq(]5B#,}lnT*G1 iF U`tE0;.(9҄)Rq^a!{c"Jc `ˑce%E.MתR*χW\q6~*alER*[pc3M,$<A]B#x"s<ͻR1 4:~`Ep06R*e8 `qe=] Xnc>.)PO)TJCXi+/΄%'ȏO$̑ӘRJQt|iKbX`| sKSJ)*` rXNa"Fބuh9R~RJV})l؅2Ac9t+  cȏxSJ)|,>(='| *q'g4~9r3RJd~c`eMW 8nS+âE-% QxaHNh H((TFH*jlXLJIP\,ys8g{ >v}l}"dx-`Cw$fff]UǶa=R6L~,CqN#R|3xK#b[Q8(ylXS33Pih=X-r~?fc5K<LO2>юѐkxRǚY95+p/0^1OC33r -nebхAÇk:5133+cN;{qIDq|MzUrѫ{ю9Nŋx2DcMl,ܷ"a7\E\_X O!133AwrFb׎!ʬpUbff6C2}f!czdkЌ({МGe 2hE;b9l@&fffXpQChz#){Yx33 fa7EsW|nG.99k33* M؇pO`r6MOy}?bi;q opgbffV#"wb3p/y+:q.7) qlf $fffUvBØ)~w8mx30)Za`!>aE؊|t%fffUx`NЃ/Va^ʦna&Ab9.t_! ؅{P`#Ѝb'33*Hb!n<>|4d "JЉyY KqQAE_ p /2{!ػc(88@ Mr pW.N!El΁;Ã|XuuW}>׻uPT^C})؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU؃ FPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUڃCA_;.B4IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/important.svg0000644000175000017500000000474412152724462024661 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/yellow.png0000644000175000017500000000025312152724462024133 0ustar matthiasmatthiasPNG  IHDRbsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<)IDATc'g`Ci,b(8ġxA1aDIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/29.png0000644000175000017500000000133512152724462023054 0ustar matthiasmatthiasPNG  IHDR D8PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g6h7i8j;lxB3Hxb$u=;"BS,/X"> #!&+ꔪK(2Bcj Dէ8IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/green.png0000644000175000017500000000025212152724462023717 0ustar matthiasmatthiasPNG  IHDRbsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<(IDATc(FQcC2j6#+ WIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/39.png0000644000175000017500000000141412152724462023053 0ustar matthiasmatthiasPNG  IHDR DVPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h7i8j9j:k;lbo*I.;r1}|LaV*,׌b@]jԆ-ƫdT]!y,NwsK; c@`docF E2'66맂@ A ||H3'1(}u 7.&eUt!C`3[њ1zKt*IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/20.png0000644000175000017500000000126312152724462023043 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h7i9j;l=m=n?oCrDsEsEtJwMzS~T[^cefgp{|ÊŏǓɖ˗˘˙̝ΟϡЧөԪխ֯װױرصڸۺݽ޿k tRNS2@Q(J>IDATxڭYS@r}߀}fHP/|/;UU;;;Wa9eўO\#&B;"b'?c YHr=K\'UxȫH^i[,W=G fb('R/V3Х "&WaHwe CnÒ-Jq7, 65 d]d9VGusc\McUxָ*>. zfyȪTop _,2j¸IH4s+FrU㨾^?2B>eR]IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/35.svg0000644000175000017500000001160012152724462023060 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/31.svg0000644000175000017500000000764212152724462023067 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/image_right.png0000644000175000017500000000321112152724462025074 0ustar matthiasmatthiasPNG  IHDR)K=4PIDATx{lUJE^.H!`AEQF"1F@$@1FADy%b4@aDݙJIyR孔[$7'wYv[Z8|{ιNsynoJ&  r!" e$$v=U[YZڰ]xEk8xiW_bKq#qk!NcT{WT?8:.$B>̱^wBcXCȕ`/ ÷E&mG!P*ucl_i_[ME@,د۩>~!p}zBXŌE9߁䠫S*ĞHF"$%Idu-Ѹـw[.[Gw ؕR㨘!XTlwKDh.G4ap<8 00a8[xt*c.SX '" ߁H^I}tDy[D!r`SZZQ^G;uErQfsTU[ y+U܋X%4z+dvN$BwrHpxAԂ;D7W9ACD!l1-jBB t* `:zpˠ$5Zz^D!z?Xւ$bm[9\*'~C!0^hm\v6U9(Sk,UBN`Yp G?`c)fNf"G(_hP#1Rm,Ldai,"Gc8jxTCu,8_ 1%E#FP6$p_<Qn,~0_zt3* "GR98,GG?CX{ùM`6X "ǵ߅*p^2n*1Kwik gsqr(5,6*y-cD#S9v~aie)`M󔙬DG<< ` ࡟pԲX->`PDI(GXOv>1 r;`0=oCϾf>"GӒc(Hz YM5X>_i3/uIUmL0`4'X0jW?S"q  U@'xtoy00iҜ Ad]9ACDA9?CyIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/22.svg0000644000175000017500000000667512152724462023074 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/17.png0000644000175000017500000000100012152724462023036 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g8j9j9k;l=m@pCrFtHvIvLyMy\^`efimy|}…œ͝Ψӳٷ۸ۻݽ tRNS2@Q(JIDATxڭn0#ZTW8űS,2%/ xK.VYYefM0N Zt)NrzI?U F|㎑T.9A8Mo{/gSx#Ph޼KOx0*XOYT Lff*Z__‰ȕ 5/n?oApAqCrGuIvLyMyQ}S~WY]`bgilmsyy}–˛͠ϧӰױسٸ۹ܽk tRNS2@Q(JIDATxڭkW0 XPPQ(w7$]_ғ<a\?a\@a\Aa]Ba]Ca]Da^Ea^Fb^Gbd[hhZljYmmcogEon^pperh=wpTzsV|gq}]}^}_aafgyzm}jru(?A+<.906~036v.:B+<''?BŲvž̯LбGվuͮ׶ϑrӕՙݺԖԗԙ՚ՙ֚֚יךכחט؛ٜٜl!&*.1246;;?CGKKDPTTVX\`cdimqu_acloy|~ނރ߆߇߅7SztRNSBCDEFGIDATxڽUXTAEv((v+&]vww'bww؅ (MX᜙u佛yR%RRqVk4ZN C1U UJo]( [mԇb!QTx ҷ7 M羲5)"=Qa{l>,*ZIԗEDLD\W@F#~3jR{J9)6 ;8IHsgRTBFGw[EG)YЄ .1"zF;蔘HIÔ.&; t'Ό3ӏ c|&T,wO  %[gvNw c<qBEaX0ä ` {( 4(*` V{R ` v{0 (2K߁9ihx RK j?s 8pH ;`@Z6-0K_4d@"NT7 9f_)9Q-}hD-NZCzmX͐sOE2SNu vs\NC$|$rV<&2ocLԧgܴ#fZA?14ĎTL>,&"XRŖ g(H~sh>Cv|9Dp=0ϸWwaQL}Pi>Ɓ17NTgz!?̀>,Fb w*fCo]4mCn =6 ZF8NR*_H IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/34.svg0000644000175000017500000001000712152724462023057 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/shine.png0000644000175000017500000000020412152724462023722 0ustar matthiasmatthiasPNG  IHDR< pHYs  tIME  bKGD̿IDATc?';0zD;zHM<]IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/32.png0000644000175000017500000000134312152724462023045 0ustar matthiasmatthiasPNG  IHDR D8PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h8j9j:k;l=n>n?o@pApAqCrDsEtFtGuIvMyMzQ}R}S~VWY]^`bglmsy~ŠŐǕʖ˗˛͠ϥҧӪիհױسٹYS tRNS2@Q(JMIDATxڭV@$! PTP 콡E((xv9{ζ+~EMSWp0D.`CاQ 60#PSagPS4j/vLcUEԷRJXp1GY<^4 |1E {1Y}VpWaJUC$>&Ce9"V&RG0|p|2N<>!GDG\y/UP2KqdVӎ$LQ@,*qVw'B˲##(nHGN>?;D-dIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/38.svg0000644000175000017500000001547612152724462023102 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/35.png0000644000175000017500000000133612152724462023052 0ustar matthiasmatthiasPNG  IHDR D5PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j9k:k;l=n>n?o@pApBqCrDsEtFtGuMyMzQ|Q}R}S~TV]^`bklmmqtux|~ˆÊŋŎǐǒɕʗ˙̥ҦӪիծװױزٳVk& tRNS2@Q(JKIDATxڭWSAE#PQT@s#"**'rĪ{勺fw_itaueႉT9QV_{Ѐ^W oA <.Ni_|s"de5Nq'RG3?= W5d` P(&2I>,wucuDFQaܖ crKkF}`kIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/12.svg0000644000175000017500000000535412152724462023064 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/1.png0000644000175000017500000000057512152724462022767 0ustar matthiasmatthiasPNG  IHDR DiPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h;lAqIvMyV_vϽ tRNS2@Q(JIDATxڭ F ~iBYMMkzHi)q;tc)cZ uG/t5{bQ@7V6ߟF%eR/Ek>C-(N! (ņ (x*8 A_RT4s #Gz! IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/5.svg0000644000175000017500000000447512152724462023011 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/15.png0000644000175000017500000000111512152724462023043 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g9j9k:k;l>n@pApBqCrGuLyMyMzQ|Q}S~T]`iklmqtuxy|}ˆËŎǒə̦Ӯױزٳٸ۽w8 tRNS2@Q(JIDATxڭR0EcɑA^B/"Zi{FpjWb!U+)tRF~_d-/5:?( dKIe}JìYH`׻F鴮?/ag0+^AQ= ҄G= a تʔ$({$,Վ ӭ ✖;89x c`ua"'7'nj= .Qjn?o@pEsJwMyP|V_i~ɕʞϟϧӵھ@ tRNS2@Q(JIDATxڭW0 NV@\ NwRr+~$RRD~&@$e{1Ğ)4H"c /)1b0uBwVXq|XewaZQsDB@2DOL)9Ii].IL ܐ>;|QC'cلv.sK^{qy5c$]A?IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/37.svg0000644000175000017500000000676312152724462023100 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/7.svg0000644000175000017500000000165712152724462023012 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/6.png0000644000175000017500000000106112152724462022763 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h7i= Kj%obۚˊhM>i1,ZD{d]xjԟY.PU$+T9kШ!r`ZfhclJϸvowṉq񸉫֑s- ԟ!X./A@{R }k++nӆ/ɱϙda?2n}V}*H@mU gX Z~UlEILƞBޖHĺ.Q{+&yEQ▶A]h@F=:>xČڇ2kη3De|a4Wa!v:!AIqě%&0.Ѯnt 5T=6xęb>KvBh>`jJ謹_v9>}Lۃ5r]>1 R''ChN 6d Ԧ[S5PbPxXcݍ!9cb;@ -t*!ۛ֯qRٶ)u%+YLkq=J<x,ȁs+' C%zvsXFLBsKꞞc];umҍuL*٢5ի1(@EG@l!xB0L9XǥeA;Ӎ..vA6 P-t;Q@XB/8\SB_Yb`o)Uo~[./?'&92&QHOfʾ} f9 i=!8~}LVQ%jG 41ȋR[!Av-1GOP‘۬hr Q @46p]7 ͝КD΃qSS8*/`2ZLW1#X,VJNBK\~֖ Ȯ0a>Tf.:){5™@`jtے*31@:H)i8.KG4 |;+$i{ j9D$| j [" 2$a;ᎆRgG3u\"=X] g=HB\"psIIXX#Zߘ C}:_JQBbS=cO''1ܷ߶=KpK)-ůKhQ2,j;;ctvcAAyVVXDGU$&G|wQT5E]~~|Ŋkz>bXVPr%)XE5O8.V44֚Aǧc# :fd\ze=#G,Iltcܦ!np2@A3CG! `Lhno ðs☘H,X QI)!ځRDɃ / :)6TbǗ>`>XlT :RoAHR>pjjjeeֹm6xz(os Au:ahrjvub¬'(ͭڴI]Y m4[cH3[wIPoCxl6'\@ ЪT?Nvg\.A(܃phxa.fdEEEbqGQ 8=o^'po8A/ՙqWT?x`-j3c6BPTZV-._1.nYv% " W㬎FFjH )jAekjy<FpL,_roo[$;%U?y.X{ܸm2A'i0=Y&WjJ\/0|xkL()/ gCķ,."Ѱ|i|u1\CMQYab63oĪb} E~ o1^o\PNxD"˕åSןA[At6K +7xk$cĴ+".$- ˖2j n $Lp o V+{A|ilYPj5N'+/,((Zׅ dg/{ -@(ҭO=U R~Vm1'/E̛ )z߾N2ہgrǂΏE "{ۉYtZ}11G?صW~>}ȑ; '+tJ-!{18Jms N>`dadxL9hv1zFI9pށIy@ cX2nq@ .[+-m[Rߦ7cƩ_eۦ ~bJO:_A4s} ;M@LXt+Sn=#vVr5k{X,O]MXtaDV ޺0a!r'Ts:` 8MH'h@Kwؑ",Z]@pyT"~%{bk̉ W< $[Z*+vvW9vrab* ·p!N䓿 !=x[1n adl܌Ap1\kPl[UӾ-4{'.>dW@Cgu Hq^ Cځ0Xҗ BYS^ ,C@-x}l #'|+2DfW=)hloXXh@#62CsҶ4}W_/?iuM'"IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/40.png0000644000175000017500000000123412152724462023043 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h9j=m=n?oCrDsEsEtIvLyMyMzO{S~T[^`gi}ÊōƍƓɖ˗˘˙̝ΟϠϡЧөԪխֱصڸۿM tRNS2@Q(J9IDATxڭgS@$! /`C{{{/(&F/<_}&*Iv}ߵt:M&ݗN8$xX>>xS G<+%D0yGrL惐p'LB,s/%,[gbsV.Y"U^J8a ({*J9} >h~OjJ8 .>b xg|LL#n@pApCrEsHvIwJwMyO{R}`q}ĊŎǙ̟ϩԫձرصڷۼ.~ tRNS2@Q(JIDATxڭ0 X1.{5^ j sz]M4uͯi+DH0IPHY>" 3*TES% 1t-<;fSƥyy @ ("H[- d p)>.M "h =bOHҸL)! w)۬wP"vԨ&mյ#}YcAQ9^q_w&d)/uIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/9.png0000644000175000017500000000105412152724462022770 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h6h=mCrEsEtGuIvKxLyS~UX`bceluvwŎǝΠϡЦӧӱضۼK4- tRNS2@Q(JIDATxڭN0EI;qK˾ZPvRpޮHcsJ) U\[N2Y2SRTHj#oTMt(G or~eǰw- Iޯ~O܂%.e&y'*m\F<AOv1E0P8-vȱEUI> ϼ.WzTpX[[uN~lCQ[26ᐄ;0 /mx'(+CIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/red.png0000644000175000017500000000023212152724462023367 0ustar matthiasmatthiasPNG  IHDRbsBITO pHYs B(xtEXtSoftwarewww.inkscape.org<IDATcXĀ_ BIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/15.svg0000644000175000017500000000601012152724462023055 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/28.png0000644000175000017500000000133712152724462023055 0ustar matthiasmatthiasPNG  IHDR D5PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h7i;l=m=n>n?o@pEsEtJwMzNzQ|Q}S~UVW[\ceefghjkpq{|}ċŏǐǕʖ˗˘˙̟ϠϣѦӭ֯װױرصںݻݽfӑ tRNS2@Q(JLIDATxڭR@*XQA^޻4#5Lܝ9gfoێ)R o=2SCh"QU"%r#M ]KАJdH=|NZ1WwGgOSd\/]=o|(%r:i [f0X*YN4(ypQ Ӡ$&-ðIa,+A ./Listaller-0.5.8/docs/html/Common_Content/images/stock-home.png0000644000175000017500000000131612152724462024672 0ustar matthiasmatthiasPNG  IHDRj MPLTEpppxxxfffkkkpppnnnsssooo+++nnnllloooppppppnnn***ooopppssstttttttttvvvrrrsssssssssrrrsssrrrssszzzppprrrssspppooooootttxxx jE-]E?Qީۮ PFSj3/˝irGz6I8 XEk)83iSw[P0r!df~a$#;:dC l'h#پv >n'P#HL{IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/17.svg0000644000175000017500000000317312152724462023066 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/23.svg0000644000175000017500000001111412152724462023055 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/28.svg0000644000175000017500000001322712152724462023071 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/25.png0000644000175000017500000000126512152724462023052 0ustar matthiasmatthiasPNG  IHDR D PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g6h7i9k:k;l=m=n>n?o@pApBqCrEsGuJwMyMzQ|Q}S~T]cefgklmpqtux{|ËŎǏǒɘ˙̙̟Ϧӭ֮ׯװױزٳٺݽLJ tRNS2@Q(J7IDATxڭS@ť$! OE, ر`PDxwpF}7oaڮkFe:@D)1pb|M$("Z*Zb5oznHãA$D􃬝ti?" +>3D8r|&IC`H A;+ޡ\)6e1FJgRBqjS prH7ˬO(.s-2M.}>lR9SeBS@H=O`nJYWQ ./Listaller-0.5.8/docs/html/Common_Content/images/40.svg0000644000175000017500000000603312152724462023060 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/dot2.png0000644000175000017500000000015712152724462023473 0ustar matthiasmatthiasPNG  IHDR TK6IDATxu 0]U:F&p#M!?[ E [ݷe?_wDpIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/20.svg0000644000175000017500000000720712152724462023062 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/34.png0000644000175000017500000000126012152724462023045 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j:k;lWj: !^?mBt.wP5k_09` h'8rSC@4ܜ2pTQ&N/^q9K8MZG=pS$f)\-oT$`Ao`d ;%N:GK}n(WNW?~_A3IIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/title_logo.svg0000644000175000017500000010152612152724462025001 0ustar matthiasmatthias BOOK PUBLISHING TOOL ./Listaller-0.5.8/docs/html/Common_Content/images/38.png0000644000175000017500000000144212152724462023053 0ustar matthiasmatthiasPNG  IHDR D\PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j:k;l=m=n>n?o@pCrDsEtFtGuJwMyMzNzQ|Q}R}UVW[\^`behjkmq|}~‰ĊŋŐǕʖ˗ˠϣѥҦӪիհױصڻb tRNS2@Q(JhIDATxڭkSRa9FP,nZV ejE`L ͜|3kͼ{в# ʁ0. C׫8Qv9|Cp^ 1?@ll SMaeI'`捤3fv>k.HTTyE1VbAQjK nIY1Xtx'd=X`d*`Uksm SJzϤNːx9Xn蓪 ]6ɒJKt0mk(=**&1ǖҐﱢfL7s^)rU_ ʍ/I;RuOt]y0'}gq}yLxIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/2.svg0000644000175000017500000000377612152724462023011 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/18.png0000644000175000017500000000121212152724462023044 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h9j;l=m>n@pEtJwLyMyMzNzQ|Q}UVW[\`ehijkmqy|}}‰ċŐǕʖ˗ˠϣѦӱصڸۻݽX tRNS2@Q(J'IDATxڭYS0i!mr⊊nUT<8TB3y$s7%W“Q$=fڅ: =!1|H H=*vNH +>e+ꈫ S]_'=WH9VAKu00 0O]wph ۴氊z HRZS|5A@Dm@H},|'<8#Q@') ƞ.5^o>> $o9njY2nVζ|~\<^IIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/37.png0000644000175000017500000000125012152724462023047 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j9k:k;l=m=n?o@pCrDsEtFtGuHvIvMyMzQ}R}V\^`befm|~ŠŐǕʗ˜͝ΥҨӪիհ׳ٷۻZT tRNS2@Q(J6IDATxڭWS@`(PT]"*?\7`f{3dsn߿yizu[jk",-ڏ#$B EW,d燐[.e,6$?pI15G|7ɭ !Ber!&nx~2zPC^ErE x. ./Listaller-0.5.8/docs/html/Common_Content/images/important.png0000644000175000017500000000346412152724462024644 0ustar matthiasmatthiasPNG  IHDR00WIDATxyPUU2sfiİ4B@ɪH-W I2e*4єV+ dE!1KE]}/'P3{9{XnpS?==J"* : y3%HFt"fyh0O/9ħ7C ýZBH{mLV*ؔ P^EIgņinC6\< ,6U)\+ib9H&A"aƅ,@Sx! F?"nrEfs1OBTڮ}K $u 6O#KE.,;w񋦡]X^إo`Cd>KS|*_7،,圬ViR-'?k6x7*vVV u/~5ex'x :X tU^24Va Zz1>tudrYZիjݡm;%c1ijohR.;呉`+8؈fh&]QG=OWb6Rc?CD,[<^ 9(/d!1e9k8S:F% naN+ ?B+77ޞA<}Lԗ-\9w,#]w|r 'uXhi LˋCl f*la6Cra>>߾ *Gr9 y/]5 Ҵ:s R6aaOh@_ʔ2S`>:,nYv'> 8TbU0<ƨb1V[i27. Q bL哯)kU{iO[MfŒ#Wi$Lҁb?F\7B$?:'= l/25|dY]tSs+gOMn8O+g==OF\SiD8ˬ|ں@pq@.v1ڶp$q/jk{ π{0 ?1@3Vj_Qgj%1!w !߰kV͢RۍB|fbN,b\p*-ŸeũЇ _;4Oӈm)fLTF?I[w$A8bQ"hvp9gzx )NvP8ؓ؞aX:M_.ɱ!8v0 =s%-Ū8g9@F${?.^ȷ!W>6f[ͯ9Ym%Bg9(J`NP+9%+&*urz q<# 9=L'zxXexv凑ұ,Q=n 7jS$zPXrF[ v #gN2׾`9!pvjw,/;ϲ$uC[є)O? ^&5icZR-;g;$yv*?w^WH:Q$= hklVxv%Ac]9>P{^R ./Listaller-0.5.8/docs/html/Common_Content/images/11.png0000644000175000017500000000070612152724462023044 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5h9j;lBqEsKxLyMyZ\`imy{}£ѭָ۽98 tRNS2@Q(JIDATxڭi0 eƀz}g3tD/I˺_a!I"y*A%Q`=3~ ľO"}3*_ST"E?o=uFQ5JU}F/Z">`$E9>၄lBxQ.p3'w.Z$H'ͩ1] $;Aڂ9 \Ŵ3&5BdM:n8Wνw_)%fIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/16.svg0000644000175000017500000001003512152724462023060 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/29.svg0000644000175000017500000001137612152724462023075 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/33.png0000644000175000017500000000136112152724462023046 0ustar matthiasmatthiasPNG  IHDR D;PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h7i8j9j:k;l=n?o@pCrDsEtFtGuIvJwLyMyMzQ}R}VW^`bchiimqu|~‰ĊŋŐǑȕʗ˥ҦөԪիհ׸ʽ tRNS2@Q(JXIDATxڭWW@$(Xcb/ 1s9;sw%٭inYwL;]drm 5ؚZPMy1UTBQIM'ϦƉi̢ϷYPq] +H:u$](s0 $.Bů29KTDT[᠛ 4I'#1`i.(eL|7E5Ԣ|EK@E&1WE&7ҤhxX1 @P |e N?䖅*AX 1x8raVjiX}n DbeIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/26.png0000644000175000017500000000131512152724462023047 0ustar matthiasmatthiasPNG  IHDR D&PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h7i9k:k;lE.fH]`+k upMaKQI1L@1˚xsPF -AzjXԸE칥 #]9^q_|D{B<IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/stock-go-up.png0000644000175000017500000000103412152724462024766 0ustar matthiasmatthiasPNG  IHDRĴl;IDATxڭҽKBQʊ^nK[cmAkAC8 !( )PCлy.8]N[(| y9 |{Kf5le2|vRT/bh4:PQ;2R;:,T3NJ>m'}^N#v[L&#RS߱ RS$ n k|>/?) @k*< [0ł M^笅 =gy秅 cݘΰcȋf6r0Y4&̧ . ъKx8&GKh%j 2XsB8㻫iգ 7:E ڍO$PIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/h1-bg.png0000644000175000017500000000106512152724462023520 0ustar matthiasmatthiasPNG  IHDRdmMbKGD=n pHYs  tIME 5-IDAT8UQ9GKz4u  DK 9|atzn—OMl|]/=ϼx;j30A@ ,{F,i!2kX[ף]<=*;_`vԙ;luSn=*7>7?A%AB:^Zʷ{*2y۠ns٭Ʉ~c!?ozRuI)aΪOG^"NXɟ ̾{񏏡݇5Ymmew->IiU?`9 oVQ#x3ӹzׯztj?v/Q+IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/3.png0000644000175000017500000000105412152724462022762 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g6h8j:k;l=nBqEsGuLyNzO{Q}UVW`abehjlmmsu†ÐǓɪխָ۹ܻ-Nd tRNS2@Q(JIDATxڭSR@46aCOh'YȎmfj{g/Ί*W89ӤVR'=Kyǰ<:~C׭뻧%3"/ h>1G׷M6 '$BYׅO V!Fu\qBg2 AI x,1DŽEJzlS`6JF8=c]UYbئ6LGk:{1}s*!<IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/title_logo.png0000644000175000017500000001310412152724462024760 0ustar matthiasmatthiasPNG  IHDRpd# IDATx|TžO%$H.HATP >G|<ӏ"`+xE"-$@B !@H=Mfwl 眼_v.ɶl|9g|?/3L94u7 RofUf ==MB96q/֘"6q:5+My.{eK^G &N!4[rfge _zD3_ÀO@ +.BvI3MD+Kiy M~/FUQOtfYf_Xpod< K[ؤ?DgKO'6fd+"i zh&q/oa`x{s]Oq˄V}]6ë _\"25zVȥ|WPel5  Řu`_u\47ʻ݆)WknƱhTp\5QƗ_ q?.NdDP.ssǣ0j 嬗8?+RՉ6_`7=la.g n&m|y^~Kyx o޽lQI5y #?Hiyқ+KF? d2+%|X|/_C!iR,y{֯T~bjs}o0;8T:UW_KKyYV.}!Vǣy Bk5oXZ4FA(_X?R 3)%zsFdyMEEFINdXljRryn30¹̏Z4oDs|TuW.VT9{bzW75lZ\5IO&>ۖU/*MUl+_4W%:vIsɜ9Mm+ɌŤpaO69)S{kӽbJWT MKuEU>44+ZKxJО\ (Ynet'ӗKfn 8o\ƇPD]Ԇl\iy%>}@WST[)Me]ϗ`MS'6:{|3gƜɥ͇:" `h;AjXFfQ߾}9NPt1T]!P hbc;^Ek5H+Kfl̤SA% WV!@ @)l{KԑaQݻb׮fղQC <(EvQ1eay2@,,Q3[09CL㇉3Ӊl+B3e0x xゝ`je'6ۀ)XUvYԫWΝUX5 GJ햛(@:B`^~Nx/e ;L0 :OQj 5aX;6pҹU\l6f 7ѱmQ {HB0 ay;07\DE|82TO*..Œz6H! ^&ȱGƎ~u _WUT._޶Z[{/ K0q= ľ}Nvo tJ))) )WosPBX E{1=(r%l6FS0X`gׂV>5D{Q?\MPVZY7,5<#)))uBIZZD$gcԫTy?`nT*S61L0cs_"kC5lK˼ҢIiD"|w_رĻgq> t#2A 30kGeEE/'ny-sBPw~To\&f~dnȿ7TVUjT[/\tR@y^zX&KZЀӅ [e0;; zd@f{8{Opv/<|I>:|ߪU55(zNWC8h̓3g촁U6̙dL[h|LL'%WvW_ \>ͭRk/VL=a8^7k`D?w woQV]u vVVVAAOj'ra:hz\AF!dк\)p<5W/ ø88`STI$ _6)*>sl29W3tac e%-m]~~)ώ„JJҬЈ={.=6j] o{4nT6'TS< o]JzB 8T@'ƊpIPZުXוxFݱ#꒚QĮ]!$OπM.=xҥbb&T2!Ձ2Zwzerk5:~UU_#\8rx7'bÏ0E9ȁrŻ /=gTW@''cS'gm}~ڴ<,a֏sEea'=zq B" [0^3gJ}:4~ZPWǒJE9k׮m۶!"եzzz+gϞ mhhkv1`A$駟Jwg͚E ǎuoo7ohL46Za{է؁:qFkkkRد_?՟P)SB''nG-0&L@gPl.mذa͚5حn g[1ԽVTTo>|3@ɽ{Meٜwfddra/% ۫X H,d@kjj80qđt9ҥK߿c߾}-[2uy;wn^6lx.|G 2qرcSN_A%x4@1[7n@o-X>CZ?h3gΡC`Z*JPIXgPpt<|A+++RG#!ڪSNzɱ{n{{{O?>3f aĈ(MǏ<0_5J+VйlڴI԰R۷o7<) T0ϟYIm, ^t|ƌLJ޼ySo,P\ku ֭[I%ҷ(T -$7n}ڵk(H@o߾M}OZ[ej toٲ,~B,-nͣ=&ػwW_}EN<ʕ+/^B }ӧrx\~--6Pzo4Q@pF믿D\S$-[mmm-=OXfpwW^ werT(~w2JӐ!C]_QV5 }aڵhL} k9 C_ u}b Ney`9BdzI8QAYYv9U^ лAډA[ ex5#%A9YȐvJK0 Ƹa^c-'%C^LQA9E1&%Ptx* \cxKzFx ':F$ECb]56#$:ڌNj$wIx+ \Bt=hѢ"* m/dC@ Ԝ@@@ I[z/IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/10.png0000644000175000017500000000113712152724462023042 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h6h9j;l=m?oCrDsEsEtLyMyMzS~T[^`gimy}ˆÊœɖ˗˘˝ΡЧөԪխֱصڸ۽޿I tRNS2@Q(JIDATxڭR0E`ZpNh5DxF/9/iWaeIxi?ƐI"XD5;_OnǨ 5D$δo-`䍨{Pt[~?PjGsR@Pmx-!Y`QP|Z &"dh>wvU( 4?X!3rmZ>Ur\2ⓧS%M%F %+_nƇM8 w=s`\#Z;>덓8+ wIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/14.svg0000644000175000017500000000421712152724462023063 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/8.svg0000644000175000017500000001040512152724462023002 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/13.png0000644000175000017500000000113212152724462023040 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h7i9j;l@pCrDsFtIvJwLyMyR}VW`chiimquy|}‰ċőȕʦөԸ۽*d5 tRNS2@Q(JIDATxڭiS0miӦe=@(^D?hc;|IfIvYW\_8wK^HsBv23_QW@5g8eTJ0?iIM-I̬]j!ڽW;Gz6:hRςP3\t1^V`Arx86NSJb̄-%&.n^i9&Iv( "oGD >Ên+qo]ZZk4c9q_ 5)4nIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/16.png0000644000175000017500000000114412152724462023046 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h9j9k:k;l;g&f_DQ 04wҖGK!",i2QVHj f'IDV"[YꌁWv7_ xO(;&C)glkBr$juYFtƁ1yhco~8w~zE7*lIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/8.png0000644000175000017500000000107412152724462022771 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h7i8j9jnBqFtGuP|R}XYadhijpqrs}ÇÍƤѭְ״ٶ۹ܹܼݿq tRNS2@Q(JIDATxڭSRA ta%r( ʡU&dj^tz&IO`H8$M)b이呂g|2M1*dWwHq•ռD|'50ia5&~s8KK0D1TΙp#Ox9d1<IOwY/J d (c$M1π&&ʘڨhtĨ xVʕOI`۸03-i  -rIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/3.svg0000644000175000017500000000625512152724462023005 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/24.png0000644000175000017500000000116312152724462023046 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g6h7ir1Ɯ2CV冠h}bhG]dM/\b9תHF9g)f`A5Q?؄,;뺝 l9wӺpO|d;WnIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/31.png0000644000175000017500000000120012152724462023034 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j:k;l=n?o@pBqCrDsEsEtFtGuKxMyMzQ}R}VZ\^`bm{~ŠŐǕʗˣѥҪիխְZ tRNS2@Q(J IDATxڭR0Ec). 5!:+ %,%3z٢U߿g*;$f1W_Qe%D81@80 pR!>-(K `myUI( @":)0w| &YEu?NOe`zP}l)|=ꑳ7fagRn8Wνw?8㪜HIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/19.png0000644000175000017500000000117212152724462023052 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g7i8j9j;lpOw^g%iIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/4.svg0000644000175000017500000000270112152724462022776 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/36.png0000644000175000017500000000140412152724462023047 0ustar matthiasmatthiasPNG  IHDR DJPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g5h8j9j9k:k;l-poX9j܃( a1znÁ195{cJIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/33.svg0000644000175000017500000001336312152724462023066 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/30.svg0000644000175000017500000001145612152724462023064 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/32.svg0000644000175000017500000001114412152724462023060 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/19.svg0000644000175000017500000001005512152724462023065 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/warning.svg0000644000175000017500000001274412152724462024310 0ustar matthiasmatthias image/svg+xml ./Listaller-0.5.8/docs/html/Common_Content/images/21.png0000644000175000017500000000106312152724462023042 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h6h7i;l=m=n?oBqEsJwKxMyS~Z\cefgp{|ǘ˙̟ϣѭ֯װױغݽPP tRNS2@Q(JIDATxڭR0Dcf8@衇[L/lΓfHh_EdY 1~VE0<3hv)Ka!շD[AaUmy$Gy ̝cBWˏE~÷w%R!p; ./Listaller-0.5.8/docs/html/Common_Content/images/23.png0000644000175000017500000000131312152724462023042 0ustar matthiasmatthiasPNG  IHDR D)PLTE1c3f4h2e3g3e3g3f3f3f3f3f3f5g5h6h7i9j;l=m=n?o@pCrDsEsFtIvJwLyMyR}S~VWcefghiipqu{|ċŏǑȕʘ˙̟Ϧөԭ֯װױظۺݽc# tRNS2@Q(JDIDATxڭgS@$! bWDA`Æ ^PQG,3Anfߛ-5ݴmSׂm5[|H!y$U.R9Yaڡ'7A]M9[4:K 8=A@0(F-/K2^XuʅQzik~8wjAYoIENDB`./Listaller-0.5.8/docs/html/Common_Content/images/6.svg0000644000175000017500000000652112152724462023004 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/dot.png0000644000175000017500000000014212152724462023403 0ustar matthiasmatthiasPNG  IHDR TK)IDATxڅ q #GuN$)9E9g*!IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/22.png0000644000175000017500000000124412152724462023044 0ustar matthiasmatthiasPNG  IHDR DPLTE1c3f4h2e3g3e3g3f3f3f3f3f3f4g5g6h7i;l=m=n>n?oApAqCrEsGuIvJwQ}S~WY]bcefglpsy{|ǖ˘˙̛͟Ϡϧӭ֯װױسٹܺݽUp tRNS2@Q(J2IDATxڭyS0-. /TTP|{7ҙ̼̾f7%e9J 6ufQ K.M"qh.%Y,Jܟř\iϱjb+A/I6 E 1[){T> 62X'b "P 6x7E,aXc1i^)VbgEb%ޱbAa-|Aai!F̰Q7mCrȍ [}6F vXVrC{Q ٦?IENDB`./Listaller-0.5.8/docs/html/Common_Content/images/10.svg0000644000175000017500000000566612152724462023070 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/39.svg0000644000175000017500000001364512152724462023077 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/Common_Content/images/9.svg0000644000175000017500000000655212152724462023013 0ustar matthiasmatthias ./Listaller-0.5.8/docs/html/spec-deptypes-schema.html0000664000175000017500000001104112152724462022633 0ustar matthiasmatthias 5.3.3. Description file schema

Product SiteDocumentation Site

5.3.3. Description file schema

Framework and Module files are simple textfiles with the file extensions .framework or .module, depending on their type. The file contents are similar, but some elements are specific for Franeworks or Modules, e.g. only modules can have an element of the type Feed.
A Framework file may look like this:
# The KDE4 base libraries

ID: KDELibs4
Version: shell$ kde4-config --version
 prefix$ "KDE: "
Binaries: kde4-config
 kde-open
ExtraLibSearchPath: %SYS_LIB%/kde4
Libraries: kio_file.so
 libkdeui.so.5
 libsoprano.so.4
 libthreadweaver.so.4
 libsolid.so.4
The ID element defines an unique identifier for this component. Frameworks IDs start with an upper-cased letter, while Modules are lower-cased.

Warning

The documentation is not yet complete. You may want to help extending it.
./Listaller-0.5.8/docs/html/pref-Listaller-Preface.html0000664000175000017500000003232512152724462023050 0ustar matthiasmatthias Preface

Product SiteDocumentation Site

Preface

1. Document Conventions

This manual uses several conventions to highlight certain words and phrases and draw attention to specific pieces of information.
In PDF and paper editions, this manual uses typefaces drawn from the Liberation Fonts set. The Liberation Fonts set is also used in HTML editions if the set is installed on your system. If not, alternative but equivalent typefaces are displayed. Note: Red Hat Enterprise Linux 5 and later includes the Liberation Fonts set by default.

1.1. Typographic Conventions

Four typographic conventions are used to call attention to specific words and phrases. These conventions, and the circumstances they apply to, are as follows.
Mono-spaced Bold
Used to highlight system input, including shell commands, file names and paths. Also used to highlight keycaps and key combinations. For example:
To see the contents of the file my_next_bestselling_novel in your current working directory, enter the cat my_next_bestselling_novel command at the shell prompt and press Enter to execute the command.
The above includes a file name, a shell command and a keycap, all presented in mono-spaced bold and all distinguishable thanks to context.
Key combinations can be distinguished from keycaps by the hyphen connecting each part of a key combination. For example:
Press Enter to execute the command.
Press Ctrl+Alt+F2 to switch to the first virtual terminal. Press Ctrl+Alt+F1 to return to your X-Windows session.
The first paragraph highlights the particular keycap to press. The second highlights two key combinations (each a set of three keycaps with each set pressed simultaneously).
If source code is discussed, class names, methods, functions, variable names and returned values mentioned within a paragraph will be presented as above, in mono-spaced bold. For example:
File-related classes include filesystem for file systems, file for files, and dir for directories. Each class has its own associated set of permissions.
Proportional Bold
This denotes words or phrases encountered on a system, including application names; dialog box text; labeled buttons; check-box and radio button labels; menu titles and sub-menu titles. For example:
Choose SystemPreferencesMouse from the main menu bar to launch Mouse Preferences. In the Buttons tab, click the Left-handed mouse check box and click Close to switch the primary mouse button from the left to the right (making the mouse suitable for use in the left hand).
To insert a special character into a gedit file, choose ApplicationsAccessoriesCharacter Map from the main menu bar. Next, choose SearchFind… from the Character Map menu bar, type the name of the character in the Search field and click Next. The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the Copy button. Now switch back to your document and choose EditPaste from the gedit menu bar.
The above text includes application names; system-wide menu names and items; application-specific menu names; and buttons and text found within a GUI interface, all presented in proportional bold and all distinguishable by context.
Mono-spaced Bold Italic or Proportional Bold Italic
Whether mono-spaced bold or proportional bold, the addition of italics indicates replaceable or variable text. Italics denotes text you do not input literally or displayed text that changes depending on circumstance. For example:
To connect to a remote machine using ssh, type ssh username@domain.name at a shell prompt. If the remote machine is example.com and your username on that machine is john, type ssh john@example.com.
The mount -o remount file-system command remounts the named file system. For example, to remount the /home file system, the command is mount -o remount /home.
To see the version of a currently installed package, use the rpm -q package command. It will return a result as follows: package-version-release.
Note the words in bold italics above — username, domain.name, file-system, package, version and release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed by the system.
Aside from standard usage for presenting the title of a work, italics denotes the first use of a new and important term. For example:
Publican is a DocBook publishing system.

1.2. Pull-quote Conventions

Terminal output and source code listings are set off visually from the surrounding text.
Output sent to a terminal is set in mono-spaced roman and presented thus:
books        Desktop   documentation  drafts  mss    photos   stuff  svn
books_tests  Desktop1  downloads      images  notes  scripts  svgs
Source-code listings are also set in mono-spaced roman but add syntax highlighting as follows:
package org.jboss.book.jca.ex1;

import javax.naming.InitialContext;

public class ExClient
{
   public static void main(String args[]) 
       throws Exception
   {
      InitialContext iniCtx = new InitialContext();
      Object         ref    = iniCtx.lookup("EchoBean");
      EchoHome       home   = (EchoHome) ref;
      Echo           echo   = home.create();

      System.out.println("Created Echo");

      System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
   }
}

1.3. Notes and Warnings

Finally, we use three visual styles to draw attention to information that might otherwise be overlooked.

Note

Notes are tips, shortcuts or alternative approaches to the task at hand. Ignoring a note should have no negative consequences, but you might miss out on a trick that makes your life easier.

Important

Important boxes detail things that are easily missed: configuration changes that only apply to the current session, or services that need restarting before an update will apply. Ignoring a box labeled 'Important' will not cause data loss but may cause irritation and frustration.

Warning

Warnings should not be ignored. Ignoring warnings will most likely cause data loss.
./Listaller-0.5.8/docs/html/sect-Listaller-Specs-IPKFilelist.html0000664000175000017500000000537412152724462024703 0ustar matthiasmatthias 5.5. IPK file listings

Product SiteDocumentation Site

5.5. IPK file listings

File list specification

5.5.1. Rationale

Listaller needs to know which files will be stored in which directory. Because it uses directory variables, which might change, these variables also need to be encoded in a file listing.
In IPK packages, SHA-1 checksums to detect file damages (e.g. if the filesystem is broken) or possible upgrade failures are also wanted. (The checksums might also be used for security reasons)
./Listaller-0.5.8/docs/html/sect-Listaller-Packaging-Appcompile.html0000664000175000017500000000603412152724462025456 0ustar matthiasmatthias 4.2. Appcompile

Product SiteDocumentation Site

4.2. Appcompile

Appcompile is a helper program to build applications from source-code. It will automatically detect the build-system, configure it (applying the necessary flags and custom ones), then build the applicatio and install it into a user-defined directory, so Listaller can use the binaries to generate an IPK package.

4.2.1. What is Appcompile?

Appcompile is a helper program to build applications from source-code. It will automatically detect the build-system, configure it (applying the necessary flags and custom ones), then build the applicatio and install it into a user-defined directory, so Listaller can use the binaries to generate an IPK package.
Using Appcompile is completely optional, it is not required to build IPK packages. However, in many cases it might simplify build-scripts a lot.
./Listaller-0.5.8/docs/html/sect-Listaller-App-Development-RelayTool.html0000664000175000017500000000626612152724462026422 0ustar matthiasmatthias 3.3. Relaytool

Product SiteDocumentation Site

3.3. Relaytool

A program to provide a more convenient interface to dlopen/dlsym. It allows you to easily soft link to libraries.

3.3.1. What is Relaytool?

This is a program to provide a more convenient interface to dlopen/dlsym.
It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime. In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result.
If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1.
./Listaller-0.5.8/docs/html/spec-deptypes-filesystem-location.html0000664000175000017500000000557012152724462025377 0ustar matthiasmatthias 5.3.2. Dependency description locations

Product SiteDocumentation Site

5.3.2. Dependency description locations

Listaller stores the information about possible default dependencies on the filesystem, usually in /usr/share/listaller/components/.
The Framework dependencies are stored in frameworks/, while the Module dependencies are placed in modules/. The components associated with the Framework/Module info don't have to be present, since the description files contain all information how to install them.
The Modules defined in the system's modules/ folder override all Modules defined in Listaller packages which have the same name. Frameworks are never shipped in Listaller packages.
./Listaller-0.5.8/docs/html/spec-deptypes-default-frameworks.html0000664000175000017500000001030312152724462025175 0ustar matthiasmatthias 5.3.4. Frameworks

Product SiteDocumentation Site

5.3.4. Frameworks

Currently, the following Framework dependencies are shipped with Listaller by default, and packagers can reference them (the list shows their IDs):
Default frameworks
GNOME3
The GNOME-3 platform libraries.
GTK+3
The GTK+3 GUI toolkit libraries.
JRE7
The Java Runtime Environment version 7.
KDELibs4
The KDE libraries from the KDE project.
Libc6
The GNU standard C library.
Linux
Meta-framework, indicating that the software was built for GNU/Linux.
Mesa
The Mesa-3D libraries.
Python2
The Python2 scripting language.
Python
The Python3 scripting language.
Qt4Core
The core libraries of the Qt4 toolkit.
Xorg
The X.org X11 server.
./Listaller-0.5.8/docs/html/howto.html0000664000175000017500000000447012152724462017760 0ustar matthiasmatthias 4.2.2. How to use Appcompile?

Product SiteDocumentation Site

4.2.2. How to use Appcompile?

Warning

The documentation is not yet complete. You may want to help extending it.
./Listaller-0.5.8/docs/html/chap-Listaller-App-Development.html0000664000175000017500000007017612152724462024470 0ustar matthiasmatthias Chapter 3. Developing Listaller-ready applications

Product SiteDocumentation Site

Chapter 3. Developing Listaller-ready applications

We created several standalone tools, the libuild programs, that are designed to help Linux developers write better software that runs on a wider variety of distributions. Most of them are independent of Listaller itself: you can use them even if you don't provide your software using the rest of our software.

3.1. Guide to making relocatable applications

3.1.1. The problem

Listaller supports relocation. This means that a package can be installed to any location, like how Win32 installers let you choose a directory. However, most applications are not relocatable. The paths where in they search for data files are usually hardd at compile time.
On Win32, applications and libraries are easily relocatable because applications and DLLs can use GetModuleFilename() to obtain their full path.
On Linux however, no easy mechanisms exist. There is no function equivalent to GetModuleFilename(). For executables, you can still find your full location by resolving the symlink /proc/self/exe, but that won't work for libraries.

3.1.2. The solution

This is why we have developed BinReloc. BinReloc provides an easy-to-use API that uses dynamic linker and kernel magic to find out the full path of your application or library.
Highlights
  • It can be statically included in your project.
  • It's small, only about 20 KB of C source code (I suspect it's only about 10 KB if you remove all the inline documentation comments).
  • It has absolutely no dependancies other than libc.
  • It's public domain, which means you can do anything you want with the code, including relicensing it under a different license.
  • Portability to other operating systems will not be affected: BinReloc will fallback to hardcoded paths if it's running on an operating system which has no executable relocation features. You can also completely disable BinReloc with one simple macro, making your program behave exactly like when you were using hardcoded paths.
  • There are two versions of BinReloc: a plain C version, and glib version which even has a glib-style API.

Tip for KDE developers

As of April 21 2004, BinReloc-like functionality has been added to the KDE-libs, in the KStandardDirs class. If your application uses KStandardDirs to lookup data files, your application will be automatically relocatable, so using BinReloc is not necessary. Libraries however will not benefit from this, and must use BinReloc directly.

3.1.3. Hello World!

Let's begin with a BinReloc "Hello World" tutorial. We will use the plain C version of BinReloc. The glib version's API is only slightly different from the plain C API, so don't worry about the API differences. In this tutorial, our imaginary developer, Joe, will show you everything he does when writing the Hello World program.
  1. Generate BinReloc source files
    Joe downloads the BinReloc SDK from the Listaller Tools section of the download page. He extracts the archive in his home folder. A folder called binreloc-2.0 appears.
    [joe@localhost /home/joe]$ tar xzf binreloc-2.0.tar.gz
    [joe@localhost /home/joe]$ cd binreloc-2.0</div>
    
    Joe's Hello World program doesn't use glib, so he wants the plain C version of BinReloc. Joe runs the following commands to generate the BinReloc source files:
    [joe@localhost /home/joe/binreloc-2.0]$ ./generate.pl normal
    Source code written to 'binreloc.c'
    Header written to 'binreloc.h'
    [joe@localhost /home/joe/binreloc-2.0]$ mkdir ~/helloworld
    [joe@localhost /home/joe/binreloc-2.0]$ mv binreloc.c binreloc.h ~/helloworld/</div>
    
  2. Write the program
    Now that Joe has generated the BinReloc source files, he continues with writing a Hello World program:
    #include <stdio.h>
    #include "binreloc.h"
    #ifndef NULL
        #define NULL ((void *) 0)
    #endif
    
    int main () {
        BrInitError error;
    
        if (br_init (&error) == 0 && error != BR_INIT_ERROR_DISABLED) {
            printf ("Warning: BinReloc failed to initialize (error code %d)\n", error);
            printf ("Will fallback to hardcoded default path.\n");
        }
    
        printf ("The full path of this application is: %s\n", br_find_exe ("default fallback path"));
        return 0;
    }
    
    He saves this file as /home/joe/helloworld/hello.c.
  3. Compile & run
    Now it is time to compile & run the program:
    [joe@localhost /home/joe/helloworld]$ gcc -DENABLE_BINRELOC hello.c binreloc.c -o hello
    [joe@localhost /home/joe/helloworld]$ ./hello
    The full path of this application is: /home/joe/helloworld/hello
    
    Yes, it's this easy!

    How to disable BinReloc

    The -DENABLE_BINRELOC argument enables BinReloc support. BinReloc is only enabled if this macro is defined. Let's take a look at what happens if the macro is not defined:
    [joe@localhost /home/joe/helloworld]$ gcc hello.c binreloc.c -o hello
    [joe@localhost /home/joe/helloworld]$ ./hello
    The full path of this application is: default fallback path
    

3.1.4. Initialization

BinReloc must be initialize by calling one of the BinReloc initialization functions:
If you're using BinReloc in an application, then call br_init(). The definition is:
int br_init (BrInitError *error);
This function returns 1 on success, and 0 if BinReloc failed to initialize. If BinReloc failed to initialize, then the error code will be stored in error. The following error codes are available:
typedef enum {
        /* Cannot allocate memory. */
        BR_INIT_ERROR_NOMEM,
        /* Unable to open /proc/self/maps; see errno for details. */
        BR_INIT_ERROR_OPEN_MAPS,
        /* Unable to read from /proc/self/maps; see errno for details. */
        BR_INIT_ERROR_READ_MAPS,
        /* The file format of /proc/self/maps is invalid; kernel bug? */
        BR_INIT_ERROR_INVALID_MAPS,
        /* BinReloc is disabled. */
        BR_INIT_ERROR_DISABLED
} BrInitError;

If you're using BinReloc in a library, then call br_init_lib(). The definition is: int br_init_lib (BrInitError *error);
This function returns 1 on success, and 0 if BinReloc failed to initialize.
If you don't initialize BinReloc, or if initialization failed, then all BinReloc functions will return the fallback paths, so even if initialization failed, it's not fatal. Initialization will fail if BinReloc is disabled (because ENABLE_BINRELOC is not defined), or because the application is running on a platform which doesn't support relocating executables (non-Linux platforms).

3.1.5. Basic usage

There are more functions besides br_find_exe(). Here is a list of all relocation functions:
Table 3.1. Relocation functions
Function Returns
br_find_exe()
The full path of your application or library.
br_find_exe_dir()
The folder in which your application or library is located.
br_find_prefix()
The prefix in which your application or library is located. This function assumes that your binary is located inside an FHS-compatible directory structure ($prefix/bin/ or $prefix/lib/). Examples:
  • Your binary is /usr/bin/foo. It will return /usr.
  • Your library is /usr/local/lib/libfoo.so. It will return /usr/local.
  • Your binary is /Applications/CoolApp2040XP/CoolApp. It will return /Applications".
So basically, it returns dirname(executable_filename) + "/.."
br_find_bin_dir()
PREFIX + "/bin"
br_find_sbin_dir()
PREFIX + "/sbin"
br_find_data_dir()
PREFIX + "/share"
br_find_locale_dir()
PREFIX + "/locale"
br_find_lib_dir()
PREFIX + "/lib"
br_find_libexec_dir()
PREFIX + "/libexec"
br_find_etc_dir()
PREFIX + "/etc"

All functions in the above table are declared like this: char *br_find_something (const char *default_path);
default_path is used as fallback: if the BinReloc isn't initialized, or failed to initialize, then a copy of default_path will be returned. Or if the default_path is NULL, NULL will be returned.

Warning

Note that the return values of all of the above functions must be freed when no longer necessary, except if the return value is NULL.
All BinReloc functions have inline documentation! So just take a look at binreloc.c if you need more info about a certain function.

3.1.6. GLib-style API

There's also a BinReloc version with a glib-style API. Generating this version is just like generating the normal version:
[joe@localhost /home/joe/binreloc-2.0]$ ./generate.pl glib
Source code written to 'binreloc.c'
Header written to 'binreloc.h'
The API is almost identical to the plain C version, except that it uses glib-style names and glib data types, such as GError. See the full API reference.

3.1.7. Useful utility functions

The plain C version of BinReloc provides some utility functions for modifying strings and paths, because many applications will need such functionality. The GLib version doesn't contain these utility functions because GLib already has its own utility functions. Note that these utility functions are fully portable, and can be used even when BinReloc is not enabled/initialized.
char *br_strcat (const char *str1, const char *str2);
  • str1: A string.
  • str2: Another string.
  • Returns: A newly-allocated string. This string should be freed when no longer needed.
Concatenate str1 and str2 to a newly allocated string.
Example:
char *datafile;

datafile = br_strcat ("/usr", "/foo/mydata.txt");
load_data_file (datafile);
free (datafile);</pre>

3.1.8. Autoconf/Automake build system integration

Most Autoconf/Automake projects use macros that define a hardcoded path. Let's take a look at this piece of code as example.
In Makefile.am:
INCLUDES = $(LIBGLADE_CFLAGS) \
           -DDATADIR=\"$(datadir)\"

bin_PROGRAMS = foo
foo_SOURCES = main.c
In main.c:
xml = glade_xml_new (DATADIR "/foobar/glade/main.glade", NULL, NULL);
How to use BinReloc:
  1. Use the special BinReloc Autoconf Macro (binreloc.m4). This file can be found in the BinReloc SDK.
    Append the contents of binreloc.m4 to acinclude.m4 (which is in the same folder as configure.in). Create acinclude.m4 if it doesn't exist.
    In configure.in, put the command AM_BINRELOC somewhere.
    The AM_BINRELOC macro checks whether BinReloc should be enabled (whether the system supports the feature, whether the user explicitly disabled it, etc). The variable $br_cv_binreloc will be set to 'yes' if BinReloc is enabled, or 'no' otherwise.
  2. Copy binreloc.c and binreloc.h to your source code directory.
  3. Add BINRELOC_CFLAGS and binreloc.c/binreloc.h to Makefile.am:
    AM_CPPFLAGS = $(BINRELOC_CFLAGS)
    ...
    foo_SOURCES = main.c <span class="highlight">\
                  binreloc.h \
                  binreloc.c
    
  4. At the beginning of main.c, add:
    #include "binreloc.h"
    Somewhere in main.c:
    gchar *dir, *file;
    
    gbr_init (NULL);
    dir = br_find_data_dir (DEFAULT_DATA_DIR);
    file = g_strdup_printf ("%s/foobar/glade/main.glade", dir);
    g_free (dir);
    
    xml = glade_xml_new (file, NULL, NULL);
    g_free (file);
    
And that was it! Your configure script will now have a --enable-binreloc=[yes/no/auto] option. The default value for this option is --enable-binreloc=auto, which will automatically check whether BinReloc support is desired. It does so by checking for the following things:
  • Whether /proc/self/maps is available.
  • Whether the user told configure to use a different location for a specific directory, such as by passing --bindir=/foo/bin.
Users can always disable BinReloc manually by passing --disable-binreloc to the configure script.

3.1.9. KDE integration

Note to KDE developers

As of April 21 2004, BinReloc-like functionality has been added to the KDE-libs, in the KStandardDirs class. If your application uses KStandardDirs to lookup data files, your application will be automatically relocatable, so using BinReloc is not necessary. Libraries however will not benefit from this, and must use BinReloc directly.
In your program's initialization function, add the following code:
KGlobal::dirs()->addPrefix(br_find_prefix(DEFAULT_PREFIX));
Make sure you use KGlobal::dirs() to lookup data files througout your entire program. If you create new instances of KStandardDirs, you need the re-add the prefix.
If you want to use KIconLoader to load icons from whever your program is installed, add this:
KGlobal::iconLoader()->addAppDir(br_find_data_dir(DEFAULT_DATA_DIR));

3.1.10. Full API reference

... will be available very soon!

3.1.11. More examples

The contrib/binreloc/tests folder in the Listaller source tarball contains more examples about how to use BinReloc.
./Listaller-0.5.8/docs/html/chap-Listaller-Enduser.html0000664000175000017500000001673412152724462023075 0ustar matthiasmatthias Chapter 2. End-user documentation

Product SiteDocumentation Site

Chapter 2. End-user documentation

Information for on how to handle Listaller and applications installed using Listaller from a non-technical point of view.

2.1. Installing IPK packages

Learn how you can install an IPK package.

2.1.1. Installing packages (GUI method)

Installing Listaller packages is really easy. Just make sure you have Listaller installed, then follow the steps below.
  1. Download an IPK package or get it from somewhere else.
  2. Open the IPK-package with your PackageKit package installer (Apper or GNOME-PackageKit). If a Listaller frontent is installed, simply double/single-clicking the package file should already launch the right application.
  3. After the package is opened, just follow the instructions on screen to install it.
  4. The application is now installed. You should be able to launch it via you application-menu. (Plasma, GNOME-Shell, KRunner, …) If there have been problems making the setup work for you, please file a bug against Listaller so we can fix it.
Listaller uses a system based on GPG-keys and some other values to check if a package can be trusted, as 3rd-party applications can come from any source and it is not certain that they won't contain malicious software.
The system administrator has set a minimum trust level for packages. If your package is below this level, you will not be able to install the package. By default, unsigned packages can never be installed without lowering the minimum security level.
If you have troubles installing an application because of this, you can temporarily change the minimum trust in Listaller's config file, or speak to your system administrator.

2.1.2. Installing packages (CLI method)

There are many ways to install an IPK package via the command line. We encourage you to use the lipa application, which is shipped with Listaller, but you could also use pkcon, the PackageKit command-line tool.

2.1.2.1. Install using lipa

To install the package using lipa, just use the following command:
				[earth@sun] lipa --install ./packagename_version.ipk
lipa will then guide you through the rest of the installation process.

2.1.2.2. Install using pkcon

Warning

You should generally prefer using lipa over pkcon, since lipa was specially designed for use with Listaller, while pkcon is just a command-line PackageKit client, which does not support stuff like Listaller's signature-checking, licenses or private installations.
To install the package using pkcon, you can just do the same as you would do when installing a native distribution package:
				[earth@sun] pkcon install-local ./packagename_version.ipk
PackageKit will then perform a shared installation of the Listaller package.
./Listaller-0.5.8/docs/html/chap-Listaller-ManualPages.html0000664000175000017500000006532312152724462023663 0ustar matthiasmatthias Chapter 6. Manual pages

Product SiteDocumentation Site

Chapter 6. Manual pages

appcompile — Compile software automatically
depscan — Detect binary dependencies
lig++ — Wrapper around g++ to create more portable apps
ligcc — Wrapper around gcc to create more portable apps
likey — Manage Listaller's key database
lipa — Listaller command-line tool
lipkgen — Listaller package builder
relaytool — Generate a file that can be used instead of linking directly against a library
runapp — Run an application

Name

appcompile — Compile software automatically

Synopsis

appcompile [OPTION ...]

Description

This manual page documents briefly the appcompile command.
appcompile automatically compiles applications from source code. It will detect the build system (cmake, automake, ...) and then perform the necessary steps to generate the binary. appcompile can be used together with libuild, the Listaller build tool, to compile applications easily.

Options

-s, --sourcedir=DIRECTORY
Path to source of the application which should be compiled.
-o, --target_dir=DIRECTORY
Path where the resulting binaries should be installed to.
--strip
Strip debug information from resulting binaries.
--version
Display version number of appcompile
--verbose
Turn on verbose mode (this can be used for debugging).

See Also

lipkgen (1), depscan (1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

depscan — Detect binary dependencies

Synopsis

depscan [OPTION ...]

Description

This manual page documents briefly the depscan command.
depscan reads library dependencies of binary files in a directory and ouputs them in form of a list.

Options

-r, --recursive
Search for binaries in recursive mode.
--out-simpletext
Output simple, machine-readable text.
-c, --out-components
Output dependencies as Listaller components (versioned, if version could be determined).
--version
Display version number of depscan
-v, --verbose
Turn on verbose mode (useful for debugging purposes).

See Also

lipkgen (1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

lig++ — Wrapper around g++ to create more portable apps

Synopsis

lig++ [OPTION ...]

Description

This manual page documents briefly the lig++ command.
lig++ is a wrapper around ligcc. It allows you to create more portable executables, see the ligcc manual page for more information.

Options

See the manpage of g++(1) for more information about possible options.
There are also several environment variables available to modify lig++'s behavior check the documentation for more information.

See Also

libuild (1), ligcc(1), gcc(1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

ligcc — Wrapper around gcc to create more portable apps

Synopsis

ligcc [OPTION ...]

Description

This manual page documents briefly the ligcc command.
ligcc is a wrapper around gcc. It allows you to create more portable executables by doing three things:
  • Forces the linker to link against older glibc symbols. Users who are using an older version of glibc will no longer get "undefined symbol GLIBC_2.4 in /lib/libc.so"-style error messages.
  • Allows you to easily statically link to any other library.
  • Automatically removes bogus dependencies. For example, your program uses libfoo. libfoo uses libpng internally, but your app does not. Yet the pkg-config file for libfoo specifies "-lfoo -lpng" is linker parameters. And tadaa - you now have a bogus dependency on libpng! LiGCC automatically removes the -lpng for you if your app doesn't use libpng directly.
  • Add $ORIGIN/../lib to the binary's library search path. $ORIGIN is the directory in which the binary exists. This ensures that your binary can find library dependencies which are placed in the 'lib' folder under the same prefix. You might want to install custom libraries into /lib. If you set $APBUILD_PROJECTNAME, ligcc will also add $ORIGIN/../lib/$APBUILD_PROJECTNAME to the library search path.

Options

See the manpage of gcc(1) for more information about possible options.
There are also several environment variables available to modify ligcc's behavior check the documentation for more information.

See Also

lig++ (1), gcc(1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

likey — Manage Listaller's key database

Synopsis

likey {COMMAND} [OPTIONS ...]

Description

This manual page documents briefly the likey command.
likey allows administrators to manage Listaller's database of trusted GPG keys.

Options

-l, --lookup PATTERN
Look for key matching PATTERN in the key database.
-i, --import FPR
Import public key with the given fingerprint from a public keyserver.
-v, --version
Display version number of likey
--verbose
Turn on verbose mode (this can be used for debugging).

See Also

runapp (1), lipa (1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

lipa — Listaller command-line tool

Synopsis

lipa {COMMAND} [OPTIONS ...]

Description

This manual page documents briefly the lipa command.
lipa is a simple tool to control Listaller using a command-line interface. It allows modifying basic settings, installing new applications, removing applications, requesting information about Listaller's database state and performing other maintenance tasks.

Options

-i, --install IPKPACKAGE
Install a new application from a distro-independent IPK package.
-r, --remove APPIDENTIFIER
Remove an application which mathes the given name or application-id.
-l, --list-apps, --all
List applications installed using Listaller.
To include all other applications too, the --all flag can be appended.
--version
Display version number of lipa
--verbose
Turn on verbose mode (this can be used for debugging).

See Also

runapp (1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

lipkgen — Listaller package builder

Synopsis

lipkgen {-b} [OPTION ...]

Description

This manual page documents briefly the lipkgen command.
lipkgen is a simple tool to build IPK application packages directly from software sources or binary files using a package recipe.

Options

-b, --build
Build IPK package using the IPK source files in the ipkinstall folder in current directory.
-s, --sourcedir=DIRECTORY
Set the IPK package source directory.
-o, --outdir=DIRECTORY
Set an output path were the resulting package should be saved.
--sign
Sign the resulting package with your GPG key.
--version
Display version number of lipkgen
--verbose
Turn on verbose mode (this can be used for debugging).

See Also

runapp (1), lipa(1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

relaytool — Generate a file that can be used instead of linking directly against a library

Synopsis

relaytool [OPTION ...] [LINKER COMMAND ...]

Description

This manual page documents briefly the relaytool command.
relaytool is a program to provide a more convenient interface to dlopen/dlsym. It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime.
In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result. If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1.

Options

--relay LIB
If a matching -lLIB is found, generate a file that can be used instead of linking directly to LIB. The name of the file is echoed on stdout. Multiple --relay can be used together, a file will be generated for each matching ones.
--replace-all-libs
Generate a file for every -lLIB parameter.
--minimal-list OBJ_LIST
Will look in OBJ_LIST for undefined symbols, and generate a file creating only the needed symbols for each LIB.
--partial-map MAP_FILE
Generate a file creating only the symbols contained in MAP_FILE. Will apply to all further -lLIB parameters, so in general is not suitable to multiple libs in the same invocation of relaytool.
--no-replace
Echo -lLIB on stdout even if a --relay LIB is found, so it'll be linked in normally.
--multilink [SONAMES...]
If a library has different SONAMES on different Linux distributions you can specify the various SONAMES that it's known by here. Relaytool will attempt to load them (in the order provided) until one if found. This cannot be used with multiple --relay options. The first SONAME in the list will be used as the name in the _is_present variable and _symbol_is_present function.
--out-dir DIRECTORY
Write stub file to DIRECTORY instead of CWD.

Linker commands

-LPATH
Add PATH to the list of paths to search for LIBs.
-lLIB
If a matching --relay LIB is found (or if --replace-all-libs is specified), generate a file that can be used instead of linking directly to LIB. If there's no --relay LIB, echo -lLIB to stdout.
All other linker commands are passed as is to stdout.

Other commands

-h, --help
Show some help.
--version
Display version information of relaytool

See Also

lipkgen (1), ligcc(1), gcc(1).
Additional documentation can be found on http://listaller.tenstral.net/wiki/doku.php/relaytool.

AUTHOR

This manual page was written by Matthias Klumpp .

Name

runapp — Run an application

Synopsis

runapp {APPNAME}

Description

This manual page documents briefly the runapp command.
runapp runs applications installed using Listaller. It will set the application environment, initiate a sanbox and do everything else needed to run the application. runapp can also execute every other application found on the system, even those which were not installed using Listaller.

Options

--version
Display version number of runapp
--verbose
Turn on verbose mode (this can be used for debugging).

See Also

lipa (1).
Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .
./Listaller-0.5.8/docs/html/sect-Listaller-Specs-DirVariables.html0000664000175000017500000000652312152724462025130 0ustar matthiasmatthias 5.2. Directory variables

Product SiteDocumentation Site

5.2. Directory variables

Information about directory variables used by Listaller

5.2.1. What are directory variables?

Directory variables are used in IPK setup files, to allow Listaller to dynamically place the files in different directories, based on user's decisions or settings done by the distributor.
All IPK packages should use only directory sibstvars. However, in some cases it might be necessary to specify exact directory names. Packages not using directory variables can only be installed in shared mode for all users, temporary or private installations aren't possible. Also Listaller will lower the security level of these applications, because they can write into system directories and therefore could do malicious things.
Directory variables start and end with a % sign and are replaced with their value during the software installation process. They are usually found in file-lists of Listaller packages, but might be used in other places too.
./Listaller-0.5.8/docs/html/ix01.html0000664000175000017500000000324712152724462017402 0ustar matthiasmatthias Index

Product SiteDocumentation Site

Index

./Listaller-0.5.8/docs/html/chap-Listaller-Goals.html0000664000175000017500000001362512152724462022531 0ustar matthiasmatthias Chapter 1. Project Goals

Product SiteDocumentation Site

Chapter 1. Project Goals

This is a brief summary of the Listaller project goals. For the Listaller specifications, please see Chapter 5, Specifications
Listaller's design goal is to create an installer solution which is able to install software on multiple distributions by using just one package. It is no replacement for the package management system of a Linux distribution (like Debian, Fedora, OpenSUSE, ...), it is merely designed to install additional 3rd-party applications which are not part of the main distribution repositories and do not require tight system integration. Dependencies of software installed with Listaller should therefore be kept minimal, to simplify installations.
The main target audience for Listaller are GUI desktop users who want to install graphical applications (= software which provides a XDG application desktop file). But Listaller is not limited to that, it might also be used to install non-gui stuff on servers, although this case is rarely used at time.
Listaller is developed with the following goals in mind:
  • System Integration: Software installed with Listaller should integrate well with the operating system, while not interfering with it. Listaller applications should be manageable using the general software management tools which the user already knows. Situations where an user has to open one tool to manage just a subset of his/her applications must be avoided. We also give distributors all necessary tools to make Listaller working for their distribution and integrate it nicely into the system and adjust it to the individual dustribution policies (as long as these changes do not break distro-interoperability).
  • Cross-Distro: Listaller should work on all distributions, software packaged as Listaller IPK package should be installable on every distribution, as long as it's dependencies are satisfyable. People creating IPK packages should be able to target the whole audience of Linux users, not just a single distribution.
  • Security: Installing 3rd-party applications which were not checked by the distributor might be a security issue. We therefore give the administrator an option to shut off 3rd-party installs or limit them to some users. Also, Listaller should display meaningful information to help the user in making a decision to trust the application which is pending install, or to reject it. IPK packages can and should be signed. Listaller should run 3rd-party applications in a sandbox by default.
  • Simplification: Creating Listaller packages should be as easy as possible. IPK packages are built on existing standards, like DOAP, which makes it simple to use existing data for packaging. Also, there should not be corner-cases which cause an installation to fail, so package definitions should be straighforward and script-less, which also increases security. All complexity should be handled by functions built-in Listaller.
  • Developer Tools: We provide tools for developers to make their applications work on many distributions and to minimize the dependencies of an application.
(This list might be extended or changed if necessary)
Listaller is designed to work well with PackageKit and AppSteam to provide a great and user-friendly application-centric software management on Linux distributions. PackageKit is a dependency of Listaller, while AppStream is optional for it's use, but recommended.
./Listaller-0.5.8/docs/html/spec-repo-directories.html0000664000175000017500000001003212152724462023016 0ustar matthiasmatthias 5.6.2. Directory overview

Product SiteDocumentation Site

5.6.2. Directory overview

Repositories consist of a directory structure, containing the following directories:

  /                                                 - root
  |-- reposetting                                   - basic repository settings (MetaFile format)
  |-- contents_amd64.xz                             - contents of this repository (MetaFile format), arch-specific
  |-- contents_ix32.xz
  |-- [apps]
  |   |-- [pool]                                    - contains the package data
  |   |   |-- [appid1]                              - directory named like project's application-id (using AppItem appid)
  |   |   |   |-- changelog                         - software changelog
  |   |   |   |-- appid1-1.4_amd64.ipk              - IPK package to install
  |   |   |   |-- appid1-1.4_ix32.ipk
  |   |   |   |-- (?)appid1.doap                    - optional: application DOAP data (RDF)
  |   |   |   |-- [delta]                           - directory with package deltas
  |   |   |   |   |-- [amd64]                       - architecture dir
  |   |   |   |   |   |-- appid-1.0-to-1.4.deltaipk - deltaIPK packages
  |   |   |   |   |   |-- ...
  |   |   |   |   |-- [ix86]
  |   |   |   |   |-- [all]                         - data for all architectures
  |   |   |-- [appid2]
  |   |-- [meta]                                    - directory for metadata (icons/AppStream info)
  |-- [deps]
  |   |-- [feeds]                                   - contains the dependency feed files
  |   |-- [data]                                    - contains dependency-data (if necessary)
  |   |   |-- [ix32]
  |   |   |-- [amd64]
  |   |   |-- [all]
This directory structure can be placed on a server and referenced via an URL.
Listaller provides the lirepo command-line tool to generate new (local) Listaller repositories, and to update them with new software versions.
./Listaller-0.5.8/docs/html/sect-Listaller-Specs-DepTypes.html0000664000175000017500000000675412152724462024324 0ustar matthiasmatthias 5.3. Dependency types

Product SiteDocumentation Site

5.3. Dependency types

Description of dependency separation and handling in Listaller

5.3.1. Rationale

Listaller distinguishes between so-called Framework-dependencies and Module-dependencies to simplify dependency-solving and to reflect the organization of packages on a Linux system.
While Frameworks are provided by the distributor and are hard-wired into the system, Modules can be installed by Listaller from 3rd-party sources.
In an ideal world, packages only depend on Frameworks, but currently it might sometimes be necessary to pull Modules from 3rd-party sources (of course Listaller will query the distribution's package database for the Module-dependency, before pulling it from somewhere else).
Modules and Frameworks are described in small textfiles, which are shipped with Listaller. Module dependencies may also be present in Listaller packages. If some description files are missing, please file a bug report against Listaller, requesting inclusion by default.
./Listaller-0.5.8/docs/html/sect-Listaller-Enduser-AppRemoval.html0000664000175000017500000000637112152724462025160 0ustar matthiasmatthias 2.2. Removing IPK packages

Product SiteDocumentation Site

2.2. Removing IPK packages

Information how you can remove a Listaller application.

2.2.1. Removing packages

Warning

The documentation is not yet complete. You may want to help extending it.
If you want to uninstall the software, you can use any PackageKit frontend to remove it, if you installed the application in “shared mode” as superuser. Otherwise, you need a Listaller-tool to remove it, e.g. limanager-gtk on GNOME. Just click uninstall and you're done.
The lipa CLI tool is also able to remove Listaller packages, just use the --remove option instead of --install, and specify the application name or ID.
./Listaller-0.5.8/docs/html/sect-Listaller-Packaging-Depscan.html0000664000175000017500000000643312152724462024745 0ustar matthiasmatthias 4.3. Depscan - Scan for software dependencies

Product SiteDocumentation Site

4.3. Depscan - Scan for software dependencies

Depscan scans ELF executables' library dependencies and generates a nice report for you. This makes it easier to find out what your software's, dependencies are. Listaller uses this tool at build-time to generate the automatic dependency-list, but you may use it as well to find out why an application has dependency X.

4.3.1. What is Depscan?

Depscan scans ELF executables library dependencies and generates a nice dependency report for you. This makes it easier to find out what your software's, dependencies are.
Listaller uses this tool at build-time to generate the automatic dependency-list, but you may use it as well to find out why an application has dependency X. It will also show you immediately if you are using Franmeworks which are present on the system, or if you use Modules which can not be satisfied automatically.
Depscan will later be extended to support dependency-detection for other languages, e.g. Python/Ruby too.
./Listaller-0.5.8/docs/html/spec-dirvars-variable-list.html0000664000175000017500000001307112152724462023753 0ustar matthiasmatthias 5.2.2. List of Listaller directory variables

Product SiteDocumentation Site

5.2.2. List of Listaller directory variables

Here you can find a full list of Listaller directory variables.
The first row contains the variable name, the second one it's description. The "Default (shared)" and "Default (private)" columns show the values these variables might have in a shared or private installation. This does not mean these variables will always have the value described here!
<appid> is your application-ID.
Table 5.1. Listaller dir variables
Variable Description Default (shared) Default (private)
%INST%
The software installation directory, which is automatically generated by Listaller.
/opt/apps/<appid>
~/.appdata/<appid>
%APP%
The application directory (where .desktop-files are placed)
/usr/share/applications
~/.local/share/applications
%LIB_PRIVATE%
Directory for private libraries (should usually not be necessary)
/opt/apps/<appid>/_libs
~/.appdata/<appid>/_libs
%PIX%
Pixmap directory.
/usr/share/pixmaps
~/.local/share/icons
%ICON-<?>%
Directory for application icons associated with the application's desktop-file. Values for <?> can be 16, 24, 32, 48, 64, 128 or 256.
/usr/share/icons/hicolor/<?>x<?>/apps
~/.local/share/icons/hicolor/<?>x<?>/apps

./Listaller-0.5.8/docs/html/sect-Listaller-App-Development-Ligcc.html0000664000175000017500000001142612152724462025523 0ustar matthiasmatthias 3.2. The Ligcc tools

Product SiteDocumentation Site

3.2. The Ligcc tools

Unlike Windows, Linux generally does not support "build on newer, run on older" development. In other words, the process of compiling the same program on an older system and a newer system can produce different binaries with different requirements.

3.2.1. What is ligcc?

Ligcc is a wrapper around gcc. It allows you to create more portable executables by doing three things:
  • Forces the linker to link against older glibc symbols. Users who are using an older version of glibc will no longer get
    undefined symbol GLIBC_2.4 in /lib/libc.so
    -style error messages.
  • Allows you to easily statically link to any other library.
  • Automatically removes bogus dependencies. For example, your program uses libfoo. libfoo uses libpng internally, but your app does not. Yet the pkg-config file for libfoo specifies -lfoo -lpng is linker parameters. And tadaa - you now have a bogus dependency on libpng! Ligcc automatically removes the -lpng for you if your app doesn't use libpng directly.

    Important

    It is recommended that you use binutils 2.15.94 or later to compile programs, recent versions of ld support the –as-needed argument, which does a much better job than our own dependency stripper, and is faster too.
  • Add $ORIGIN/../lib to the binary's library search path. $ORIGIN is the directory in which the binary exists. This ensures that your binary can find its library dependencies if they are placed in the 'lib' folder under the same prefix. You can drop any dependency library you want in $PREFIX/lib/. Your binary can find those libraries without messing with $LD_LIBRARY_PATH.
  • If you set $LIBUILD_PROJECTNAME, ligcc will also add $ORIGIN/../lib/$LIBUILD_PROJECTNAME to the library search path.
./Listaller-0.5.8/docs/html/relaytool-howto.html0000664000175000017500000001501512152724462021765 0ustar matthiasmatthias 3.3.2. How to use Relaytool?

Product SiteDocumentation Site

3.3.2. How to use Relaytool?

Replace -lfoo in your link line with relaytool –relay foo -lfoo, assuming libfoo is in the standard search path (/lib/, /usr/lib, /usr/local/lib). You can pass entire gcc linker lines to Relaytool, and it will interpret them accordingly. Most options will be passed through unchanged onto stdout, but -lfoo options that have a preceeding –relay foo argument will trigger stub generation and compilation.
Note that Relaytool will invoke $CC (or gcc if it's not set) to compile the stub file silently. You will not see any output.
Alternatively, you can use the –replace-all-libs option to cause Relaytool to generate a stub file for every library given in a -lfoo directive.
Because Relaytool parses linker options, you can feed the output of pkg-config and other config scripts to it:
			[earth@sun] relaytool --relay gtkspell `pkg-config --libs gtkspell-2.0`
The above produces something like this, for example:
			-Wl,--export-dynamic -L/opt/gnome26/lib libgtkspell.so.0.0.0.stub.o -laspell -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0
		       -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
Note how -lgtkspell was replaced with libgtkspell.so.0.0.0.stub.o
On architectures that Relaytool does not support, the -l is passed through along with a couple of defines to provide libfoo_is_present and libfoo_symbol_is_present.

Important

Ensure CFLAGS=”-fPIC” if the library exports variables, as GOT fixup requires your program to use PIC code.
If you want to use Relaytool only for part of a shared library (for instance to make use of symbols available in newer versions only) you can use the –partial-map feature. To use this create a file with a line for each symbol, with F for function or V for variable in the first column, like so:
In file foo.relaymap:
F some_function
V some_variable
then run:
			[earth@sun] relaytool --partial-map foo.relaymap --relay whatever -lwhatever
If you want to hard link to a library but soft link to a few symbols, you can use –partial-map and –no-replace.

Note

–partial-map is currently incompatible with multiple –relay libraries on the same command line. You'll have to separate your libraries in different Relaytool calls.
If you want Relaytool to only generate the symbols required by your code and not the whole list exported by a library, you can use the –minimal-list feature. It takes as argument the list of your object files, from which it derives which symbols for each library are actually needed. For example:
			[earth@sun] relaytool --minimal-list "foo.o bar.o" --relay mylib -lmylib
This will generate a file exporting only the symbols used in foo.o and bar.o actually found in mylib instead of the complete list of symbols exported from mylib, which can mean big space savings in the final executable.
./Listaller-0.5.8/docs/html/chap-Listaller-Specs.html0000664000175000017500000001523512152724462022540 0ustar matthiasmatthias Chapter 5. Specifications

Product SiteDocumentation Site

Chapter 5. Specifications

Listaller uses various file-formats and many specifications. Here you can find a description of them.
You can also learn about the idea of Listaller and the project plan.

5.1. Architecture naming policy

How Listaller treats architecture names

5.1.1. What are architecture names?

Architecture names are strings like "x86_64" or "i686" which define the system-architecture of the current computer.
Compiled programs can only run on the architecture they are built for. Therefore Listaller packages also need to be arch-specific. Unfortunately, there are quite a few architecture names around, e.g. for 64bit-PCs the vendor-neutral name "x86_64" or "amd64". For historical and compatibility reasons, Listaller uses the naming conventions described below.

5.1.2. Architecture names

Listaller uses the output string of the uname -m command for nearly all architectures, except for 32bit-PC and 64bit-PC architectures.
For AMD's 64bit architecture, with the name "x86_64" or "amd64", we use the vendor-name amd64. Listaller will only use and recognize this name.
For Intel's x86 architecture (names like "i386, "i486", "i686", ...) we use the name ix86. No other names are processed.
For any other architecture, no special name changes are applied and we use the name which is exposed by the Linux kernel.
./Listaller-0.5.8/docs/api/0000755000175000017500000000000012176743564015542 5ustar matthiasmatthias./Listaller-0.5.8/docs/api/html.stamp0000664000175000017500000000001212176743562017545 0ustar matthiasmatthiastimestamp ./Listaller-0.5.8/docs/api/listaller.interfaces0000664000175000017500000000022112150512750021556 0ustar matthiasmatthiasGeeAbstractCollection GeeIterable GeeCollection GeeAbstractList GeeIterable GeeCollection GeeList GeeArrayList GeeIterable GeeCollection GeeList ./Listaller-0.5.8/docs/api/listaller.signals0000664000175000017500000000225312110036276021102 0ustar matthiasmatthias ListallerManager::application void l ListallerManager *listallermanager ListallerAppItem *arg1 ListallerManager::status-changed void l ListallerManager *listallermanager ListallerStatusItem *arg1 ListallerMessageObject::error-code void l ListallerMessageObject *listallermessageobject ListallerErrorItem *arg1 ListallerMessageObject::message void l ListallerMessageObject *listallermessageobject ListallerMessageItem *arg1 ListallerMessageObject::progress void l ListallerMessageObject *listallermessageobject ListallerProgressItem *arg1 ListallerSetup::status-changed void l ListallerSetup *listallersetup ListallerStatusItem *arg1 ListallerUpdater::update void l ListallerUpdater *listallerupdater ListallerUpdateItem *arg1 ./Listaller-0.5.8/docs/api/listaller.prerequisites0000664000175000017500000000014012150512750022337 0ustar matthiasmatthiasGeeIterable GObject GeeCollection GeeIterable GObject GeeList GeeIterable GeeCollection GObject ./Listaller-0.5.8/docs/api/ccomments/0000755000175000017500000000000012150512741017511 5ustar matthiasmatthias./Listaller-0.5.8/docs/api/ccomments/version.c0000664000175000017500000000133212176743546021364 0ustar matthiasmatthias/** * listaller_get_version_info_str: * @self: the (null) instance * * Get string describing Listaller's version number. * * Returns: Listaller version string */ /** * listaller_get_full_version_info_str: * @self: the (null) instance * * Get string describing Listaller's version number. This function will return a more detailed description of Listaller's version and the OS it's running on. * * Returns: detailed Listaller version string */ /** * listaller_compare_versions: * @self: the (null) instance * @a:   * @b:   * * compare alpha and numeric segments of two versions * * Returns: 1: a is newer than b 0: a and b are the same version -1: b is newer than a */ ./Listaller-0.5.8/docs/api/ccomments/setup-settings.c0000664000175000017500000001344012176743546022700 0ustar matthiasmatthias/** * SECTION:setup-settings * @short_description: Class to store settings of a IPK setup. */ /** * LISTALLER_TYPE_SETUP_SETTINGS: * * The type for ListallerSetupSettings. */ /** * listaller_setup_settings_lock: * @self: the ListallerSetupSettings instance * * Lock the settings, so no changes can be made anymore */ /** * listaller_setup_settings_unlock: * @self: the ListallerSetupSettings instance * * Allow changing the settings again */ /** * listaller_setup_settings_database_file: * @self: the ListallerSetupSettings instance */ /** * listaller_setup_settings_appregister_dir: * @self: the ListallerSetupSettings instance * * Get software registry directory */ /** * listaller_setup_settings_appdata_dir: * @self: the ListallerSetupSettings instance */ /** * listaller_setup_settings_depdata_dir: * @self: the ListallerSetupSettings instance */ /** * listaller_setup_settings_icon_base_dir: * @self: the ListallerSetupSettings instance */ /** * listaller_setup_settings_icon_size_dir: * @self: the ListallerSetupSettings instance * @size:   */ /** * listaller_setup_settings_applications_dir: * @self: the ListallerSetupSettings instance */ /** * ListallerSetupSettings:current-mode: */ /** * listaller_setup_settings_get_current_mode: * @self: the ListallerSetupSettings instance to query * * Get and return the current value of the "current-mode" property. * * * * Returns: the value of the "current-mode" property */ /** * listaller_setup_settings_set_current_mode: * @self: the ListallerSetupSettings instance to modify * @value: the new value of the "current-mode" property * * Set the value of the "current-mode" property to @value. * * */ /** * ListallerSetupSettings:locked: */ /** * listaller_setup_settings_get_locked: * @self: the ListallerSetupSettings instance to query * * Get and return the current value of the "locked" property. * * * * Returns: the value of the "locked" property */ /** * ListallerSetupSettings:shared-mode: */ /** * listaller_setup_settings_get_shared_mode: * @self: the ListallerSetupSettings instance to query * * Get and return the current value of the "shared-mode" property. * * * * Returns: the value of the "shared-mode" property */ /** * ListallerSetupSettings:private-mode: */ /** * listaller_setup_settings_get_private_mode: * @self: the ListallerSetupSettings instance to query * * Get and return the current value of the "private-mode" property. * * * * Returns: the value of the "private-mode" property */ /** * ListallerSetupSettings:test-mode: */ /** * listaller_setup_settings_get_test_mode: * @self: the ListallerSetupSettings instance to query * * Get and return the current value of the "test-mode" property. * * * * Returns: the value of the "test-mode" property */ /** * ListallerSetupSettings: * * Class to store settings of a IPK setup. */ /** * ListallerSetupSettingsClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_SETUP_SETTINGS. All the fields in this structure are private and should never be accessed directly. */ /** * listaller_ipk_install_mode_is_all_set: * @self: the ListallerIPKInstallMode instance * @flags:   */ /** * listaller_ipk_install_mode_is_any_set: * @self: the ListallerIPKInstallMode instance * @flags:   */ /** * listaller_ipk_install_mode_set: * @self: the ListallerIPKInstallMode instance * @mode:   */ /** * listaller_ipk_install_mode_unset: * @self: the ListallerIPKInstallMode instance * @mode:   */ /** * ListallerIPKInstallMode: * * Mode of a current installation. * * This class is also used to indicate installation modes supported by an IPK package. */ ./Listaller-0.5.8/docs/api/ccomments/database-internal.c0000664000175000017500000000034212176743546023255 0ustar matthiasmatthias/** * listaller_database_status_to_string: * @self: the ListallerDatabaseStatus instance */ /** * ListallerDatabaseStatus: */ /** * ListallerDatabaseError: */ ./Listaller-0.5.8/docs/api/ccomments/dep-info.c0000664000175000017500000004007412120600620021354 0ustar matthiasmatthias/** * SECTION:dep-info * @short_description: Information about a shared resource * * Dependency objects carry information about shared resources or external requirements which many applications might need. Dependencies can be satisfied using native distro packages (installed by PackageKit) or by using some other methods, for example installing a feed. A Dependency object carries all information which caracterizes a dependency and it's state. */ /** * LISTALLER_IPK_TYPE_DEPENDENCY: * * The type for ListallerIPKDependency. */ /** * listaller_ipk_dependency_get_installdata: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_get_installdata_as_string: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_has_installdata: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_regenerate_depid: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_add_component: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_add_component_list: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_has_component: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_has_components: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_has_feed: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_get_install_dir_for_setting: * @self: the ListallerIPKDependency instance */ /** * listaller_ipk_dependency_build_pk_package_id: * @self: the ListallerIPKDependency instance * * Generate a PackageKit package-id for this dependency information */ /** * ListallerIPKDependency:full-name: */ /** * listaller_ipk_dependency_get_full_name: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "full-name" property. * * Returns: the value of the "full-name" property */ /** * listaller_ipk_dependency_set_full_name: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "full-name" property * * Set the value of the "full-name" property to @value. */ /** * ListallerIPKDependency:summary: */ /** * listaller_ipk_dependency_get_summary: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "summary" property. * * Returns: the value of the "summary" property */ /** * listaller_ipk_dependency_set_summary: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "summary" property * * Set the value of the "summary" property to @value. */ /** * ListallerIPKDependency:description: */ /** * listaller_ipk_dependency_get_description: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "description" property. * * Returns: the value of the "description" property */ /** * listaller_ipk_dependency_set_description: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "description" property * * Set the value of the "description" property to @value. */ /** * ListallerIPKDependency:homepage: */ /** * listaller_ipk_dependency_get_homepage: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "homepage" property. * * Returns: the value of the "homepage" property */ /** * listaller_ipk_dependency_set_homepage: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "homepage" property * * Set the value of the "homepage" property to @value. */ /** * ListallerIPKDependency:author: */ /** * listaller_ipk_dependency_get_author: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "author" property. * * Returns: the value of the "author" property */ /** * listaller_ipk_dependency_set_author: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "author" property * * Set the value of the "author" property to @value. */ /** * ListallerIPKDependency:version: */ /** * listaller_ipk_dependency_get_version: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "version" property. * * Returns: the value of the "version" property */ /** * listaller_ipk_dependency_set_version: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "version" property * * Set the value of the "version" property to @value. */ /** * ListallerIPKDependency:origin: */ /** * listaller_ipk_dependency_get_origin: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "origin" property. * * Returns: the value of the "origin" property */ /** * listaller_ipk_dependency_set_origin: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "origin" property * * Set the value of the "origin" property to @value. */ /** * ListallerIPKDependency:satisfied: */ /** * listaller_ipk_dependency_get_satisfied: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "satisfied" property. * * Returns: the value of the "satisfied" property */ /** * listaller_ipk_dependency_set_satisfied: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "satisfied" property * * Set the value of the "satisfied" property to @value. */ /** * ListallerIPKDependency:architecture: */ /** * listaller_ipk_dependency_get_architecture: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "architecture" property. * * Returns: the value of the "architecture" property */ /** * listaller_ipk_dependency_set_architecture: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "architecture" property * * Set the value of the "architecture" property to @value. */ /** * ListallerIPKDependency:is-standardlib: * * Whether this dependency is always satisfied (by default), set by distribution maintainers */ /** * listaller_ipk_dependency_get_is_standardlib: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "is-standardlib" property. * * Returns: the value of the "is-standardlib" property */ /** * listaller_ipk_dependency_set_is_standardlib: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "is-standardlib" property * * Set the value of the "is-standardlib" property to @value. */ /** * ListallerIPKDependency:feed-url: */ /** * listaller_ipk_dependency_get_feed_url: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "feed-url" property. * * Returns: the value of the "feed-url" property */ /** * listaller_ipk_dependency_set_feed_url: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "feed-url" property * * Set the value of the "feed-url" property to @value. */ /** * ListallerIPKDependency:install-time: */ /** * listaller_ipk_dependency_get_install_time: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "install-time" property. * * Returns: the value of the "install-time" property */ /** * listaller_ipk_dependency_set_install_time: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "install-time" property * * Set the value of the "install-time" property to @value. */ /** * ListallerIPKDependency:environment: */ /** * listaller_ipk_dependency_get_environment: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "environment" property. * * Returns: the value of the "environment" property */ /** * listaller_ipk_dependency_set_environment: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "environment" property * * Set the value of the "environment" property to @value. */ /** * ListallerIPKDependency:idname: */ /** * listaller_ipk_dependency_get_idname: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "idname" property. * * Returns: the value of the "idname" property */ /** * listaller_ipk_dependency_set_idname: * @self: the ListallerIPKDependency instance to modify * @value: the new value of the "idname" property * * Set the value of the "idname" property to @value. */ /** * ListallerIPKDependency:raw-complist: */ /** * listaller_ipk_dependency_get_raw_complist: * @self: the ListallerIPKDependency instance to query * * Get and return the current value of the "raw-complist" property. * * Returns: the value of the "raw-complist" property */ /** * listaller_ipk_dependency_component_get_name: */ /** * listaller_ipk_dependency_component_get_type: */ /** * ListallerIPKDependency: * * Information about a shared resource * * Dependency objects carry information about shared resources or external requirements which many applications might need. Dependencies can be satisfied using native distro packages (installed by PackageKit) or by using some other methods, for example installing a feed. A Dependency object carries all information which caracterizes a dependency and it's state. */ /** * ListallerIPKDependencyClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_DEPENDENCY. All the fields in this structure are private and should never be accessed directly. */ /** * ListallerDepComponentType: */ ./Listaller-0.5.8/docs/api/ccomments/ipk-changelog.c0000664000175000017500000000151412176743546022411 0ustar matthiasmatthias/** * SECTION:ipk-changelog * @short_description: Retrieve information from application changelogs */ /** * LISTALLER_IPK_TYPE_CHANGELOG: * * The type for ListallerIPKChangelog. */ /** * listaller_ipk_changelog_open: * @self: the ListallerIPKChangelog instance * @fname:   */ /** * listaller_ipk_changelog_new: */ /** * ListallerIPKChangelog: * * Retrieve information from application changelogs */ /** * ListallerIPKChangelogClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_CHANGELOG. All the fields in this structure are private and should never be accessed directly. */ ./Listaller-0.5.8/docs/api/ccomments/config-global.c0000664000175000017500000000011512176743546022400 0ustar matthiasmatthias/** * listaller_utils_enable_translation: * @self: the (null) instance */ ./Listaller-0.5.8/docs/api/ccomments/key-manager.c0000664000175000017500000000246012176743546022102 0ustar matthiasmatthias/** * SECTION:key-manager * @short_description: Manage Listaller's GPG-Key database * * Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels. */ /** * LISTALLER_TYPE_KEY_MANAGER: * * The type for ListallerKeyManager. */ /** * listaller_key_manager_import_key: * @self: the ListallerKeyManager instance * @fpr:   */ /** * listaller_key_manager_get_key_info: * @self: the ListallerKeyManager instance * @pattern:   */ /** * listaller_key_manager_new: */ /** * ListallerKeyManager: * * Manage Listaller's GPG-Key database * * Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels. */ /** * ListallerKeyManagerClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_KEY_MANAGER. All the fields in this structure are private and should never be accessed directly. */ ./Listaller-0.5.8/docs/api/ccomments/installer.c0000664000175000017500000001135212176743546021677 0ustar matthiasmatthias/** * SECTION:installer * @short_description: Performs the installation of an IPK package * * This class handles all stuff required to install an application. All methods are syncronous right now. */ /** * LISTALLER_TYPE_SETUP: * * The type for ListallerSetup. */ /** * listaller_setup_supported_install_modes: * @self: the ListallerSetup instance */ /** * listaller_setup_set_install_mode: * @self: the ListallerSetup instance * @mode:   */ /** * listaller_setup_get_install_mode: * @self: the ListallerSetup instance */ /** * listaller_setup_initialize: * @self: the ListallerSetup instance */ /** * listaller_setup_get_current_application: * @self: the ListallerSetup instance */ /** * listaller_setup_kill_installation_process: * @self: the ListallerSetup instance * * Forcibly kills a running installation process. You should never use this method, it might only be useful in command-line applications, where you can catch an interrupt signal and tell the running setup about it. It might be used on mobile devices if a setup is running and the device is running out of power. (but best way in that case would be to prevent an installation in the first place, if there is not enough energy left) This function does some emergency cleanup and tries to make sure that nothing gets corrupted. */ /** * listaller_setup_get_replaced_native_packs: * @self: the ListallerSetup instance * * Check if there are native packages providing the same functionality * * Software packages can declare a "replaces" element, showing which native componants become obsolete if their 3rd-party app gets installed. E.g. Firefox could declare a replacement of "/usr/bin/firefox", so the user gets hinted to maybe remove the native package. This feature is optional, and Listaller won't perform any removal actions! This function will fail if the user did not request a shared installation. * * Returns: List of replaces package-ids, separated by newlines or NULL if no replacement was declared. */ /** * listaller_setup_run_installation: * @self: the ListallerSetup instance * * Execute software installation * * Returns: Success of the operation (if FALSE, an error was emitted) */ /** * listaller_setup_get_security_info: * @self: the ListallerSetup instance */ /** * listaller_setup_new: * @ipkfilename:   */ /** * ListallerSetup:fname: */ /** * listaller_setup_get_fname: * @self: the ListallerSetup instance to query * * Get and return the current value of the "fname" property. * * * * Returns: the value of the "fname" property */ /** * ListallerSetup:settings: */ /** * listaller_setup_get_settings: * @self: the ListallerSetup instance to query * * Get and return the current value of the "settings" property. * * * * Returns: the value of the "settings" property */ /** * ListallerSetup:control: */ /** * listaller_setup_get_control: * @self: the ListallerSetup instance to query * * Get and return the current value of the "control" property. * * * * Returns: the value of the "control" property */ /** * ListallerSetup::status-changed: * @setup: the ListallerSetup instance that received the signal * @status:   */ /** * ListallerSetup: * * Performs the installation of an IPK package * * This class handles all stuff required to install an application. All methods are syncronous right now. */ /** * ListallerSetupClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_SETUP. All the fields in this structure are private and should never be accessed directly. */ ./Listaller-0.5.8/docs/api/ccomments/manager.c0000664000175000017500000001114612176743546021315 0ustar matthiasmatthias/** * SECTION:manager * @short_description: Allows managing Listaller applications * * This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources. */ /** * LISTALLER_TYPE_MANAGER: * * The type for ListallerManager. */ /** * listaller_manager_filter_applications: * @self: the ListallerManager instance * @filter:   * @app_list:   */ /** * listaller_manager_find_applications_by_values: * @self: the ListallerManager instance * @filter: (in):  . Filter, which is applied on the results * @values: (in) (array length=values_length1):  . Null-terminated list of strings to search for * @values_length1: length of the @values array * @appList: (out):  . ArrayList of AppItems to store the result, or NULL (all applications are also emitted in the "application" signal) * * Find applications which match the strings in values */ /** * listaller_manager_get_applications_by_fullname: * @self: the ListallerManager instance * @full_name:   */ /** * listaller_manager_get_application_by_idname: * @self: the ListallerManager instance * @idname:   */ /** * listaller_manager_remove_application: * @self: the ListallerManager instance * @app:   */ /** * listaller_manager_refresh_appitem_data: * @self: the ListallerManager instance * @item:   */ /** * listaller_manager_get_application_filelist: * @self: the ListallerManager instance * @app:   * * Returns: (array length=result_length1): */ /** * listaller_manager_get_app_ld_environment: * @self: the ListallerManager instance * @app: (in):  . AppItem belonging to an Listaller-installed app * * Get the LD_LIBRARY_PATH environment for an application. */ /** * listaller_manager_refresh_repository_cache: * @self: the ListallerManager instance * * Update the 3rd-party remote application cache. This will allow querying for new updates. * * Returns: TRUE if refresh was successful. */ /** * listaller_manager_prepare_setup_for_app: * @self: the ListallerManager instance * @app_idname:   */ /** * listaller_manager_new: * @shared_mode: (in):  . Whether we are in shared mode or not. * * Create a new Listaller application manager */ /** * ListallerManager:settings: */ /** * listaller_manager_get_settings: * @self: the ListallerManager instance to query * * Get and return the current value of the "settings" property. * * * * Returns: the value of the "settings" property */ /** * listaller_manager_set_settings: * @self: the ListallerManager instance to modify * @value: the new value of the "settings" property * * Set the value of the "settings" property to @value. * * */ /** * ListallerManager::status-changed: * @manager: the ListallerManager instance that received the signal * @status:   */ /** * ListallerManager::application: * @manager: the ListallerManager instance that received the signal * @appid:   */ /** * ListallerManager: * * Allows managing Listaller applications * * This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources. */ /** * ListallerManagerClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_MANAGER. All the fields in this structure are private and should never be accessed directly. */ ./Listaller-0.5.8/docs/api/ccomments/message-object.c0000664000175000017500000000413512176743546022573 0ustar matthiasmatthias/** * SECTION:message-object * @short_description: Class providing basic message handling * * Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API) */ /** * LISTALLER_TYPE_MESSAGE_OBJECT: * * The type for ListallerMessageObject. */ /** * listaller_message_object_set_error_hint_str: * @self: the ListallerMessageObject instance * @str:   */ /** * listaller_message_object_connect_with_object: * @self: the ListallerMessageObject instance * @other_obj:   * @flags:   */ /** * listaller_message_object_connect_with_object_all: * @self: the ListallerMessageObject instance * @other_obj:   */ /** * ListallerMessageObject::error-code: * @message_object: the ListallerMessageObject instance that received the signal * @error:   */ /** * ListallerMessageObject::message: * @message_object: the ListallerMessageObject instance that received the signal * @message:   */ /** * ListallerMessageObject::progress: * @message_object: the ListallerMessageObject instance that received the signal * @prog:   */ /** * ListallerMessageObject: * * Class providing basic message handling * * Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API) */ /** * ListallerMessageObjectClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_MESSAGE_OBJECT. All the fields in this structure are private and should never be accessed directly. */ /** * ListallerObjConnectFlags: */ ./Listaller-0.5.8/docs/api/ccomments/status.c0000664000175000017500000004007512176743546021231 0ustar matthiasmatthias/** * SECTION:status * @short_description: Return type describing an error */ /** * LISTALLER_TYPE_ERROR_ITEM: * * The type for ListallerErrorItem. */ /** * listaller_error_item_to_string: * @self: the ListallerErrorItem instance */ /** * listaller_error_item_new: * @type:   */ /** * ListallerErrorItem:error: */ /** * listaller_error_item_get_error: * @self: the ListallerErrorItem instance to query * * Get and return the current value of the "error" property. * * * * Returns: the value of the "error" property */ /** * listaller_error_item_set_error: * @self: the ListallerErrorItem instance to modify * @value: the new value of the "error" property * * Set the value of the "error" property to @value. * * */ /** * ListallerErrorItem:details: */ /** * listaller_error_item_get_details: * @self: the ListallerErrorItem instance to query * * Get and return the current value of the "details" property. * * * * Returns: the value of the "details" property */ /** * listaller_error_item_set_details: * @self: the ListallerErrorItem instance to modify * @value: the new value of the "details" property * * Set the value of the "details" property to @value. * * */ /** * ListallerErrorItem: * * Return type describing an error */ /** * ListallerErrorItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_ERROR_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_TYPE_MESSAGE_ITEM: * * The type for ListallerMessageItem. */ /** * listaller_message_item_to_string: * @self: the ListallerMessageItem instance */ /** * listaller_message_item_new: * @type:   */ /** * ListallerMessageItem:mtype: */ /** * listaller_message_item_get_mtype: * @self: the ListallerMessageItem instance to query * * Get and return the current value of the "mtype" property. * * * * Returns: the value of the "mtype" property */ /** * listaller_message_item_set_mtype: * @self: the ListallerMessageItem instance to modify * @value: the new value of the "mtype" property * * Set the value of the "mtype" property to @value. * * */ /** * ListallerMessageItem:details: */ /** * listaller_message_item_get_details: * @self: the ListallerMessageItem instance to query * * Get and return the current value of the "details" property. * * * * Returns: the value of the "details" property */ /** * listaller_message_item_set_details: * @self: the ListallerMessageItem instance to modify * @value: the new value of the "details" property * * Set the value of the "details" property to @value. * * */ /** * ListallerMessageItem: * * Return type describing a message */ /** * ListallerMessageItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_MESSAGE_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_TYPE_STATUS_ITEM: * * The type for ListallerStatusItem. */ /** * listaller_status_item_new: * @type:   */ /** * ListallerStatusItem:status: */ /** * listaller_status_item_get_status: * @self: the ListallerStatusItem instance to query * * Get and return the current value of the "status" property. * * * * Returns: the value of the "status" property */ /** * listaller_status_item_set_status: * @self: the ListallerStatusItem instance to modify * @value: the new value of the "status" property * * Set the value of the "status" property to @value. * * */ /** * ListallerStatusItem:info: */ /** * listaller_status_item_get_info: * @self: the ListallerStatusItem instance to query * * Get and return the current value of the "info" property. * * * * Returns: the value of the "info" property */ /** * listaller_status_item_set_info: * @self: the ListallerStatusItem instance to modify * @value: the new value of the "info" property * * Set the value of the "info" property to @value. * * */ /** * ListallerStatusItem: * * Return type describing a status change */ /** * ListallerStatusItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_STATUS_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_TYPE_PROGRESS_ITEM: * * The type for ListallerProgressItem. */ /** * listaller_progress_item_new: */ /** * ListallerProgressItem:prog-type: */ /** * listaller_progress_item_get_prog_type: * @self: the ListallerProgressItem instance to query * * Get and return the current value of the "prog-type" property. * * * * Returns: the value of the "prog-type" property */ /** * listaller_progress_item_set_prog_type: * @self: the ListallerProgressItem instance to modify * @value: the new value of the "prog-type" property * * Set the value of the "prog-type" property to @value. * * */ /** * ListallerProgressItem:item-id: */ /** * listaller_progress_item_get_item_id: * @self: the ListallerProgressItem instance to query * * Get and return the current value of the "item-id" property. * * * * Returns: the value of the "item-id" property */ /** * listaller_progress_item_set_item_id: * @self: the ListallerProgressItem instance to modify * @value: the new value of the "item-id" property * * Set the value of the "item-id" property to @value. * * */ /** * ListallerProgressItem:value: */ /** * listaller_progress_item_get_value: * @self: the ListallerProgressItem instance to query * * Get and return the current value of the "value" property. * * * * Returns: the value of the "value" property */ /** * listaller_progress_item_set_value: * @self: the ListallerProgressItem instance to modify * @value: the new value of the "value" property * * Set the value of the "value" property to @value. * * */ /** * ListallerProgressItem: * * Return type describing progress changes */ /** * ListallerProgressItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_PROGRESS_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_TYPE_UPDATE_ITEM: * * The type for ListallerUpdateItem. */ /** * listaller_update_item_new: */ /** * ListallerUpdateItem:sw-type: */ /** * listaller_update_item_get_sw_type: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "sw-type" property. * * * * Returns: the value of the "sw-type" property */ /** * listaller_update_item_set_sw_type: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "sw-type" property * * Set the value of the "sw-type" property to @value. * * */ /** * ListallerUpdateItem:sw-old: */ /** * listaller_update_item_get_sw_old: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "sw-old" property. * * * * Returns: the value of the "sw-old" property */ /** * listaller_update_item_set_sw_old: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "sw-old" property * * Set the value of the "sw-old" property to @value. * * */ /** * ListallerUpdateItem:sw-new: */ /** * listaller_update_item_get_sw_new: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "sw-new" property. * * * * Returns: the value of the "sw-new" property */ /** * listaller_update_item_set_sw_new: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "sw-new" property * * Set the value of the "sw-new" property to @value. * * */ /** * ListallerUpdateItem:architecture: */ /** * listaller_update_item_get_architecture: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "architecture" property. * * * * Returns: the value of the "architecture" property */ /** * listaller_update_item_set_architecture: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "architecture" property * * Set the value of the "architecture" property to @value. * * */ /** * ListallerUpdateItem:changelog: */ /** * listaller_update_item_get_changelog: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "changelog" property. * * * * Returns: the value of the "changelog" property */ /** * listaller_update_item_set_changelog: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "changelog" property * * Set the value of the "changelog" property to @value. * * */ /** * ListallerUpdateItem:completed: */ /** * listaller_update_item_get_completed: * @self: the ListallerUpdateItem instance to query * * Get and return the current value of the "completed" property. * * * * Returns: the value of the "completed" property */ /** * listaller_update_item_set_completed: * @self: the ListallerUpdateItem instance to modify * @value: the new value of the "completed" property * * Set the value of the "completed" property to @value. * * */ /** * ListallerUpdateItem: * * Return type describing a software update */ /** * ListallerUpdateItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_UPDATE_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * listaller_error_enum_to_string: * @self: the ListallerErrorEnum instance */ /** * ListallerErrorEnum: */ /** * ListallerStatusEnum: */ /** * listaller_message_enum_to_string: * @self: the ListallerMessageEnum instance */ /** * ListallerMessageEnum: */ /** * ListallerProgressEnum: */ ./Listaller-0.5.8/docs/api/ccomments/logging.c0000664000175000017500000000065212176743546021331 0ustar matthiasmatthias/** * listaller_set_verbose_mode: * @self: the (null) instance * @enabled:   */ /** * listaller_get_verbose_mode: * @self: the (null) instance */ /** * listaller_set_console_mode: * @self: the (null) instance * @enabled:   */ /** * listaller_set_clitool_mode: * @self: the (null) instance * @enabled:   */ /** * listaller_add_log_domain: * @self: the (null) instance * @log_domain:   */ ./Listaller-0.5.8/docs/api/ccomments/utils.c0000664000175000017500000000056212176743546021043 0ustar matthiasmatthias/** * SECTION:utils * @short_description: Common utility functions used by Listaller */ /** * listaller_utils_build_filename: * @self: the (null) instance * @first_element:   * @...:   * * Builds a filename similar to g_build_filename, but this implementation resolves all relative ("../.") path statements to one coherent path string. */ ./Listaller-0.5.8/docs/api/ccomments/updater.c0000664000175000017500000000577412176743546021361 0ustar matthiasmatthias/** * SECTION:updater * @short_description: All necessary methods to keep installed applications up-to-date * * This class allows installing updates for installed applications. */ /** * LISTALLER_TYPE_UPDATER: * * The type for ListallerUpdater. */ /** * listaller_updater_find_updates: * @self: the ListallerUpdater instance * * Find updates available for installed applications. */ /** * listaller_updater_apply_updates: * @self: the ListallerUpdater instance * @update_list: (in):  . A list containing valid UpdateItems * * Apply updates selected in update_list. */ /** * listaller_updater_apply_updates_all: * @self: the ListallerUpdater instance * * Apply all available updates */ /** * listaller_updater_new: * @shared_mode: (in):  . Whether we are in shared mode or not. * * Create a new Listaller update manager */ /** * ListallerUpdater:settings: */ /** * listaller_updater_get_settings: * @self: the ListallerUpdater instance to query * * Get and return the current value of the "settings" property. * * * * Returns: the value of the "settings" property */ /** * listaller_updater_set_settings: * @self: the ListallerUpdater instance to modify * @value: the new value of the "settings" property * * Set the value of the "settings" property to @value. * * */ /** * ListallerUpdater:available-updates: */ /** * listaller_updater_get_available_updates: * @self: the ListallerUpdater instance to query * * Get and return the current value of the "available-updates" property. * * * * Returns: the value of the "available-updates" property */ /** * ListallerUpdater::update: * @updater: the ListallerUpdater instance that received the signal * @update:   */ /** * ListallerUpdater: * * All necessary methods to keep installed applications up-to-date * * This class allows installing updates for installed applications. */ /** * ListallerUpdaterClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_UPDATER. All the fields in this structure are private and should never be accessed directly. */ ./Listaller-0.5.8/docs/api/ccomments/application.c0000664000175000017500000005023112176743546022204 0ustar matthiasmatthias/** * SECTION:application * @short_description: Application entry * * Objects of this class contain information about an application */ /** * LISTALLER_TYPE_APP_ITEM: * * The type for ListallerAppItem. */ /** * listaller_app_item_set_origin_local: * @self: the ListallerAppItem instance */ /** * listaller_app_item_to_string: * @self: the ListallerAppItem instance */ /** * listaller_app_item_set_license_name: * @self: the ListallerAppItem instance * @lName:   */ /** * listaller_app_item_set_license_text: * @self: the ListallerAppItem instance * @lText:   */ /** * listaller_app_item_set_license_from_doap_name: * @self: the ListallerAppItem instance * @name:   */ /** * listaller_app_item_fast_check: * @self: the ListallerAppItem instance */ /** * listaller_app_item_update_with_appid: * @self: the ListallerAppItem instance * @fast:   */ /** * listaller_app_item_build_pk_package_id: * @self: the ListallerAppItem instance * * Generate a PackageKit package-id for this application */ /** * listaller_app_item_update_with_desktop_file: * @self: the ListallerAppItem instance */ /** * listaller_app_item_get_raw_cmd: * @self: the ListallerAppItem instance * @subst_cmd:   */ /** * listaller_app_item_compare_version_with: * @self: the ListallerAppItem instance * @bversion:   */ /** * listaller_app_item_new_blank: */ /** * listaller_app_item_new: * @afullname:   * @aversion:   * @desktop_filename:   */ /** * listaller_app_item_new_from_id: * @application_id:   */ /** * listaller_app_item_new_from_desktopfile: * @desktop_filename:   */ /** * ListallerAppItem:idname: * * Application identifier */ /** * listaller_app_item_get_idname: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "idname" property. * * Application identifier * * Returns: the value of the "idname" property */ /** * listaller_app_item_set_idname: * @self: the ListallerAppItem instance to modify * @value: the new value of the "idname" property * * Set the value of the "idname" property to @value. * * Application identifier */ /** * ListallerAppItem:full-name: */ /** * listaller_app_item_get_full_name: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "full-name" property. * * * * Returns: the value of the "full-name" property */ /** * listaller_app_item_set_full_name: * @self: the ListallerAppItem instance to modify * @value: the new value of the "full-name" property * * Set the value of the "full-name" property to @value. * * */ /** * ListallerAppItem:version: */ /** * listaller_app_item_get_version: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "version" property. * * * * Returns: the value of the "version" property */ /** * listaller_app_item_set_version: * @self: the ListallerAppItem instance to modify * @value: the new value of the "version" property * * Set the value of the "version" property to @value. * * */ /** * ListallerAppItem:summary: */ /** * listaller_app_item_get_summary: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "summary" property. * * * * Returns: the value of the "summary" property */ /** * listaller_app_item_set_summary: * @self: the ListallerAppItem instance to modify * @value: the new value of the "summary" property * * Set the value of the "summary" property to @value. * * */ /** * ListallerAppItem:description: */ /** * listaller_app_item_get_description: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "description" property. * * * * Returns: the value of the "description" property */ /** * listaller_app_item_set_description: * @self: the ListallerAppItem instance to modify * @value: the new value of the "description" property * * Set the value of the "description" property to @value. * * */ /** * ListallerAppItem:author: */ /** * listaller_app_item_get_author: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "author" property. * * * * Returns: the value of the "author" property */ /** * listaller_app_item_set_author: * @self: the ListallerAppItem instance to modify * @value: the new value of the "author" property * * Set the value of the "author" property to @value. * * */ /** * ListallerAppItem:publisher: */ /** * listaller_app_item_get_publisher: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "publisher" property. * * * * Returns: the value of the "publisher" property */ /** * listaller_app_item_set_publisher: * @self: the ListallerAppItem instance to modify * @value: the new value of the "publisher" property * * Set the value of the "publisher" property to @value. * * */ /** * ListallerAppItem:license: */ /** * listaller_app_item_get_license: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "license" property. * * * * Returns: the value of the "license" property */ /** * listaller_app_item_set_license: * @self: the ListallerAppItem instance to modify * @value: the new value of the "license" property * * Set the value of the "license" property to @value. * * */ /** * ListallerAppItem:categories: */ /** * listaller_app_item_get_categories: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "categories" property. * * * * Returns: the value of the "categories" property */ /** * listaller_app_item_set_categories: * @self: the ListallerAppItem instance to modify * @value: the new value of the "categories" property * * Set the value of the "categories" property to @value. * * */ /** * ListallerAppItem:size-installed: */ /** * listaller_app_item_get_size_installed: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "size-installed" property. * * * * Returns: the value of the "size-installed" property */ /** * listaller_app_item_set_size_installed: * @self: the ListallerAppItem instance to modify * @value: the new value of the "size-installed" property * * Set the value of the "size-installed" property to @value. * * */ /** * ListallerAppItem:desktop-file: */ /** * listaller_app_item_get_desktop_file: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "desktop-file" property. * * * * Returns: the value of the "desktop-file" property */ /** * listaller_app_item_set_desktop_file: * @self: the ListallerAppItem instance to modify * @value: the new value of the "desktop-file" property * * Set the value of the "desktop-file" property to @value. * * */ /** * ListallerAppItem:state: */ /** * listaller_app_item_get_state: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "state" property. * * * * Returns: the value of the "state" property */ /** * listaller_app_item_set_state: * @self: the ListallerAppItem instance to modify * @value: the new value of the "state" property * * Set the value of the "state" property to @value. * * */ /** * ListallerAppItem:icon-name: */ /** * listaller_app_item_get_icon_name: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "icon-name" property. * * * * Returns: the value of the "icon-name" property */ /** * listaller_app_item_set_icon_name: * @self: the ListallerAppItem instance to modify * @value: the new value of the "icon-name" property * * Set the value of the "icon-name" property to @value. * * */ /** * ListallerAppItem:website: */ /** * listaller_app_item_get_website: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "website" property. * * * * Returns: the value of the "website" property */ /** * listaller_app_item_set_website: * @self: the ListallerAppItem instance to modify * @value: the new value of the "website" property * * Set the value of the "website" property to @value. * * */ /** * ListallerAppItem:install-time: */ /** * listaller_app_item_get_install_time: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "install-time" property. * * * * Returns: the value of the "install-time" property */ /** * listaller_app_item_set_install_time: * @self: the ListallerAppItem instance to modify * @value: the new value of the "install-time" property * * Set the value of the "install-time" property to @value. * * */ /** * ListallerAppItem:replaces: */ /** * listaller_app_item_get_replaces: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "replaces" property. * * * * Returns: the value of the "replaces" property */ /** * listaller_app_item_set_replaces: * @self: the ListallerAppItem instance to modify * @value: the new value of the "replaces" property * * Set the value of the "replaces" property to @value. * * */ /** * ListallerAppItem:origin: */ /** * listaller_app_item_get_origin: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "origin" property. * * * * Returns: the value of the "origin" property */ /** * listaller_app_item_set_origin: * @self: the ListallerAppItem instance to modify * @value: the new value of the "origin" property * * Set the value of the "origin" property to @value. * * */ /** * ListallerAppItem:dependencies-str: */ /** * listaller_app_item_get_dependencies_str: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "dependencies-str" property. * * * * Returns: the value of the "dependencies-str" property */ /** * listaller_app_item_set_dependencies_str: * @self: the ListallerAppItem instance to modify * @value: the new value of the "dependencies-str" property * * Set the value of the "dependencies-str" property to @value. * * */ /** * ListallerAppItem:appid: */ /** * listaller_app_item_get_appid: * @self: the ListallerAppItem instance to query * * Get and return the current value of the "appid" property. * * * * Returns: the value of the "appid" property */ /** * listaller_app_item_validate_appid: * @application_id:   */ /** * ListallerAppItem: * * Application entry * * Objects of this class contain information about an application */ /** * ListallerAppItemClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_APP_ITEM. All the fields in this structure are private and should never be accessed directly. */ /** * listaller_app_state_to_string: * @self: the ListallerAppState instance */ /** * listaller_app_state_is_all_set: * @self: the ListallerAppState instance * @flags:   */ /** * listaller_app_state_is_any_set: * @self: the ListallerAppState instance * @flags:   */ /** * listaller_app_state_set: * @self: the ListallerAppState instance * @mode:   */ /** * listaller_app_state_unset: * @self: the ListallerAppState instance * @mode:   */ /** * ListallerAppState: * * Status of an application * * Indicates if an application is installed (and in which mode it was installed), or if it is in any other, different state. */ /** * ListallerAppLicense: * * License name and text pair * * Describes a software license */ /** * listaller_app_license_dup: * @self: the instance to duplicate * * Creates a copy of self. * * See also: listaller_app_license_copy(), listaller_app_license_destroy(), listaller_app_license_free() * * Returns: a copy of @self, free with listaller_app_license_free() */ /** * listaller_app_license_free: * @self: the struct to free * * Frees the heap-allocated struct. * * See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_destroy() */ /** * listaller_app_license_copy: * @self: the struct to copy * @dest: a unused struct. Use listaller_app_license_destroy() to free the content. * * Creates a copy of self. * * See also: listaller_app_license_dup(), listaller_app_license_destroy(), listaller_app_license_free() */ /** * listaller_app_license_destroy: * @self: the struct to destroy * * Frees the content of the struct pointed by @self. * * See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_free() */ ./Listaller-0.5.8/docs/api/ccomments/gpgex.c0000664000175000017500000000031512176743546021011 0ustar matthiasmatthias/** * SECTION:gpgex * @short_description: Namespace for internal stuff to make handling of GPGMe easier. * * All functions here should be "private" or "internal"! */ ./Listaller-0.5.8/docs/api/ccomments/components.c0000664000175000017500000000024512176743546022066 0ustar matthiasmatthias/** * ListallerDepItemType: * * Type of a component-item * * Describes the type of an item which is part of a dependency (framework/module). */ ./Listaller-0.5.8/docs/api/ccomments/security-info.c0000664000175000017500000001643212176743546022506 0ustar matthiasmatthias/** * SECTION:security-info * @short_description: Package security information * * This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature. */ /** * LISTALLER_IPK_TYPE_SECURITY_INFO: * * The type for ListallerIPKSecurityInfo. */ /** * listaller_ipk_security_info_get_level: * @self: the ListallerIPKSecurityInfo instance * * Returns a human-readable general security level, which was determined for the associated package. */ /** * listaller_ipk_security_info_get_level_as_sentence: * @self: the ListallerIPKSecurityInfo instance * * Get a sentence describing the security status of a package. */ /** * listaller_ipk_security_info_get_level_as_string: * @self: the ListallerIPKSecurityInfo instance * * Get a simple workd (such as "high" or "low") which describes the security status of a package. */ /** * ListallerIPKSecurityInfo:signature-status: */ /** * listaller_ipk_security_info_get_signature_status: * @self: the ListallerIPKSecurityInfo instance to query * * Get and return the current value of the "signature-status" property. * * * * Returns: the value of the "signature-status" property */ /** * listaller_ipk_security_info_set_signature_status: * @self: the ListallerIPKSecurityInfo instance to modify * @value: the new value of the "signature-status" property * * Set the value of the "signature-status" property to @value. * * */ /** * ListallerIPKSecurityInfo:signature-trustlevel: */ /** * listaller_ipk_security_info_get_signature_trustlevel: * @self: the ListallerIPKSecurityInfo instance to query * * Get and return the current value of the "signature-trustlevel" property. * * * * Returns: the value of the "signature-trustlevel" property */ /** * listaller_ipk_security_info_set_signature_trustlevel: * @self: the ListallerIPKSecurityInfo instance to modify * @value: the new value of the "signature-trustlevel" property * * Set the value of the "signature-trustlevel" property to @value. * * */ /** * ListallerIPKSecurityInfo:user-names: */ /** * listaller_ipk_security_info_get_user_names: * @self: the ListallerIPKSecurityInfo instance to query * * Get and return the current value of the "user-names" property. * * * * Returns: the value of the "user-names" property */ /** * listaller_ipk_security_info_set_user_names: * @self: the ListallerIPKSecurityInfo instance to modify * @value: the new value of the "user-names" property * * Set the value of the "user-names" property to @value. * * */ /** * ListallerIPKSecurityInfo:key-fpr: */ /** * listaller_ipk_security_info_get_key_fpr: * @self: the ListallerIPKSecurityInfo instance to query * * Get and return the current value of the "key-fpr" property. * * * * Returns: the value of the "key-fpr" property */ /** * listaller_ipk_security_info_set_key_fpr: * @self: the ListallerIPKSecurityInfo instance to modify * @value: the new value of the "key-fpr" property * * Set the value of the "key-fpr" property to @value. * * */ /** * ListallerIPKSecurityInfo:trust-reason: */ /** * listaller_ipk_security_info_get_trust_reason: * @self: the ListallerIPKSecurityInfo instance to query * * Get and return the current value of the "trust-reason" property. * * * * Returns: the value of the "trust-reason" property */ /** * listaller_ipk_security_info_set_trust_reason: * @self: the ListallerIPKSecurityInfo instance to modify * @value: the new value of the "trust-reason" property * * Set the value of the "trust-reason" property to @value. * * */ /** * ListallerIPKSecurityInfo: * * Package security information * * This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature. */ /** * ListallerIPKSecurityInfoClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_SECURITY_INFO. All the fields in this structure are private and should never be accessed directly. */ /** * listaller_security_level_to_string: * @self: the ListallerSecurityLevel instance */ /** * listaller_security_level_from_string: * @str:   */ /** * ListallerSecurityLevel: * * Simple indicator of package security */ /** * listaller_sign_status_to_string: * @self: the ListallerSignStatus instance */ /** * ListallerSignStatus: * * Status of a package signature */ /** * listaller_sign_trust_to_string: * @self: the ListallerSignTrust instance */ /** * ListallerSignTrust: * * Trust level of a signature */ ./Listaller-0.5.8/docs/api/ccomments/reporting.c0000664000175000017500000000416412110036275021674 0ustar matthiasmatthias/** * SECTION:reporting * @short_description: Report generator */ /** * LISTALLER_TYPE_REPORT: * * The type for ListallerReport. */ /** * listaller_report_contains_error: * @self: the ListallerReport instance */ /** * listaller_report_is_empty: * @self: the ListallerReport instance */ /** * listaller_report_add_message: * @self: the ListallerReport instance */ /** * listaller_report_add_info: * @self: the ListallerReport instance */ /** * listaller_report_add_warning: * @self: the ListallerReport instance */ /** * listaller_report_add_error: * @self: the ListallerReport instance */ /** * listaller_report_to_string: * @self: the ListallerReport instance */ /** * listaller_report_clear: * @self: the ListallerReport instance */ /** * listaller_report_set_print_fatal: * @self: the ListallerReport instance */ /** * listaller_report_new: */ /** * listaller_report_get_instance: */ /** * listaller_report_delete: */ /** * listaller_report_log_message: */ /** * listaller_report_log_info: */ /** * listaller_report_log_warning: */ /** * listaller_report_log_error: */ /** * listaller_report_clear_current: */ /** * listaller_report_set_print_fatal_msg: */ /** * ListallerReport: * * Report generator */ /** * ListallerReportClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_TYPE_REPORT. All the fields in this structure are private and should never be accessed directly. */ /** * ListallerReportMessageType: * * Type of a message written to a Listaller Report */ ./Listaller-0.5.8/docs/api/ccomments/ipk-control.c0000664000175000017500000001761212176743546022150 0ustar matthiasmatthias/** * SECTION:ipk-control * @short_description: Generic IPK package control data */ /** * LISTALLER_IPK_TYPE_CONTROL: * * The type for ListallerIPKControl. */ /** * listaller_ipk_control_open_doap: * @self: the ListallerIPKControl instance * @data:   */ /** * listaller_ipk_control_open_doap_file: * @self: the ListallerIPKControl instance * @fname:   */ /** * listaller_ipk_control_open_packsetting: * @self: the ListallerIPKControl instance * @pksFName:   */ /** * listaller_ipk_control_get_ipk_version: * @self: the ListallerIPKControl instance */ /** * listaller_ipk_control_set_ipk_version: * @self: the ListallerIPKControl instance * @ipkV:   */ /** * listaller_ipk_control_get_architectures: * @self: the ListallerIPKControl instance * * Get architectures supported by this package */ /** * listaller_ipk_control_set_architectures: * @self: the ListallerIPKControl instance * @archs:   * * Set architectures supported by this package */ /** * listaller_ipk_control_get_replaces: * @self: the ListallerIPKControl instance * * Get replaced native components for the package. */ /** * listaller_ipk_control_set_replaces: * @self: the ListallerIPKControl instance * @repList:   */ /** * listaller_ipk_control_set_install_modes: * @self: the ListallerIPKControl instance * @modes:   */ /** * listaller_ipk_control_get_install_modes: * @self: the ListallerIPKControl instance */ /** * listaller_ipk_control_get_application: * @self: the ListallerIPKControl instance */ /** * listaller_ipk_control_set_dependencies: * @self: the ListallerIPKControl instance * @dependencies_list:   * @arch:   */ /** * listaller_ipk_control_get_dependencies: * @self: the ListallerIPKControl instance * @arch:   * @arch_only:   */ /** * listaller_ipk_control_set_license_text_from_file: * @self: the ListallerIPKControl instance * @fname:   */ /** * listaller_ipk_control_set_license_text: * @self: the ListallerIPKControl instance * @txt:   */ /** * ListallerIPKControl:user-accept-license: * * TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. */ /** * listaller_ipk_control_get_user_accept_license: * @self: the ListallerIPKControl instance to query * * Get and return the current value of the "user-accept-license" property. * * TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. * * Returns: the value of the "user-accept-license" property */ /** * listaller_ipk_control_set_user_accept_license: * @self: the ListallerIPKControl instance to modify * @value: the new value of the "user-accept-license" property * * Set the value of the "user-accept-license" property to @value. * * TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. */ /** * ListallerIPKControl: * * Generic IPK package control data */ /** * ListallerIPKControlClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_CONTROL. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_IPK_TYPE_PACK_CONTROL: * * The type for ListallerIPKPackControl. */ /** * listaller_ipk_pack_control_open_control: * @self: the ListallerIPKPackControl instance * @fPackSetting:   * @fDoap:   */ /** * listaller_ipk_pack_control_create_new: * @self: the ListallerIPKPackControl instance * @newDoapData:   * @ipkV:   */ /** * listaller_ipk_pack_control_is_delta_pkg: * @self: the ListallerIPKPackControl instance */ /** * listaller_ipk_pack_control_save_to_dir: * @self: the ListallerIPKPackControl instance * @dirPath:   */ /** * listaller_ipk_pack_control_get_files: * @self: the ListallerIPKPackControl instance * * Returns: (array length=result_length1): */ /** * listaller_ipk_pack_control_update_installmode_data: * @self: the ListallerIPKPackControl instance */ /** * listaller_ipk_pack_control_new: */ /** * ListallerIPKPackControl: * * Control metadata of an IPK package */ /** * ListallerIPKPackControlClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_PACK_CONTROL. All the fields in this structure are private and should never be accessed directly. */ /** * LISTALLER_IPK_TYPE_CONTROL_DIR: * * The type for ListallerIPKControlDir. */ /** * listaller_ipk_control_dir_open_dir: * @self: the ListallerIPKControlDir instance * @dir:   * @error: (error-domains ListallerIPKControlDataError): location to store the error occuring, or %NULL to ignore */ /** * listaller_ipk_control_dir_get_files_rootdir: * @self: the ListallerIPKControlDir instance */ /** * listaller_ipk_control_dir_auto_dependency_search: * @self: the ListallerIPKControlDir instance */ /** * listaller_ipk_control_dir_get_doap_data: * @self: the ListallerIPKControlDir instance */ /** * listaller_ipk_control_dir_save_control: * @self: the ListallerIPKControlDir instance */ /** * listaller_ipk_control_dir_new: */ /** * ListallerIPKControlDir: * * Data stored in an IPK-source control directory. * * This class is used by tools like lipkgen to extract data about a to-be-created IPK package from an IPK control directory. */ /** * ListallerIPKControlDirClass: * @parent_class: the parent class structure * * The class structure for LISTALLER_IPK_TYPE_CONTROL_DIR. All the fields in this structure are private and should never be accessed directly. */ /** * ListallerIPKControlDataError: */ ./Listaller-0.5.8/docs/api/listaller-docs.xml0000664000175000017500000000501112176743234021176 0ustar matthiasmatthias ]> Listaller Reference Manual for liblistaller-glib 0.5.x. The latest version of this documentation can be found on-line at http://listaller.tenstral.net/. Listaller API Reference More Information Object Hierarchy API Index Index of deprecated API Listaller Tools Manual Pages ./Listaller-0.5.8/docs/api/listaller-decl-list.txt0000664000175000017500000003425712176742604022163 0ustar matthiasmatthias
listaller ListallerAppItem ListallerErrorItem ListallerIPKChangelog ListallerIPKControl ListallerIPKControlDir ListallerIPKPackControl ListallerIPKSecurityInfo ListallerKeyManager ListallerManager ListallerMessageItem ListallerMessageObject ListallerProgressItem ListallerSetup ListallerSetupSettings ListallerStatusItem ListallerUpdateItem ListallerUpdater LISTALLER_DATABASE_ERROR LISTALLER_DEP_TYPE_ITEM_TYPE LISTALLER_IPK_CONTROL_DATA_ERROR LISTALLER_IPK_TYPE_INSTALL_MODE ListallerAppItem ListallerAppItemClass ListallerAppLicense ListallerAppState ListallerDatabaseError ListallerDatabaseStatus ListallerDepItemType ListallerDoapData ListallerDoapDataClass ListallerErrorEnum ListallerErrorItem ListallerErrorItemClass ListallerIPKChangelog ListallerIPKChangelogClass ListallerIPKControl ListallerIPKControlClass ListallerIPKControlDataError ListallerIPKControlDir ListallerIPKControlDirClass ListallerIPKInstallMode ListallerIPKMetaFile ListallerIPKMetaFileClass ListallerIPKPackControl ListallerIPKPackControlClass ListallerIPKPackControlPrivate ListallerIPKSecurityInfo ListallerIPKSecurityInfoClass ListallerKeyManager ListallerKeyManagerClass ListallerManager ListallerManagerClass ListallerMessageEnum ListallerMessageItem ListallerMessageItemClass ListallerMessageObject ListallerMessageObjectClass ListallerObjConnectFlags ListallerProgressEnum ListallerProgressItem ListallerProgressItemClass ListallerSecurityLevel ListallerSetup ListallerSetupClass ListallerSetupSettings ListallerSetupSettingsClass ListallerSignStatus ListallerSignTrust ListallerStatusEnum ListallerStatusItem ListallerStatusItemClass ListallerUpdateItem ListallerUpdateItemClass ListallerUpdater ListallerUpdaterClass listaller_add_log_domain listaller_app_item_build_pk_package_id listaller_app_item_compare_version_with listaller_app_item_construct listaller_app_item_construct_blank listaller_app_item_construct_from_desktopfile listaller_app_item_construct_from_id listaller_app_item_fast_check listaller_app_item_get_appid listaller_app_item_get_author listaller_app_item_get_categories listaller_app_item_get_dependencies_str listaller_app_item_get_description listaller_app_item_get_desktop_file listaller_app_item_get_full_name listaller_app_item_get_icon_name listaller_app_item_get_idname listaller_app_item_get_install_time listaller_app_item_get_license listaller_app_item_get_origin listaller_app_item_get_publisher listaller_app_item_get_raw_cmd listaller_app_item_get_replaces listaller_app_item_get_size_installed listaller_app_item_get_state listaller_app_item_get_summary listaller_app_item_get_version listaller_app_item_get_website listaller_app_item_new listaller_app_item_new_blank listaller_app_item_new_from_desktopfile listaller_app_item_new_from_id listaller_app_item_set_author listaller_app_item_set_categories listaller_app_item_set_dependencies_str listaller_app_item_set_description listaller_app_item_set_desktop_file listaller_app_item_set_full_name listaller_app_item_set_icon_name listaller_app_item_set_install_time listaller_app_item_set_license listaller_app_item_set_license_from_doap_name listaller_app_item_set_license_name listaller_app_item_set_license_text listaller_app_item_set_origin listaller_app_item_set_origin_local listaller_app_item_set_publisher listaller_app_item_set_replaces listaller_app_item_set_size_installed listaller_app_item_set_state listaller_app_item_set_summary listaller_app_item_set_version listaller_app_item_set_website listaller_app_item_to_string listaller_app_item_update_with_appid listaller_app_item_update_with_desktop_file listaller_app_item_validate_appid listaller_app_license_copy listaller_app_license_destroy listaller_app_license_dup listaller_app_license_free listaller_app_state_is_all_set listaller_app_state_is_any_set listaller_app_state_set listaller_app_state_to_string listaller_app_state_unset listaller_compare_versions listaller_database_error_quark listaller_database_status_to_string listaller_error_enum_to_string listaller_error_item_construct listaller_error_item_get_details listaller_error_item_get_error listaller_error_item_new listaller_error_item_to_string listaller_get_full_version_info_str listaller_get_verbose_mode listaller_get_version_info_str listaller_ipk_changelog_construct listaller_ipk_changelog_new listaller_ipk_changelog_open listaller_ipk_control_data_error_quark listaller_ipk_control_dir_auto_dependency_search listaller_ipk_control_dir_construct listaller_ipk_control_dir_get_doap_data listaller_ipk_control_dir_get_files_rootdir listaller_ipk_control_dir_new listaller_ipk_control_dir_open_dir listaller_ipk_control_dir_save_control listaller_ipk_control_get_application listaller_ipk_control_get_architectures listaller_ipk_control_get_dependencies listaller_ipk_control_get_install_modes listaller_ipk_control_get_ipk_version listaller_ipk_control_get_replaces listaller_ipk_control_get_user_accept_license listaller_ipk_control_open_doap listaller_ipk_control_open_doap_file listaller_ipk_control_open_packsetting listaller_ipk_control_set_architectures listaller_ipk_control_set_dependencies listaller_ipk_control_set_install_modes listaller_ipk_control_set_ipk_version listaller_ipk_control_set_license_text listaller_ipk_control_set_license_text_from_file listaller_ipk_control_set_replaces listaller_ipk_control_set_user_accept_license listaller_ipk_install_mode_is_all_set listaller_ipk_install_mode_is_any_set listaller_ipk_install_mode_set listaller_ipk_install_mode_unset listaller_ipk_pack_control_construct listaller_ipk_pack_control_create_new listaller_ipk_pack_control_get_files listaller_ipk_pack_control_is_delta_pkg listaller_ipk_pack_control_new listaller_ipk_pack_control_open_control listaller_ipk_pack_control_save_to_dir listaller_ipk_pack_control_update_installmode_data listaller_ipk_security_info_get_key_fpr listaller_ipk_security_info_get_level listaller_ipk_security_info_get_level_as_sentence listaller_ipk_security_info_get_level_as_string listaller_ipk_security_info_get_signature_status listaller_ipk_security_info_get_signature_trustlevel listaller_ipk_security_info_get_trust_reason listaller_ipk_security_info_get_user_names listaller_key_manager_construct listaller_key_manager_get_key_info listaller_key_manager_import_key listaller_key_manager_new listaller_manager_construct listaller_manager_filter_applications listaller_manager_find_applications_by_values listaller_manager_get_app_ld_environment listaller_manager_get_application_by_idname listaller_manager_get_application_filelist listaller_manager_get_applications_by_fullname listaller_manager_get_settings listaller_manager_new listaller_manager_prepare_setup_for_app listaller_manager_refresh_appitem_data listaller_manager_refresh_repository_cache listaller_manager_remove_application listaller_message_enum_to_string listaller_message_item_construct listaller_message_item_get_details listaller_message_item_get_mtype listaller_message_item_new listaller_message_item_to_string listaller_message_object_connect_with_object listaller_message_object_connect_with_object_all listaller_message_object_construct listaller_message_object_set_error_hint_str listaller_progress_item_construct listaller_progress_item_get_item_id listaller_progress_item_get_prog_type listaller_progress_item_get_value listaller_progress_item_new listaller_security_level_from_string listaller_security_level_to_string listaller_set_clitool_mode listaller_set_console_mode listaller_set_verbose_mode listaller_setup_construct listaller_setup_get_control listaller_setup_get_current_application listaller_setup_get_fname listaller_setup_get_install_mode listaller_setup_get_replaced_native_packs listaller_setup_get_security_info listaller_setup_get_settings listaller_setup_initialize listaller_setup_kill_installation_process listaller_setup_new listaller_setup_run_installation listaller_setup_set_install_mode listaller_setup_settings_appdata_dir listaller_setup_settings_applications_dir listaller_setup_settings_appregister_dir listaller_setup_settings_database_file listaller_setup_settings_depdata_dir listaller_setup_settings_get_current_mode listaller_setup_settings_get_locked listaller_setup_settings_get_private_mode listaller_setup_settings_get_shared_mode listaller_setup_settings_get_test_mode listaller_setup_settings_icon_base_dir listaller_setup_settings_icon_size_dir listaller_setup_settings_lock listaller_setup_settings_unlock listaller_setup_supported_install_modes listaller_sign_status_to_string listaller_sign_trust_to_string listaller_status_item_construct listaller_status_item_get_info listaller_status_item_get_status listaller_status_item_new listaller_update_item_construct listaller_update_item_get_architecture listaller_update_item_get_changelog listaller_update_item_get_completed listaller_update_item_get_sw_new listaller_update_item_get_sw_old listaller_update_item_get_sw_type listaller_update_item_new listaller_updater_apply_updates listaller_updater_apply_updates_all listaller_updater_construct listaller_updater_find_updates listaller_updater_get_available_updates listaller_updater_get_settings listaller_updater_new listaller_updater_set_settings listaller_utils_build_filename listaller_utils_enable_translation LISTALLER_APP_ITEM LISTALLER_APP_ITEM_CLASS LISTALLER_APP_ITEM_GET_CLASS LISTALLER_DOAP_DATA LISTALLER_DOAP_DATA_CLASS LISTALLER_DOAP_DATA_GET_CLASS LISTALLER_ERROR_ITEM LISTALLER_ERROR_ITEM_CLASS LISTALLER_ERROR_ITEM_GET_CLASS LISTALLER_IPK_CHANGELOG LISTALLER_IPK_CHANGELOG_CLASS LISTALLER_IPK_CHANGELOG_GET_CLASS LISTALLER_IPK_CONTROL LISTALLER_IPK_CONTROL_CLASS LISTALLER_IPK_CONTROL_DIR LISTALLER_IPK_CONTROL_DIR_CLASS LISTALLER_IPK_CONTROL_DIR_GET_CLASS LISTALLER_IPK_CONTROL_GET_CLASS LISTALLER_IPK_IS_CHANGELOG LISTALLER_IPK_IS_CHANGELOG_CLASS LISTALLER_IPK_IS_CONTROL LISTALLER_IPK_IS_CONTROL_CLASS LISTALLER_IPK_IS_CONTROL_DIR LISTALLER_IPK_IS_CONTROL_DIR_CLASS LISTALLER_IPK_IS_META_FILE LISTALLER_IPK_IS_META_FILE_CLASS LISTALLER_IPK_IS_PACK_CONTROL LISTALLER_IPK_IS_PACK_CONTROL_CLASS LISTALLER_IPK_IS_SECURITY_INFO LISTALLER_IPK_IS_SECURITY_INFO_CLASS LISTALLER_IPK_META_FILE LISTALLER_IPK_META_FILE_CLASS LISTALLER_IPK_META_FILE_GET_CLASS LISTALLER_IPK_PACK_CONTROL LISTALLER_IPK_PACK_CONTROL_CLASS LISTALLER_IPK_PACK_CONTROL_GET_CLASS LISTALLER_IPK_SECURITY_INFO LISTALLER_IPK_SECURITY_INFO_CLASS LISTALLER_IPK_SECURITY_INFO_GET_CLASS LISTALLER_IPK_TYPE_CHANGELOG LISTALLER_IPK_TYPE_CONTROL LISTALLER_IPK_TYPE_CONTROL_DIR LISTALLER_IPK_TYPE_META_FILE LISTALLER_IPK_TYPE_PACK_CONTROL LISTALLER_IPK_TYPE_SECURITY_INFO LISTALLER_IS_APP_ITEM LISTALLER_IS_APP_ITEM_CLASS LISTALLER_IS_DOAP_DATA LISTALLER_IS_DOAP_DATA_CLASS LISTALLER_IS_ERROR_ITEM LISTALLER_IS_ERROR_ITEM_CLASS LISTALLER_IS_KEY_MANAGER LISTALLER_IS_KEY_MANAGER_CLASS LISTALLER_IS_MANAGER LISTALLER_IS_MANAGER_CLASS LISTALLER_IS_MESSAGE_ITEM LISTALLER_IS_MESSAGE_ITEM_CLASS LISTALLER_IS_MESSAGE_OBJECT LISTALLER_IS_MESSAGE_OBJECT_CLASS LISTALLER_IS_PROGRESS_ITEM LISTALLER_IS_PROGRESS_ITEM_CLASS LISTALLER_IS_SETUP LISTALLER_IS_SETUP_CLASS LISTALLER_IS_SETUP_SETTINGS LISTALLER_IS_SETUP_SETTINGS_CLASS LISTALLER_IS_STATUS_ITEM LISTALLER_IS_STATUS_ITEM_CLASS LISTALLER_IS_UPDATER LISTALLER_IS_UPDATER_CLASS LISTALLER_IS_UPDATE_ITEM LISTALLER_IS_UPDATE_ITEM_CLASS LISTALLER_KEY_MANAGER LISTALLER_KEY_MANAGER_CLASS LISTALLER_KEY_MANAGER_GET_CLASS LISTALLER_MANAGER LISTALLER_MANAGER_CLASS LISTALLER_MANAGER_GET_CLASS LISTALLER_MESSAGE_ITEM LISTALLER_MESSAGE_ITEM_CLASS LISTALLER_MESSAGE_ITEM_GET_CLASS LISTALLER_MESSAGE_OBJECT LISTALLER_MESSAGE_OBJECT_CLASS LISTALLER_MESSAGE_OBJECT_GET_CLASS LISTALLER_PROGRESS_ITEM LISTALLER_PROGRESS_ITEM_CLASS LISTALLER_PROGRESS_ITEM_GET_CLASS LISTALLER_SETUP LISTALLER_SETUP_CLASS LISTALLER_SETUP_GET_CLASS LISTALLER_SETUP_SETTINGS LISTALLER_SETUP_SETTINGS_CLASS LISTALLER_SETUP_SETTINGS_GET_CLASS LISTALLER_STATUS_ITEM LISTALLER_STATUS_ITEM_CLASS LISTALLER_STATUS_ITEM_GET_CLASS LISTALLER_TYPE_APP_ITEM LISTALLER_TYPE_APP_LICENSE LISTALLER_TYPE_APP_STATE LISTALLER_TYPE_DATABASE_STATUS LISTALLER_TYPE_DOAP_DATA LISTALLER_TYPE_ERROR_ENUM LISTALLER_TYPE_ERROR_ITEM LISTALLER_TYPE_KEY_MANAGER LISTALLER_TYPE_MANAGER LISTALLER_TYPE_MESSAGE_ENUM LISTALLER_TYPE_MESSAGE_ITEM LISTALLER_TYPE_MESSAGE_OBJECT LISTALLER_TYPE_OBJ_CONNECT_FLAGS LISTALLER_TYPE_PROGRESS_ENUM LISTALLER_TYPE_PROGRESS_ITEM LISTALLER_TYPE_SECURITY_LEVEL LISTALLER_TYPE_SETUP LISTALLER_TYPE_SETUP_SETTINGS LISTALLER_TYPE_SIGN_STATUS LISTALLER_TYPE_SIGN_TRUST LISTALLER_TYPE_STATUS_ENUM LISTALLER_TYPE_STATUS_ITEM LISTALLER_TYPE_UPDATER LISTALLER_TYPE_UPDATE_ITEM LISTALLER_UPDATER LISTALLER_UPDATER_CLASS LISTALLER_UPDATER_GET_CLASS LISTALLER_UPDATE_ITEM LISTALLER_UPDATE_ITEM_CLASS LISTALLER_UPDATE_ITEM_GET_CLASS ListallerAppItemPrivate ListallerErrorItemPrivate ListallerIPKChangelogPrivate ListallerIPKControlDirPrivate ListallerIPKControlPrivate ListallerIPKSecurityInfoPrivate ListallerKeyManagerPrivate ListallerManagerPrivate ListallerMessageItemPrivate ListallerMessageObjectPrivate ListallerProgressItemPrivate ListallerSetupPrivate ListallerSetupSettingsPrivate ListallerStatusItemPrivate ListallerUpdateItemPrivate ListallerUpdaterPrivate listaller_app_item_get_type listaller_app_license_get_type listaller_app_state_get_type listaller_database_status_get_type listaller_dep_item_type_get_type listaller_doap_data_get_type listaller_error_enum_get_type listaller_error_item_get_type listaller_ipk_changelog_get_type listaller_ipk_control_dir_get_type listaller_ipk_control_get_type listaller_ipk_install_mode_get_type listaller_ipk_meta_file_get_type listaller_ipk_pack_control_get_type listaller_ipk_security_info_get_type listaller_key_manager_get_type listaller_manager_get_type listaller_message_enum_get_type listaller_message_item_get_type listaller_message_object_get_type listaller_obj_connect_flags_get_type listaller_progress_enum_get_type listaller_progress_item_get_type listaller_security_level_get_type listaller_setup_get_type listaller_setup_settings_get_type listaller_sign_status_get_type listaller_sign_trust_get_type listaller_status_enum_get_type listaller_status_item_get_type listaller_update_item_get_type listaller_updater_get_type
./Listaller-0.5.8/docs/api/clean.sh0000755000175000017500000000025512107260230017137 0ustar matthiasmatthiasrm -rf ccomments/ rm -rf cscan/ rm -rf html/ rm -f *.stamp rm -f *.txt rm -f *.args rm -f *.hierarchy rm -f *.interfaces rm -f *.prerequisites rm -f *.signals rm -f *.types ./Listaller-0.5.8/docs/api/cscan/0000755000175000017500000000000012176743546016631 5ustar matthiasmatthias./Listaller-0.5.8/docs/api/cscan/listaller-decl-list.txt0000664000175000017500000000000012110036275023211 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/cscan/listaller-overrides.txt0000664000175000017500000000000012110036275023333 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/cscan/listaller-decl.txt0000664000175000017500000000000012110036275022240 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/cscan/listaller.types0000664000175000017500000000000012110036275021660 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/listaller-overrides.txt0000664000175000017500000000000012110036275022244 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/listaller.hierarchy0000664000175000017500000000161512150512750021421 0ustar matthiasmatthiasGObject ListallerAppItem ListallerDoapData ListallerErrorItem ListallerIPKChangelog ListallerIPKControl ListallerIPKControlDir ListallerIPKPackControl ListallerIPKMetaFile ListallerIPKSecurityInfo ListallerMessageObject ListallerKeyManager ListallerManager ListallerSetup ListallerUpdater ListallerMessageItem ListallerProgressItem ListallerSetupSettings ListallerStatusItem ListallerUpdateItem GeeAbstractCollection GeeAbstractList GeeArrayList GInterface GTypePlugin GeeIterable GeeCollection GeeList GBoxed GValueArray ListallerAppLicense GFlags ListallerAppState ListallerIPKInstallMode GEnum ListallerDatabaseStatus ListallerDepItemType ListallerErrorEnum ListallerMessageEnum ListallerObjConnectFlags ListallerProgressEnum ListallerSecurityLevel ListallerSignStatus ListallerSignTrust ListallerStatusEnum ./Listaller-0.5.8/docs/api/listaller-decl.txt0000664000175000017500000020055612176742604021207 0ustar matthiasmatthias LISTALLER_TYPE_ERROR_ENUM #define LISTALLER_TYPE_ERROR_ENUM (listaller_error_enum_get_type ()) LISTALLER_TYPE_STATUS_ENUM #define LISTALLER_TYPE_STATUS_ENUM (listaller_status_enum_get_type ()) LISTALLER_TYPE_MESSAGE_ENUM #define LISTALLER_TYPE_MESSAGE_ENUM (listaller_message_enum_get_type ()) LISTALLER_TYPE_PROGRESS_ENUM #define LISTALLER_TYPE_PROGRESS_ENUM (listaller_progress_enum_get_type ()) LISTALLER_TYPE_ERROR_ITEM #define LISTALLER_TYPE_ERROR_ITEM (listaller_error_item_get_type ()) LISTALLER_ERROR_ITEM #define LISTALLER_ERROR_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_ERROR_ITEM, ListallerErrorItem)) LISTALLER_ERROR_ITEM_CLASS #define LISTALLER_ERROR_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_ERROR_ITEM, ListallerErrorItemClass)) LISTALLER_IS_ERROR_ITEM #define LISTALLER_IS_ERROR_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_ERROR_ITEM)) LISTALLER_IS_ERROR_ITEM_CLASS #define LISTALLER_IS_ERROR_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_ERROR_ITEM)) LISTALLER_ERROR_ITEM_GET_CLASS #define LISTALLER_ERROR_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_ERROR_ITEM, ListallerErrorItemClass)) LISTALLER_TYPE_MESSAGE_ITEM #define LISTALLER_TYPE_MESSAGE_ITEM (listaller_message_item_get_type ()) LISTALLER_MESSAGE_ITEM #define LISTALLER_MESSAGE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_MESSAGE_ITEM, ListallerMessageItem)) LISTALLER_MESSAGE_ITEM_CLASS #define LISTALLER_MESSAGE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_MESSAGE_ITEM, ListallerMessageItemClass)) LISTALLER_IS_MESSAGE_ITEM #define LISTALLER_IS_MESSAGE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_MESSAGE_ITEM)) LISTALLER_IS_MESSAGE_ITEM_CLASS #define LISTALLER_IS_MESSAGE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_MESSAGE_ITEM)) LISTALLER_MESSAGE_ITEM_GET_CLASS #define LISTALLER_MESSAGE_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_MESSAGE_ITEM, ListallerMessageItemClass)) LISTALLER_TYPE_STATUS_ITEM #define LISTALLER_TYPE_STATUS_ITEM (listaller_status_item_get_type ()) LISTALLER_STATUS_ITEM #define LISTALLER_STATUS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_STATUS_ITEM, ListallerStatusItem)) LISTALLER_STATUS_ITEM_CLASS #define LISTALLER_STATUS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_STATUS_ITEM, ListallerStatusItemClass)) LISTALLER_IS_STATUS_ITEM #define LISTALLER_IS_STATUS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_STATUS_ITEM)) LISTALLER_IS_STATUS_ITEM_CLASS #define LISTALLER_IS_STATUS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_STATUS_ITEM)) LISTALLER_STATUS_ITEM_GET_CLASS #define LISTALLER_STATUS_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_STATUS_ITEM, ListallerStatusItemClass)) LISTALLER_TYPE_PROGRESS_ITEM #define LISTALLER_TYPE_PROGRESS_ITEM (listaller_progress_item_get_type ()) LISTALLER_PROGRESS_ITEM #define LISTALLER_PROGRESS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_PROGRESS_ITEM, ListallerProgressItem)) LISTALLER_PROGRESS_ITEM_CLASS #define LISTALLER_PROGRESS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_PROGRESS_ITEM, ListallerProgressItemClass)) LISTALLER_IS_PROGRESS_ITEM #define LISTALLER_IS_PROGRESS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_PROGRESS_ITEM)) LISTALLER_IS_PROGRESS_ITEM_CLASS #define LISTALLER_IS_PROGRESS_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_PROGRESS_ITEM)) LISTALLER_PROGRESS_ITEM_GET_CLASS #define LISTALLER_PROGRESS_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_PROGRESS_ITEM, ListallerProgressItemClass)) LISTALLER_TYPE_UPDATE_ITEM #define LISTALLER_TYPE_UPDATE_ITEM (listaller_update_item_get_type ()) LISTALLER_UPDATE_ITEM #define LISTALLER_UPDATE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_UPDATE_ITEM, ListallerUpdateItem)) LISTALLER_UPDATE_ITEM_CLASS #define LISTALLER_UPDATE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_UPDATE_ITEM, ListallerUpdateItemClass)) LISTALLER_IS_UPDATE_ITEM #define LISTALLER_IS_UPDATE_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_UPDATE_ITEM)) LISTALLER_IS_UPDATE_ITEM_CLASS #define LISTALLER_IS_UPDATE_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_UPDATE_ITEM)) LISTALLER_UPDATE_ITEM_GET_CLASS #define LISTALLER_UPDATE_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_UPDATE_ITEM, ListallerUpdateItemClass)) LISTALLER_IPK_TYPE_CHANGELOG #define LISTALLER_IPK_TYPE_CHANGELOG (listaller_ipk_changelog_get_type ()) LISTALLER_IPK_CHANGELOG #define LISTALLER_IPK_CHANGELOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_CHANGELOG, ListallerIPKChangelog)) LISTALLER_IPK_CHANGELOG_CLASS #define LISTALLER_IPK_CHANGELOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_CHANGELOG, ListallerIPKChangelogClass)) LISTALLER_IPK_IS_CHANGELOG #define LISTALLER_IPK_IS_CHANGELOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_CHANGELOG)) LISTALLER_IPK_IS_CHANGELOG_CLASS #define LISTALLER_IPK_IS_CHANGELOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_CHANGELOG)) LISTALLER_IPK_CHANGELOG_GET_CLASS #define LISTALLER_IPK_CHANGELOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_CHANGELOG, ListallerIPKChangelogClass)) LISTALLER_TYPE_OBJ_CONNECT_FLAGS #define LISTALLER_TYPE_OBJ_CONNECT_FLAGS (listaller_obj_connect_flags_get_type ()) LISTALLER_TYPE_MESSAGE_OBJECT #define LISTALLER_TYPE_MESSAGE_OBJECT (listaller_message_object_get_type ()) LISTALLER_MESSAGE_OBJECT #define LISTALLER_MESSAGE_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_MESSAGE_OBJECT, ListallerMessageObject)) LISTALLER_MESSAGE_OBJECT_CLASS #define LISTALLER_MESSAGE_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_MESSAGE_OBJECT, ListallerMessageObjectClass)) LISTALLER_IS_MESSAGE_OBJECT #define LISTALLER_IS_MESSAGE_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_MESSAGE_OBJECT)) LISTALLER_IS_MESSAGE_OBJECT_CLASS #define LISTALLER_IS_MESSAGE_OBJECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_MESSAGE_OBJECT)) LISTALLER_MESSAGE_OBJECT_GET_CLASS #define LISTALLER_MESSAGE_OBJECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_MESSAGE_OBJECT, ListallerMessageObjectClass)) LISTALLER_IPK_TYPE_INSTALL_MODE #define LISTALLER_IPK_TYPE_INSTALL_MODE (listaller_ipk_install_mode_get_type ()) LISTALLER_TYPE_SETUP_SETTINGS #define LISTALLER_TYPE_SETUP_SETTINGS (listaller_setup_settings_get_type ()) LISTALLER_SETUP_SETTINGS #define LISTALLER_SETUP_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_SETUP_SETTINGS, ListallerSetupSettings)) LISTALLER_SETUP_SETTINGS_CLASS #define LISTALLER_SETUP_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_SETUP_SETTINGS, ListallerSetupSettingsClass)) LISTALLER_IS_SETUP_SETTINGS #define LISTALLER_IS_SETUP_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_SETUP_SETTINGS)) LISTALLER_IS_SETUP_SETTINGS_CLASS #define LISTALLER_IS_SETUP_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_SETUP_SETTINGS)) LISTALLER_SETUP_SETTINGS_GET_CLASS #define LISTALLER_SETUP_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_SETUP_SETTINGS, ListallerSetupSettingsClass)) LISTALLER_TYPE_APP_STATE #define LISTALLER_TYPE_APP_STATE (listaller_app_state_get_type ()) LISTALLER_TYPE_APP_LICENSE #define LISTALLER_TYPE_APP_LICENSE (listaller_app_license_get_type ()) LISTALLER_TYPE_APP_ITEM #define LISTALLER_TYPE_APP_ITEM (listaller_app_item_get_type ()) LISTALLER_APP_ITEM #define LISTALLER_APP_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_APP_ITEM, ListallerAppItem)) LISTALLER_APP_ITEM_CLASS #define LISTALLER_APP_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_APP_ITEM, ListallerAppItemClass)) LISTALLER_IS_APP_ITEM #define LISTALLER_IS_APP_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_APP_ITEM)) LISTALLER_IS_APP_ITEM_CLASS #define LISTALLER_IS_APP_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_APP_ITEM)) LISTALLER_APP_ITEM_GET_CLASS #define LISTALLER_APP_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_APP_ITEM, ListallerAppItemClass)) LISTALLER_TYPE_DATABASE_STATUS #define LISTALLER_TYPE_DATABASE_STATUS (listaller_database_status_get_type ()) LISTALLER_IPK_TYPE_CONTROL #define LISTALLER_IPK_TYPE_CONTROL (listaller_ipk_control_get_type ()) LISTALLER_IPK_CONTROL #define LISTALLER_IPK_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_CONTROL, ListallerIPKControl)) LISTALLER_IPK_CONTROL_CLASS #define LISTALLER_IPK_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_CONTROL, ListallerIPKControlClass)) LISTALLER_IPK_IS_CONTROL #define LISTALLER_IPK_IS_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_CONTROL)) LISTALLER_IPK_IS_CONTROL_CLASS #define LISTALLER_IPK_IS_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_CONTROL)) LISTALLER_IPK_CONTROL_GET_CLASS #define LISTALLER_IPK_CONTROL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_CONTROL, ListallerIPKControlClass)) LISTALLER_TYPE_DOAP_DATA #define LISTALLER_TYPE_DOAP_DATA (listaller_doap_data_get_type ()) LISTALLER_DOAP_DATA #define LISTALLER_DOAP_DATA(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_DOAP_DATA, ListallerDoapData)) LISTALLER_DOAP_DATA_CLASS #define LISTALLER_DOAP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_DOAP_DATA, ListallerDoapDataClass)) LISTALLER_IS_DOAP_DATA #define LISTALLER_IS_DOAP_DATA(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_DOAP_DATA)) LISTALLER_IS_DOAP_DATA_CLASS #define LISTALLER_IS_DOAP_DATA_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_DOAP_DATA)) LISTALLER_DOAP_DATA_GET_CLASS #define LISTALLER_DOAP_DATA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_DOAP_DATA, ListallerDoapDataClass)) LISTALLER_IPK_TYPE_META_FILE #define LISTALLER_IPK_TYPE_META_FILE (listaller_ipk_meta_file_get_type ()) LISTALLER_IPK_META_FILE #define LISTALLER_IPK_META_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_META_FILE, ListallerIPKMetaFile)) LISTALLER_IPK_META_FILE_CLASS #define LISTALLER_IPK_META_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_META_FILE, ListallerIPKMetaFileClass)) LISTALLER_IPK_IS_META_FILE #define LISTALLER_IPK_IS_META_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_META_FILE)) LISTALLER_IPK_IS_META_FILE_CLASS #define LISTALLER_IPK_IS_META_FILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_META_FILE)) LISTALLER_IPK_META_FILE_GET_CLASS #define LISTALLER_IPK_META_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_META_FILE, ListallerIPKMetaFileClass)) LISTALLER_IPK_TYPE_PACK_CONTROL #define LISTALLER_IPK_TYPE_PACK_CONTROL (listaller_ipk_pack_control_get_type ()) LISTALLER_IPK_PACK_CONTROL #define LISTALLER_IPK_PACK_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_PACK_CONTROL, ListallerIPKPackControl)) LISTALLER_IPK_PACK_CONTROL_CLASS #define LISTALLER_IPK_PACK_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_PACK_CONTROL, ListallerIPKPackControlClass)) LISTALLER_IPK_IS_PACK_CONTROL #define LISTALLER_IPK_IS_PACK_CONTROL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_PACK_CONTROL)) LISTALLER_IPK_IS_PACK_CONTROL_CLASS #define LISTALLER_IPK_IS_PACK_CONTROL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_PACK_CONTROL)) LISTALLER_IPK_PACK_CONTROL_GET_CLASS #define LISTALLER_IPK_PACK_CONTROL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_PACK_CONTROL, ListallerIPKPackControlClass)) LISTALLER_IPK_TYPE_CONTROL_DIR #define LISTALLER_IPK_TYPE_CONTROL_DIR (listaller_ipk_control_dir_get_type ()) LISTALLER_IPK_CONTROL_DIR #define LISTALLER_IPK_CONTROL_DIR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_CONTROL_DIR, ListallerIPKControlDir)) LISTALLER_IPK_CONTROL_DIR_CLASS #define LISTALLER_IPK_CONTROL_DIR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_CONTROL_DIR, ListallerIPKControlDirClass)) LISTALLER_IPK_IS_CONTROL_DIR #define LISTALLER_IPK_IS_CONTROL_DIR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_CONTROL_DIR)) LISTALLER_IPK_IS_CONTROL_DIR_CLASS #define LISTALLER_IPK_IS_CONTROL_DIR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_CONTROL_DIR)) LISTALLER_IPK_CONTROL_DIR_GET_CLASS #define LISTALLER_IPK_CONTROL_DIR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_CONTROL_DIR, ListallerIPKControlDirClass)) LISTALLER_TYPE_SECURITY_LEVEL #define LISTALLER_TYPE_SECURITY_LEVEL (listaller_security_level_get_type ()) LISTALLER_TYPE_SIGN_STATUS #define LISTALLER_TYPE_SIGN_STATUS (listaller_sign_status_get_type ()) LISTALLER_TYPE_SIGN_TRUST #define LISTALLER_TYPE_SIGN_TRUST (listaller_sign_trust_get_type ()) LISTALLER_IPK_TYPE_SECURITY_INFO #define LISTALLER_IPK_TYPE_SECURITY_INFO (listaller_ipk_security_info_get_type ()) LISTALLER_IPK_SECURITY_INFO #define LISTALLER_IPK_SECURITY_INFO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_IPK_TYPE_SECURITY_INFO, ListallerIPKSecurityInfo)) LISTALLER_IPK_SECURITY_INFO_CLASS #define LISTALLER_IPK_SECURITY_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_IPK_TYPE_SECURITY_INFO, ListallerIPKSecurityInfoClass)) LISTALLER_IPK_IS_SECURITY_INFO #define LISTALLER_IPK_IS_SECURITY_INFO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_IPK_TYPE_SECURITY_INFO)) LISTALLER_IPK_IS_SECURITY_INFO_CLASS #define LISTALLER_IPK_IS_SECURITY_INFO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_IPK_TYPE_SECURITY_INFO)) LISTALLER_IPK_SECURITY_INFO_GET_CLASS #define LISTALLER_IPK_SECURITY_INFO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_IPK_TYPE_SECURITY_INFO, ListallerIPKSecurityInfoClass)) LISTALLER_DEP_TYPE_ITEM_TYPE #define LISTALLER_DEP_TYPE_ITEM_TYPE (listaller_dep_item_type_get_type ()) LISTALLER_TYPE_KEY_MANAGER #define LISTALLER_TYPE_KEY_MANAGER (listaller_key_manager_get_type ()) LISTALLER_KEY_MANAGER #define LISTALLER_KEY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_KEY_MANAGER, ListallerKeyManager)) LISTALLER_KEY_MANAGER_CLASS #define LISTALLER_KEY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_KEY_MANAGER, ListallerKeyManagerClass)) LISTALLER_IS_KEY_MANAGER #define LISTALLER_IS_KEY_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_KEY_MANAGER)) LISTALLER_IS_KEY_MANAGER_CLASS #define LISTALLER_IS_KEY_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_KEY_MANAGER)) LISTALLER_KEY_MANAGER_GET_CLASS #define LISTALLER_KEY_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_KEY_MANAGER, ListallerKeyManagerClass)) LISTALLER_TYPE_MANAGER #define LISTALLER_TYPE_MANAGER (listaller_manager_get_type ()) LISTALLER_MANAGER #define LISTALLER_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_MANAGER, ListallerManager)) LISTALLER_MANAGER_CLASS #define LISTALLER_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_MANAGER, ListallerManagerClass)) LISTALLER_IS_MANAGER #define LISTALLER_IS_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_MANAGER)) LISTALLER_IS_MANAGER_CLASS #define LISTALLER_IS_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_MANAGER)) LISTALLER_MANAGER_GET_CLASS #define LISTALLER_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_MANAGER, ListallerManagerClass)) LISTALLER_TYPE_SETUP #define LISTALLER_TYPE_SETUP (listaller_setup_get_type ()) LISTALLER_SETUP #define LISTALLER_SETUP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_SETUP, ListallerSetup)) LISTALLER_SETUP_CLASS #define LISTALLER_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_SETUP, ListallerSetupClass)) LISTALLER_IS_SETUP #define LISTALLER_IS_SETUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_SETUP)) LISTALLER_IS_SETUP_CLASS #define LISTALLER_IS_SETUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_SETUP)) LISTALLER_SETUP_GET_CLASS #define LISTALLER_SETUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_SETUP, ListallerSetupClass)) LISTALLER_TYPE_UPDATER #define LISTALLER_TYPE_UPDATER (listaller_updater_get_type ()) LISTALLER_UPDATER #define LISTALLER_UPDATER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LISTALLER_TYPE_UPDATER, ListallerUpdater)) LISTALLER_UPDATER_CLASS #define LISTALLER_UPDATER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LISTALLER_TYPE_UPDATER, ListallerUpdaterClass)) LISTALLER_IS_UPDATER #define LISTALLER_IS_UPDATER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LISTALLER_TYPE_UPDATER)) LISTALLER_IS_UPDATER_CLASS #define LISTALLER_IS_UPDATER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LISTALLER_TYPE_UPDATER)) LISTALLER_UPDATER_GET_CLASS #define LISTALLER_UPDATER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LISTALLER_TYPE_UPDATER, ListallerUpdaterClass)) ListallerErrorEnum typedef enum { LISTALLER_ERROR_ENUM_INVALID, LISTALLER_ERROR_ENUM_INTERNAL, LISTALLER_ERROR_ENUM_SETUP_NOT_INITIALIZED, LISTALLER_ERROR_ENUM_IPK_LOADING_FAILED, LISTALLER_ERROR_ENUM_IPK_INCOMPLETE, LISTALLER_ERROR_ENUM_IPK_DAMAGED, LISTALLER_ERROR_ENUM_IPK_NOT_SUPPORTED, LISTALLER_ERROR_ENUM_OPERATION_NOT_ALLOWED, LISTALLER_ERROR_ENUM_UNPACKING_FAILED, LISTALLER_ERROR_ENUM_FILE_EXISTS, LISTALLER_ERROR_ENUM_HASH_MISSMATCH, LISTALLER_ERROR_ENUM_FILE_INSTALL_FAILED, LISTALLER_ERROR_ENUM_COPY_ERROR, LISTALLER_ERROR_ENUM_INSTALLATION_FAILED, LISTALLER_ERROR_ENUM_DATABASE_LOCKED, LISTALLER_ERROR_ENUM_DATABASE_FAILURE, LISTALLER_ERROR_ENUM_DATABASE_OPEN_FAILED, LISTALLER_ERROR_ENUM_ALREADY_INSTALLED, LISTALLER_ERROR_ENUM_REMOVAL_FAILED, LISTALLER_ERROR_ENUM_WRONG_ARCHITECTURE, LISTALLER_ERROR_ENUM_DEPENDENCY_MISSING, LISTALLER_ERROR_ENUM_DEPENDENCY_INSTALL_FAILED, LISTALLER_ERROR_ENUM_NATIVE_TRANSACTION_FAILED, LISTALLER_ERROR_ENUM_NETWORK_ERROR, LISTALLER_ERROR_ENUM_REFRESH_FAILED, LISTALLER_ERROR_ENUM_UPDATE_FAILED } ListallerErrorEnum; ListallerStatusEnum typedef enum { LISTALLER_STATUS_ENUM_UNKNOWN, LISTALLER_STATUS_ENUM_ACTION_STARTED, LISTALLER_STATUS_ENUM_RESOLVING_DEPENDENCIES, LISTALLER_STATUS_ENUM_INSTALLING_FILES, LISTALLER_STATUS_ENUM_REGISTERING_APPLICATION, LISTALLER_STATUS_ENUM_INSTALLATION_FINISHED, LISTALLER_STATUS_ENUM_REMOVAL_FINISHED } ListallerStatusEnum; ListallerMessageEnum typedef enum { LISTALLER_MESSAGE_ENUM_UNKNOWN, LISTALLER_MESSAGE_ENUM_INFO, LISTALLER_MESSAGE_ENUM_WARNING, LISTALLER_MESSAGE_ENUM_CRITICAL } ListallerMessageEnum; ListallerProgressEnum typedef enum { LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS, LISTALLER_PROGRESS_ENUM_ITEM_PROGRESS } ListallerProgressEnum; ListallerErrorItem struct _ListallerErrorItem { GObject parent_instance; ListallerErrorItemPrivate * priv; }; ListallerErrorItemClass struct _ListallerErrorItemClass { GObjectClass parent_class; }; ListallerMessageItem struct _ListallerMessageItem { GObject parent_instance; ListallerMessageItemPrivate * priv; }; ListallerMessageItemClass struct _ListallerMessageItemClass { GObjectClass parent_class; }; ListallerStatusItem struct _ListallerStatusItem { GObject parent_instance; ListallerStatusItemPrivate * priv; }; ListallerStatusItemClass struct _ListallerStatusItemClass { GObjectClass parent_class; }; ListallerProgressItem struct _ListallerProgressItem { GObject parent_instance; ListallerProgressItemPrivate * priv; }; ListallerProgressItemClass struct _ListallerProgressItemClass { GObjectClass parent_class; }; ListallerUpdateItem struct _ListallerUpdateItem { GObject parent_instance; ListallerUpdateItemPrivate * priv; }; ListallerUpdateItemClass struct _ListallerUpdateItemClass { GObjectClass parent_class; }; ListallerObjConnectFlags typedef enum { LISTALLER_OBJ_CONNECT_FLAGS_NONE, LISTALLER_OBJ_CONNECT_FLAGS_PROGRESS_TO_SUBPROGRESS, LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_PROGRESS, LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_ERROR_CODE } ListallerObjConnectFlags; ListallerMessageObject struct _ListallerMessageObject { GObject parent_instance; ListallerMessageObjectPrivate * priv; }; ListallerMessageObjectClass struct _ListallerMessageObjectClass { GObjectClass parent_class; void (*emit_message) (ListallerMessageObject* self, const gchar* msg); void (*emit_warning) (ListallerMessageObject* self, const gchar* msg); void (*emit_error) (ListallerMessageObject* self, ListallerErrorEnum id, const gchar* details); void (*change_progress) (ListallerMessageObject* self, gint prog_value); void (*change_item_progress) (ListallerMessageObject* self, const gchar* id, guint item_progress); }; ListallerIPKInstallMode typedef enum { LISTALLER_IPK_INSTALL_MODE_NONE = 0, LISTALLER_IPK_INSTALL_MODE_SHARED = 1 << 0, LISTALLER_IPK_INSTALL_MODE_PRIVATE = 1 << 1, LISTALLER_IPK_INSTALL_MODE_TEST = 1 << 2 } ListallerIPKInstallMode; ListallerSetupSettings struct _ListallerSetupSettings { GObject parent_instance; ListallerSetupSettingsPrivate * priv; }; ListallerSetupSettingsClass struct _ListallerSetupSettingsClass { GObjectClass parent_class; }; ListallerAppState typedef enum { LISTALLER_APP_STATE_UNKNOWN = 1 << 0, LISTALLER_APP_STATE_INSTALLED_SHARED = 1 << 1, LISTALLER_APP_STATE_INSTALLED_PRIVATE = 1 << 2, LISTALLER_APP_STATE_AVAILABLE = 1 << 3 } ListallerAppState; ListallerAppLicense struct _ListallerAppLicense { gchar* name; gchar* text; }; ListallerAppItem struct _ListallerAppItem { GObject parent_instance; ListallerAppItemPrivate * priv; }; ListallerAppItemClass struct _ListallerAppItemClass { GObjectClass parent_class; }; ListallerDatabaseError typedef enum { LISTALLER_DATABASE_ERROR_ERROR, LISTALLER_DATABASE_ERROR_BACKING, LISTALLER_DATABASE_ERROR_MEMORY, LISTALLER_DATABASE_ERROR_ABORT, LISTALLER_DATABASE_ERROR_LIMITS, LISTALLER_DATABASE_ERROR_TYPESPEC, LISTALLER_DATABASE_ERROR_LOCKED } ListallerDatabaseError; LISTALLER_DATABASE_ERROR #define LISTALLER_DATABASE_ERROR listaller_database_error_quark () ListallerDatabaseStatus typedef enum { LISTALLER_DATABASE_STATUS_OPENED, LISTALLER_DATABASE_STATUS_LOCKED, LISTALLER_DATABASE_STATUS_UNLOCKED, LISTALLER_DATABASE_STATUS_SUCCESS, LISTALLER_DATABASE_STATUS_FAILURE, LISTALLER_DATABASE_STATUS_CLOSED } ListallerDatabaseStatus; ListallerIPKControlDataError typedef enum { LISTALLER_IPK_CONTROL_DATA_ERROR_NO_DOAP, LISTALLER_IPK_CONTROL_DATA_ERROR_DOAP_INVALID, LISTALLER_IPK_CONTROL_DATA_ERROR_DEPLIST_INVALID, LISTALLER_IPK_CONTROL_DATA_ERROR_INTERNAL, LISTALLER_IPK_CONTROL_DATA_ERROR_UNKNOWN } ListallerIPKControlDataError; LISTALLER_IPK_CONTROL_DATA_ERROR #define LISTALLER_IPK_CONTROL_DATA_ERROR listaller_ipk_control_data_error_quark () ListallerIPKControl struct _ListallerIPKControl { GObject parent_instance; ListallerIPKControlPrivate * priv; ListallerDoapData* doap; ListallerIPKMetaFile* packSetting; ListallerAppItem* appItem; }; ListallerIPKControlClass struct _ListallerIPKControlClass { GObjectClass parent_class; }; ListallerIPKPackControl struct _ListallerIPKPackControl { ListallerIPKControl parent_instance; ListallerIPKPackControlPrivate * priv; }; ListallerIPKPackControlClass struct _ListallerIPKPackControlClass { ListallerIPKControlClass parent_class; }; ListallerIPKControlDir struct _ListallerIPKControlDir { ListallerIPKControl parent_instance; ListallerIPKControlDirPrivate * priv; }; ListallerIPKControlDirClass struct _ListallerIPKControlDirClass { ListallerIPKControlClass parent_class; }; ListallerSecurityLevel typedef enum { LISTALLER_SECURITY_LEVEL_DANGEROUS, LISTALLER_SECURITY_LEVEL_LOW, LISTALLER_SECURITY_LEVEL_MEDIUM, LISTALLER_SECURITY_LEVEL_HIGH } ListallerSecurityLevel; ListallerSignStatus typedef enum { LISTALLER_SIGN_STATUS_UNKNOWN, LISTALLER_SIGN_STATUS_VALID, LISTALLER_SIGN_STATUS_KEY_EXPIRED, LISTALLER_SIGN_STATUS_KEY_MISSING, LISTALLER_SIGN_STATUS_CERT_REVOKED, LISTALLER_SIGN_STATUS_SIG_EXPIRED, LISTALLER_SIGN_STATUS_BAD, LISTALLER_SIGN_STATUS_NO_PUBKEY } ListallerSignStatus; ListallerSignTrust typedef enum { LISTALLER_SIGN_TRUST_UNKNOWN, LISTALLER_SIGN_TRUST_BAD_VALUE, LISTALLER_SIGN_TRUST_UNDEFINED, LISTALLER_SIGN_TRUST_NEVER, LISTALLER_SIGN_TRUST_MARGINAL, LISTALLER_SIGN_TRUST_FULL, LISTALLER_SIGN_TRUST_ULTIMATE } ListallerSignTrust; ListallerIPKSecurityInfo struct _ListallerIPKSecurityInfo { GObject parent_instance; ListallerIPKSecurityInfoPrivate * priv; }; ListallerIPKSecurityInfoClass struct _ListallerIPKSecurityInfoClass { GObjectClass parent_class; }; ListallerIPKChangelog struct _ListallerIPKChangelog { GObject parent_instance; ListallerIPKChangelogPrivate * priv; }; ListallerIPKChangelogClass struct _ListallerIPKChangelogClass { GObjectClass parent_class; }; ListallerDepItemType typedef enum { LISTALLER_DEP_ITEM_TYPE_SHARED_LIB, LISTALLER_DEP_ITEM_TYPE_BINARY, LISTALLER_DEP_ITEM_TYPE_PYTHON, LISTALLER_DEP_ITEM_TYPE_PYTHON_2, LISTALLER_DEP_ITEM_TYPE_FILE, LISTALLER_DEP_ITEM_TYPE_UNKNOWN } ListallerDepItemType; ListallerKeyManager struct _ListallerKeyManager { ListallerMessageObject parent_instance; ListallerKeyManagerPrivate * priv; }; ListallerKeyManagerClass struct _ListallerKeyManagerClass { ListallerMessageObjectClass parent_class; }; ListallerManager struct _ListallerManager { ListallerMessageObject parent_instance; ListallerManagerPrivate * priv; }; ListallerManagerClass struct _ListallerManagerClass { ListallerMessageObjectClass parent_class; }; ListallerSetup struct _ListallerSetup { ListallerMessageObject parent_instance; ListallerSetupPrivate * priv; }; ListallerSetupClass struct _ListallerSetupClass { ListallerMessageObjectClass parent_class; }; ListallerUpdater struct _ListallerUpdater { ListallerMessageObject parent_instance; ListallerUpdaterPrivate * priv; }; ListallerUpdaterClass struct _ListallerUpdaterClass { ListallerMessageObjectClass parent_class; }; listaller_set_verbose_mode void gboolean enabled listaller_get_verbose_mode gboolean void listaller_set_console_mode void gboolean enabled listaller_set_clitool_mode void gboolean enabled listaller_add_log_domain void const gchar* log_domain listaller_utils_build_filename gchar * const gchar* first_element, ... listaller_error_enum_get_type GType void listaller_error_enum_to_string gchar * ListallerErrorEnum self listaller_status_enum_get_type GType void listaller_message_enum_get_type GType void listaller_message_enum_to_string gchar * ListallerMessageEnum self listaller_progress_enum_get_type GType void listaller_error_item_get_type GType void listaller_error_item_new ListallerErrorItem * ListallerErrorEnum type listaller_error_item_construct ListallerErrorItem * GType object_type, ListallerErrorEnum type listaller_error_item_to_string gchar * ListallerErrorItem* self listaller_error_item_get_error ListallerErrorEnum ListallerErrorItem* self listaller_error_item_get_details const gchar * ListallerErrorItem* self listaller_message_item_get_type GType void listaller_message_item_new ListallerMessageItem * ListallerMessageEnum type listaller_message_item_construct ListallerMessageItem * GType object_type, ListallerMessageEnum type listaller_message_item_to_string gchar * ListallerMessageItem* self listaller_message_item_get_mtype ListallerMessageEnum ListallerMessageItem* self listaller_message_item_get_details const gchar * ListallerMessageItem* self listaller_status_item_get_type GType void listaller_status_item_new ListallerStatusItem * ListallerStatusEnum type listaller_status_item_construct ListallerStatusItem * GType object_type, ListallerStatusEnum type listaller_status_item_get_status ListallerStatusEnum ListallerStatusItem* self listaller_status_item_get_info const gchar * ListallerStatusItem* self listaller_progress_item_get_type GType void listaller_progress_item_new ListallerProgressItem * void listaller_progress_item_construct ListallerProgressItem * GType object_type listaller_progress_item_get_prog_type ListallerProgressEnum ListallerProgressItem* self listaller_progress_item_get_item_id const gchar * ListallerProgressItem* self listaller_progress_item_get_value gint ListallerProgressItem* self listaller_update_item_get_type GType void listaller_update_item_new ListallerUpdateItem * void listaller_update_item_construct ListallerUpdateItem * GType object_type listaller_update_item_get_sw_type GType ListallerUpdateItem* self listaller_update_item_get_sw_old GObject * ListallerUpdateItem* self listaller_update_item_get_sw_new GObject * ListallerUpdateItem* self listaller_update_item_get_architecture const gchar * ListallerUpdateItem* self listaller_ipk_changelog_get_type GType void listaller_update_item_get_changelog ListallerIPKChangelog * ListallerUpdateItem* self listaller_update_item_get_completed gboolean ListallerUpdateItem* self listaller_obj_connect_flags_get_type GType void listaller_message_object_get_type GType void listaller_message_object_construct ListallerMessageObject * GType object_type listaller_message_object_set_error_hint_str void ListallerMessageObject* self, const gchar* str listaller_message_object_connect_with_object void ListallerMessageObject* self, ListallerMessageObject* other_obj, ListallerObjConnectFlags flags listaller_message_object_connect_with_object_all void ListallerMessageObject* self, ListallerMessageObject* other_obj listaller_utils_enable_translation void void listaller_ipk_install_mode_get_type GType void listaller_ipk_install_mode_is_all_set gboolean ListallerIPKInstallMode self, ListallerIPKInstallMode flags listaller_ipk_install_mode_is_any_set gboolean ListallerIPKInstallMode self, ListallerIPKInstallMode flags listaller_ipk_install_mode_set ListallerIPKInstallMode ListallerIPKInstallMode self, ListallerIPKInstallMode mode listaller_ipk_install_mode_unset ListallerIPKInstallMode ListallerIPKInstallMode self, ListallerIPKInstallMode mode listaller_setup_settings_get_type GType void listaller_setup_settings_lock void ListallerSetupSettings* self listaller_setup_settings_unlock void ListallerSetupSettings* self listaller_setup_settings_database_file gchar * ListallerSetupSettings* self listaller_setup_settings_appregister_dir gchar * ListallerSetupSettings* self listaller_setup_settings_appdata_dir gchar * ListallerSetupSettings* self listaller_setup_settings_depdata_dir gchar * ListallerSetupSettings* self listaller_setup_settings_icon_base_dir gchar * ListallerSetupSettings* self listaller_setup_settings_icon_size_dir gchar * ListallerSetupSettings* self, gint size listaller_setup_settings_applications_dir gchar * ListallerSetupSettings* self listaller_setup_settings_get_current_mode ListallerIPKInstallMode ListallerSetupSettings* self listaller_setup_settings_get_locked gboolean ListallerSetupSettings* self listaller_setup_settings_get_shared_mode gboolean ListallerSetupSettings* self listaller_setup_settings_get_private_mode gboolean ListallerSetupSettings* self listaller_setup_settings_get_test_mode gboolean ListallerSetupSettings* self listaller_app_state_get_type GType void listaller_app_state_to_string gchar * ListallerAppState self listaller_app_state_is_all_set gboolean ListallerAppState self, ListallerAppState flags listaller_app_state_is_any_set gboolean ListallerAppState self, ListallerAppState flags listaller_app_state_set ListallerAppState ListallerAppState self, ListallerAppState mode listaller_app_state_unset ListallerAppState ListallerAppState self, ListallerAppState mode listaller_app_license_get_type GType void listaller_app_license_dup ListallerAppLicense * const ListallerAppLicense* self listaller_app_license_free void ListallerAppLicense* self listaller_app_license_copy void const ListallerAppLicense* self, ListallerAppLicense* dest listaller_app_license_destroy void ListallerAppLicense* self listaller_app_item_get_type GType void listaller_app_item_new_blank ListallerAppItem * void listaller_app_item_construct_blank ListallerAppItem * GType object_type listaller_app_item_set_origin_local void ListallerAppItem* self listaller_app_item_new ListallerAppItem * const gchar* afullname, const gchar* aversion, const gchar* desktop_filename listaller_app_item_construct ListallerAppItem * GType object_type, const gchar* afullname, const gchar* aversion, const gchar* desktop_filename listaller_app_item_new_from_id ListallerAppItem * const gchar* application_id listaller_app_item_construct_from_id ListallerAppItem * GType object_type, const gchar* application_id listaller_app_item_new_from_desktopfile ListallerAppItem * const gchar* desktop_filename listaller_app_item_construct_from_desktopfile ListallerAppItem * GType object_type, const gchar* desktop_filename listaller_app_item_to_string gchar * ListallerAppItem* self listaller_app_item_set_license_name void ListallerAppItem* self, const gchar* lName listaller_app_item_set_license_text void ListallerAppItem* self, const gchar* lText listaller_app_item_set_license_from_doap_name void ListallerAppItem* self, const gchar* name listaller_app_item_fast_check void ListallerAppItem* self listaller_app_item_validate_appid gboolean const gchar* application_id listaller_app_item_update_with_appid void ListallerAppItem* self, gboolean fast listaller_app_item_build_pk_package_id gchar * ListallerAppItem* self listaller_app_item_update_with_desktop_file void ListallerAppItem* self listaller_app_item_get_raw_cmd gchar * ListallerAppItem* self, gboolean subst_cmd listaller_app_item_compare_version_with gint ListallerAppItem* self, const gchar* bversion listaller_app_item_get_idname const gchar * ListallerAppItem* self listaller_app_item_get_full_name const gchar * ListallerAppItem* self listaller_app_item_set_full_name void ListallerAppItem* self, const gchar* value listaller_app_item_get_version const gchar * ListallerAppItem* self listaller_app_item_set_version void ListallerAppItem* self, const gchar* value listaller_app_item_get_summary const gchar * ListallerAppItem* self listaller_app_item_set_summary void ListallerAppItem* self, const gchar* value listaller_app_item_get_description const gchar * ListallerAppItem* self listaller_app_item_set_description void ListallerAppItem* self, const gchar* value listaller_app_item_get_author const gchar * ListallerAppItem* self listaller_app_item_set_author void ListallerAppItem* self, const gchar* value listaller_app_item_get_publisher const gchar * ListallerAppItem* self listaller_app_item_set_publisher void ListallerAppItem* self, const gchar* value listaller_app_item_get_license void ListallerAppItem* self, ListallerAppLicense* result listaller_app_item_set_license void ListallerAppItem* self, ListallerAppLicense* value listaller_app_item_get_categories const gchar * ListallerAppItem* self listaller_app_item_set_categories void ListallerAppItem* self, const gchar* value listaller_app_item_get_size_installed gint ListallerAppItem* self listaller_app_item_set_size_installed void ListallerAppItem* self, gint value listaller_app_item_get_desktop_file const gchar * ListallerAppItem* self listaller_app_item_set_desktop_file void ListallerAppItem* self, const gchar* value listaller_app_item_get_state ListallerAppState ListallerAppItem* self listaller_app_item_set_state void ListallerAppItem* self, ListallerAppState value listaller_app_item_get_icon_name const gchar * ListallerAppItem* self listaller_app_item_set_icon_name void ListallerAppItem* self, const gchar* value listaller_app_item_get_website const gchar * ListallerAppItem* self listaller_app_item_set_website void ListallerAppItem* self, const gchar* value listaller_app_item_get_install_time gint64 ListallerAppItem* self listaller_app_item_set_install_time void ListallerAppItem* self, gint64 value listaller_app_item_get_replaces const gchar * ListallerAppItem* self listaller_app_item_set_replaces void ListallerAppItem* self, const gchar* value listaller_app_item_get_origin const gchar * ListallerAppItem* self listaller_app_item_set_origin void ListallerAppItem* self, const gchar* value listaller_app_item_get_dependencies_str const gchar * ListallerAppItem* self listaller_app_item_set_dependencies_str void ListallerAppItem* self, const gchar* value listaller_app_item_get_appid const gchar * ListallerAppItem* self listaller_database_error_quark GQuark void listaller_database_status_get_type GType void listaller_database_status_to_string gchar * ListallerDatabaseStatus self listaller_ipk_control_data_error_quark GQuark void listaller_ipk_control_get_type GType void listaller_doap_data_get_type GType void listaller_ipk_meta_file_get_type GType void listaller_ipk_control_open_doap gboolean ListallerIPKControl* self, const gchar* data listaller_ipk_control_open_doap_file gboolean ListallerIPKControl* self, const gchar* fname listaller_ipk_control_open_packsetting gboolean ListallerIPKControl* self, const gchar* pksFName listaller_ipk_control_get_ipk_version gchar * ListallerIPKControl* self listaller_ipk_control_set_ipk_version void ListallerIPKControl* self, const gchar* ipkV listaller_ipk_control_get_architectures gchar * ListallerIPKControl* self listaller_ipk_control_set_architectures void ListallerIPKControl* self, const gchar* archs listaller_ipk_control_get_replaces gchar * ListallerIPKControl* self listaller_ipk_control_set_replaces void ListallerIPKControl* self, const gchar* repList listaller_ipk_control_set_install_modes void ListallerIPKControl* self, ListallerIPKInstallMode modes listaller_ipk_control_get_install_modes ListallerIPKInstallMode ListallerIPKControl* self listaller_ipk_control_get_application ListallerAppItem * ListallerIPKControl* self listaller_ipk_control_set_dependencies void ListallerIPKControl* self, const gchar* dependencies_list, const gchar* arch listaller_ipk_control_get_dependencies gchar * ListallerIPKControl* self, const gchar* arch, gboolean arch_only listaller_ipk_control_set_license_text_from_file gboolean ListallerIPKControl* self, const gchar* fname listaller_ipk_control_set_license_text void ListallerIPKControl* self, const gchar* txt listaller_ipk_control_get_user_accept_license gboolean ListallerIPKControl* self listaller_ipk_control_set_user_accept_license void ListallerIPKControl* self, gboolean value listaller_ipk_pack_control_get_type GType void listaller_ipk_pack_control_new ListallerIPKPackControl * void listaller_ipk_pack_control_construct ListallerIPKPackControl * GType object_type listaller_ipk_pack_control_open_control gboolean ListallerIPKPackControl* self, const gchar* fPackSetting, const gchar* fDoap listaller_ipk_pack_control_create_new gboolean ListallerIPKPackControl* self, const gchar* newDoapData, const gchar* ipkV listaller_ipk_pack_control_is_delta_pkg gboolean ListallerIPKPackControl* self listaller_ipk_pack_control_save_to_dir gboolean ListallerIPKPackControl* self, const gchar* dirPath listaller_ipk_pack_control_get_files gchar ** ListallerIPKPackControl* self listaller_ipk_pack_control_update_installmode_data void ListallerIPKPackControl* self listaller_ipk_control_dir_get_type GType void listaller_ipk_control_dir_new ListallerIPKControlDir * void listaller_ipk_control_dir_construct ListallerIPKControlDir * GType object_type listaller_ipk_control_dir_open_dir gboolean ListallerIPKControlDir* self, const gchar* dir, GError** error listaller_ipk_control_dir_get_files_rootdir gchar * ListallerIPKControlDir* self listaller_ipk_control_dir_auto_dependency_search gboolean ListallerIPKControlDir* self listaller_ipk_control_dir_get_doap_data gchar * ListallerIPKControlDir* self listaller_ipk_control_dir_save_control gboolean ListallerIPKControlDir* self listaller_security_level_get_type GType void listaller_security_level_to_string gchar * ListallerSecurityLevel self listaller_security_level_from_string ListallerSecurityLevel const gchar* str listaller_sign_status_get_type GType void listaller_sign_status_to_string gchar * ListallerSignStatus self listaller_sign_trust_get_type GType void listaller_sign_trust_to_string gchar * ListallerSignTrust self listaller_ipk_security_info_get_type GType void listaller_ipk_security_info_get_level ListallerSecurityLevel ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_level_as_sentence gchar * ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_level_as_string gchar * ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_signature_status ListallerSignStatus ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_signature_trustlevel ListallerSignTrust ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_user_names const gchar * ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_key_fpr const gchar * ListallerIPKSecurityInfo* self listaller_ipk_security_info_get_trust_reason const gchar * ListallerIPKSecurityInfo* self listaller_get_version_info_str gchar * void listaller_get_full_version_info_str gchar * void listaller_compare_versions gint const gchar* a, const gchar* b listaller_ipk_changelog_new ListallerIPKChangelog * void listaller_ipk_changelog_construct ListallerIPKChangelog * GType object_type listaller_ipk_changelog_open gboolean ListallerIPKChangelog* self, const gchar* fname listaller_dep_item_type_get_type GType void listaller_key_manager_get_type GType void listaller_key_manager_new ListallerKeyManager * void listaller_key_manager_construct ListallerKeyManager * GType object_type listaller_key_manager_import_key gboolean ListallerKeyManager* self, const gchar* fpr listaller_key_manager_get_key_info gchar * ListallerKeyManager* self, const gchar* pattern listaller_manager_get_type GType void listaller_manager_new ListallerManager * gboolean shared_mode listaller_manager_construct ListallerManager * GType object_type, gboolean shared_mode listaller_manager_filter_applications gboolean ListallerManager* self, ListallerAppState filter, GeeArrayList** app_list listaller_manager_find_applications_by_values gboolean ListallerManager* self, const gchar* filter, gchar** values, GeeArrayList** appList listaller_manager_get_applications_by_fullname GeeArrayList * ListallerManager* self, const gchar* full_name listaller_manager_get_application_by_idname ListallerAppItem * ListallerManager* self, const gchar* idname listaller_manager_remove_application gboolean ListallerManager* self, ListallerAppItem* app listaller_manager_refresh_appitem_data gboolean ListallerManager* self, ListallerAppItem** item listaller_manager_get_application_filelist gchar ** ListallerManager* self, ListallerAppItem* app listaller_manager_get_app_ld_environment gchar * ListallerManager* self, ListallerAppItem* app listaller_manager_refresh_repository_cache gboolean ListallerManager* self listaller_setup_get_type GType void listaller_manager_prepare_setup_for_app ListallerSetup * ListallerManager* self, const gchar* app_idname listaller_manager_get_settings ListallerSetupSettings * ListallerManager* self listaller_setup_new ListallerSetup * const gchar* ipkfilename listaller_setup_construct ListallerSetup * GType object_type, const gchar* ipkfilename listaller_setup_supported_install_modes ListallerIPKInstallMode ListallerSetup* self listaller_setup_set_install_mode gboolean ListallerSetup* self, ListallerIPKInstallMode mode listaller_setup_get_install_mode ListallerIPKInstallMode ListallerSetup* self listaller_setup_initialize gboolean ListallerSetup* self listaller_setup_get_current_application ListallerAppItem * ListallerSetup* self listaller_setup_kill_installation_process void ListallerSetup* self listaller_setup_get_replaced_native_packs gchar * ListallerSetup* self listaller_setup_run_installation gboolean ListallerSetup* self listaller_setup_get_security_info ListallerIPKSecurityInfo * ListallerSetup* self listaller_setup_get_fname const gchar * ListallerSetup* self listaller_setup_get_settings ListallerSetupSettings * ListallerSetup* self listaller_setup_get_control ListallerIPKControl * ListallerSetup* self listaller_updater_get_type GType void listaller_updater_new ListallerUpdater * gboolean shared_mode listaller_updater_construct ListallerUpdater * GType object_type, gboolean shared_mode listaller_updater_find_updates void ListallerUpdater* self listaller_updater_apply_updates gboolean ListallerUpdater* self, GeeArrayList* update_list listaller_updater_apply_updates_all gboolean ListallerUpdater* self listaller_updater_get_settings ListallerSetupSettings * ListallerUpdater* self listaller_updater_set_settings void ListallerUpdater* self, ListallerSetupSettings* value listaller_updater_get_available_updates GeeArrayList * ListallerUpdater* self ListallerAppItemPrivate ListallerProgressItemPrivate ListallerDoapDataClass ListallerSetupPrivate ListallerIPKChangelogPrivate ListallerStatusItemPrivate ListallerIPKSecurityInfoPrivate ListallerUpdateItemPrivate ListallerIPKControlPrivate ListallerUpdaterPrivate ListallerErrorItemPrivate ListallerMessageItemPrivate ListallerDoapData ListallerIPKControlDirPrivate ListallerIPKMetaFileClass ListallerKeyManagerPrivate ListallerIPKMetaFile ListallerMessageObjectPrivate ListallerManagerPrivate ListallerIPKPackControlPrivate ListallerSetupSettingsPrivate ./Listaller-0.5.8/docs/api/listaller.args0000664000175000017500000002276412150512750020407 0ustar matthiasmatthias ListallerAppItem::appid gchar* r appid appid. NULL ListallerAppItem::author gchar* rw author author. NULL ListallerAppItem::categories gchar* rw categories categories. NULL ListallerAppItem::dependencies-str gchar* rw dependencies-str dependencies-str. NULL ListallerAppItem::description gchar* rw description description. NULL ListallerAppItem::desktop-file gchar* rw desktop-file desktop-file. NULL ListallerAppItem::full-name gchar* rw full-name full-name. NULL ListallerAppItem::icon-name gchar* rw icon-name icon-name. NULL ListallerAppItem::idname gchar* rw idname idname. NULL ListallerAppItem::install-time gint64 rw install-time install-time. 0 ListallerAppItem::license ListallerAppLicense* rw license license. ListallerAppItem::origin gchar* rw origin origin. NULL ListallerAppItem::publisher gchar* rw publisher publisher. NULL ListallerAppItem::replaces gchar* rw replaces replaces. NULL ListallerAppItem::size-installed gint rw size-installed size-installed. 0 ListallerAppItem::state ListallerAppState rw state state. ListallerAppItem::summary gchar* rw summary summary. NULL ListallerAppItem::version gchar* rw version version. NULL ListallerAppItem::website gchar* rw website website. NULL ListallerErrorItem::details gchar* rw details details. NULL ListallerErrorItem::error ListallerErrorEnum rw error error. LISTALLER_ERROR_ENUM_INVALID ListallerIPKControl::user-accept-license gboolean rw user-accept-license user-accept-license. FALSE ListallerIPKSecurityInfo::key-fpr gchar* rw key-fpr key-fpr. NULL ListallerIPKSecurityInfo::signature-status ListallerSignStatus rw signature-status signature-status. LISTALLER_SIGN_STATUS_UNKNOWN ListallerIPKSecurityInfo::signature-trustlevel ListallerSignTrust rw signature-trustlevel signature-trustlevel. LISTALLER_SIGN_TRUST_UNKNOWN ListallerIPKSecurityInfo::trust-reason gchar* rw trust-reason trust-reason. NULL ListallerIPKSecurityInfo::user-names gchar* rw user-names user-names. NULL ListallerManager::settings ListallerSetupSettings* rw settings settings. ListallerMessageItem::details gchar* rw details details. NULL ListallerMessageItem::mtype ListallerMessageEnum rw mtype mtype. LISTALLER_MESSAGE_ENUM_UNKNOWN ListallerProgressItem::item-id gchar* rw item-id item-id. NULL ListallerProgressItem::prog-type ListallerProgressEnum rw prog-type prog-type. LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS ListallerProgressItem::value gint rw value value. 0 ListallerSetup::control ListallerIPKControl* r control control. ListallerSetup::fname gchar* r fname fname. NULL ListallerSetup::settings ListallerSetupSettings* r settings settings. ListallerSetupSettings::current-mode ListallerIPKInstallMode rw current-mode current-mode. ListallerSetupSettings::locked gboolean r locked locked. FALSE ListallerSetupSettings::private-mode gboolean r private-mode private-mode. FALSE ListallerSetupSettings::shared-mode gboolean r shared-mode shared-mode. FALSE ListallerSetupSettings::test-mode gboolean r test-mode test-mode. FALSE ListallerStatusItem::info gchar* rw info info. NULL ListallerStatusItem::status ListallerStatusEnum rw status status. LISTALLER_STATUS_ENUM_UNKNOWN ListallerUpdateItem::architecture gchar* rw architecture architecture. NULL ListallerUpdateItem::changelog ListallerIPKChangelog* rw changelog changelog. ListallerUpdateItem::completed gboolean rw completed completed. FALSE ListallerUpdateItem::sw-new GObject* rw sw-new sw-new. ListallerUpdateItem::sw-old GObject* rw sw-old sw-old. ListallerUpdateItem::sw-type GType* void rw sw-type sw-type. ListallerUpdater::available-updates GeeArrayList* r available-updates available-updates. ListallerUpdater::settings ListallerSetupSettings* rw settings settings. ./Listaller-0.5.8/docs/api/listaller-undocumented.txt0000664000175000017500000001437712176743215022775 0ustar matthiasmatthias63% symbol docs coverage. 292 symbols documented. 17 symbols incomplete. 175 not documented. ListallerAppLicense () ListallerAppState () ListallerDatabaseError () ListallerDatabaseStatus () ListallerDepComponentType ListallerDepItemType () ListallerErrorEnum () ListallerIPKControlDataError () ListallerIPKDependency:architecture ListallerIPKDependency:author ListallerIPKDependency:description ListallerIPKDependency:environment ListallerIPKDependency:feed-url ListallerIPKDependency:full-name ListallerIPKDependency:homepage ListallerIPKDependency:idname ListallerIPKDependency:install-time ListallerIPKDependency:origin ListallerIPKDependency:raw-complist ListallerIPKDependency:satisfied ListallerIPKDependency:summary ListallerIPKDependency:version ListallerIPKInstallMode () ListallerManager::application ListallerManager::status-changed ListallerMessageEnum () ListallerMessageObject::error-code ListallerMessageObject::message ListallerMessageObject::progress ListallerMessageObjectClass (emit_message, emit_warning, emit_error, change_progress, change_item_progress) ListallerObjConnectFlags () ListallerProgressEnum () ListallerSecurityLevel () ListallerSetup::status-changed ListallerSignStatus () ListallerSignTrust () ListallerStatusEnum () ListallerUpdater::update listaller_add_log_domain listaller_app_item_compare_version_with listaller_app_item_fast_check listaller_app_item_get_license (result) listaller_app_item_get_raw_cmd listaller_app_item_new listaller_app_item_new_blank listaller_app_item_new_from_desktopfile listaller_app_item_new_from_id listaller_app_item_set_license_from_doap_name listaller_app_item_set_license_name listaller_app_item_set_license_text listaller_app_item_set_origin_local listaller_app_item_to_string listaller_app_item_update_with_appid listaller_app_item_update_with_desktop_file listaller_app_item_validate_appid listaller_app_state_is_all_set listaller_app_state_is_any_set listaller_app_state_set listaller_app_state_to_string listaller_app_state_unset listaller_database_status_to_string listaller_error_enum_to_string listaller_error_item_new listaller_error_item_to_string listaller_get_verbose_mode listaller_ipk_changelog_new listaller_ipk_changelog_open listaller_ipk_control_dir_auto_dependency_search listaller_ipk_control_dir_get_doap_data listaller_ipk_control_dir_get_files_rootdir listaller_ipk_control_dir_new listaller_ipk_control_dir_open_dir listaller_ipk_control_dir_save_control listaller_ipk_control_get_application listaller_ipk_control_get_dependencies listaller_ipk_control_get_install_modes listaller_ipk_control_get_ipk_version listaller_ipk_control_open_doap listaller_ipk_control_open_doap_file listaller_ipk_control_open_packsetting listaller_ipk_control_set_dependencies listaller_ipk_control_set_install_modes listaller_ipk_control_set_ipk_version listaller_ipk_control_set_license_text listaller_ipk_control_set_license_text_from_file listaller_ipk_control_set_replaces listaller_ipk_dependency_add_component listaller_ipk_dependency_add_component_list listaller_ipk_dependency_component_get_name listaller_ipk_dependency_component_get_type listaller_ipk_dependency_get_install_dir_for_setting listaller_ipk_dependency_get_installdata listaller_ipk_dependency_get_installdata_as_string listaller_ipk_dependency_has_component listaller_ipk_dependency_has_components listaller_ipk_dependency_has_feed listaller_ipk_dependency_has_installdata listaller_ipk_dependency_regenerate_depid listaller_ipk_install_mode_is_all_set listaller_ipk_install_mode_is_any_set listaller_ipk_install_mode_set listaller_ipk_install_mode_unset listaller_ipk_pack_control_create_new listaller_ipk_pack_control_get_files listaller_ipk_pack_control_is_delta_pkg listaller_ipk_pack_control_new listaller_ipk_pack_control_open_control listaller_ipk_pack_control_save_to_dir listaller_ipk_pack_control_update_installmode_data listaller_ipk_security_info_get_level listaller_key_manager_get_key_info listaller_key_manager_import_key listaller_key_manager_new listaller_manager_filter_applications listaller_manager_get_application_by_idname listaller_manager_get_application_filelist listaller_manager_get_applications_by_fullname listaller_manager_prepare_setup_for_app listaller_manager_refresh_appitem_data listaller_manager_remove_application listaller_message_enum_to_string listaller_message_item_new listaller_message_item_to_string listaller_message_object_connect_with_object listaller_message_object_connect_with_object_all listaller_message_object_set_error_hint_str listaller_progress_item_new listaller_report_add_error listaller_report_add_info listaller_report_add_message listaller_report_add_warning listaller_report_clear listaller_report_clear_current listaller_report_contains_error listaller_report_delete listaller_report_get_instance listaller_report_is_empty listaller_report_log_error listaller_report_log_info listaller_report_log_message listaller_report_log_warning listaller_report_new listaller_report_set_print_fatal listaller_report_set_print_fatal_msg listaller_report_to_string listaller_security_level_from_string listaller_security_level_to_string listaller_set_clitool_mode listaller_set_console_mode listaller_set_verbose_mode listaller_setup_get_current_application listaller_setup_get_install_mode listaller_setup_get_security_info listaller_setup_initialize listaller_setup_new listaller_setup_set_install_mode listaller_setup_settings_appdata_dir listaller_setup_settings_applications_dir listaller_setup_settings_database_file listaller_setup_settings_depdata_dir listaller_setup_settings_icon_base_dir listaller_setup_settings_icon_size_dir listaller_setup_supported_install_modes listaller_sign_status_to_string listaller_sign_trust_to_string listaller_status_item_new listaller_update_item_new listaller_utils_enable_translation components:Long_Description components:Short_Description config-global:Long_Description config-global:Short_Description database-internal:Long_Description database-internal:Short_Description ipk-changelog:Long_Description ipk-control:Long_Description logging:Long_Description logging:Short_Description reporting:Long_Description setup-settings:Long_Description status:Long_Description utils:Long_Description version:Long_Description version:Short_Description ./Listaller-0.5.8/docs/api/xml/0000775000175000017500000000000012176743547016345 5ustar matthiasmatthias./Listaller-0.5.8/docs/api/xml/listaller-doc.top0000664000175000017500000000000012176743547021615 0ustar matthiasmatthias./Listaller-0.5.8/docs/api/xml/api-index-deprecated.xml0000664000175000017500000000042712176743547023046 0ustar matthiasmatthias ]> ./Listaller-0.5.8/docs/api/xml/manager.xml0000664000175000017500000007111512176743547020506 0ustar matthiasmatthias ]> ListallerManager 3 LISTALLER Library ListallerManager Allows managing Listaller applications Synopsis #define LISTALLER_TYPE_MANAGER gboolean listaller_manager_filter_applications (ListallerManager *self, ListallerAppState filter, GeeArrayList **app_list); gboolean listaller_manager_find_applications_by_values (ListallerManager *self, const gchar *filter, gchar **values, GeeArrayList **appList); GeeArrayList * listaller_manager_get_applications_by_fullname (ListallerManager *self, const gchar *full_name); ListallerAppItem * listaller_manager_get_application_by_idname (ListallerManager *self, const gchar *idname); gboolean listaller_manager_remove_application (ListallerManager *self, ListallerAppItem *app); gboolean listaller_manager_refresh_appitem_data (ListallerManager *self, ListallerAppItem **item); gchar ** listaller_manager_get_application_filelist (ListallerManager *self, ListallerAppItem *app); gchar * listaller_manager_get_app_ld_environment (ListallerManager *self, ListallerAppItem *app); gboolean listaller_manager_refresh_repository_cache (ListallerManager *self); ListallerSetup * listaller_manager_prepare_setup_for_app (ListallerManager *self, const gchar *app_idname); ListallerManager * listaller_manager_new (gboolean shared_mode); ListallerSetupSettings * listaller_manager_get_settings (ListallerManager *self); struct ListallerManager; struct ListallerManagerClass; Object Hierarchy GObject +----ListallerMessageObject +----ListallerManager Properties "settings" ListallerSetupSettings* : Read / Write Signals "application" : Run Last "status-changed" : Run Last Description This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources. Details LISTALLER_TYPE_MANAGER LISTALLER_TYPE_MANAGER #define LISTALLER_TYPE_MANAGER (listaller_manager_get_type ()) The type for ListallerManager. listaller_manager_filter_applications () listaller_manager_filter_applications gboolean listaller_manager_filter_applications (ListallerManager *self, ListallerAppState filter, GeeArrayList **app_list); self : the ListallerManager instance filter :   app_list :   listaller_manager_find_applications_by_values () listaller_manager_find_applications_by_values gboolean listaller_manager_find_applications_by_values (ListallerManager *self, const gchar *filter, gchar **values, GeeArrayList **appList); Find applications which match the strings in values self : the ListallerManager instance filter :  . Filter, which is applied on the results. [in] values :  . Null-terminated list of strings to search for. [in][array length=values_length1] values_length1 : length of the values array appList :  . ArrayList of AppItems to store the result, or NULL (all applications are also emitted in the "application" signal). [out] listaller_manager_get_applications_by_fullname () listaller_manager_get_applications_by_fullname GeeArrayList * listaller_manager_get_applications_by_fullname (ListallerManager *self, const gchar *full_name); self : the ListallerManager instance full_name :   listaller_manager_get_application_by_idname () listaller_manager_get_application_by_idname ListallerAppItem * listaller_manager_get_application_by_idname (ListallerManager *self, const gchar *idname); self : the ListallerManager instance idname :   listaller_manager_remove_application () listaller_manager_remove_application gboolean listaller_manager_remove_application (ListallerManager *self, ListallerAppItem *app); self : the ListallerManager instance app :   listaller_manager_refresh_appitem_data () listaller_manager_refresh_appitem_data gboolean listaller_manager_refresh_appitem_data (ListallerManager *self, ListallerAppItem **item); self : the ListallerManager instance item :   listaller_manager_get_application_filelist () listaller_manager_get_application_filelist gchar ** listaller_manager_get_application_filelist (ListallerManager *self, ListallerAppItem *app); self : the ListallerManager instance app :   Returns :. [array length=result_length1] listaller_manager_get_app_ld_environment () listaller_manager_get_app_ld_environment gchar * listaller_manager_get_app_ld_environment (ListallerManager *self, ListallerAppItem *app); Get the LD_LIBRARY_PATH environment for an application. self : the ListallerManager instance app :  . AppItem belonging to an Listaller-installed app. [in] listaller_manager_refresh_repository_cache () listaller_manager_refresh_repository_cache gboolean listaller_manager_refresh_repository_cache (ListallerManager *self); Update the 3rd-party remote application cache. This will allow querying for new updates. self : the ListallerManager instance Returns :TRUE if refresh was successful. listaller_manager_prepare_setup_for_app () listaller_manager_prepare_setup_for_app ListallerSetup * listaller_manager_prepare_setup_for_app (ListallerManager *self, const gchar *app_idname); self : the ListallerManager instance app_idname :   listaller_manager_new () listaller_manager_new ListallerManager * listaller_manager_new (gboolean shared_mode); Create a new Listaller application manager shared_mode :  . Whether we are in shared mode or not. [in] listaller_manager_get_settings () listaller_manager_get_settings ListallerSetupSettings * listaller_manager_get_settings (ListallerManager *self); Get and return the current value of the "settings" property. self : the ListallerManager instance to query Returns :the value of the "settings" property struct ListallerManager ListallerManager struct ListallerManager; Allows managing Listaller applications This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources. struct ListallerManagerClass ListallerManagerClass struct ListallerManagerClass { ListallerMessageObjectClass parent_class; }; The class structure for LISTALLER_TYPE_MANAGER. All the fields in this structure are private and should never be accessed directly. ListallerMessageObjectClass parent_class; the parent class structure Property Details The <literal>"settings"</literal> property ListallerManager:settings "settings" ListallerSetupSettings* : Read / Write settings. Signal Details The <literal>"application"</literal> signal ListallerManager::application void user_function (ListallerManager *manager, ListallerAppItem *appid, gpointer user_data) : Run Last manager : the ListallerManager instance that received the signal appid :   user_data : user data set when the signal handler was connected. The <literal>"status-changed"</literal> signal ListallerManager::status-changed void user_function (ListallerManager *manager, ListallerStatusItem *status, gpointer user_data) : Run Last manager : the ListallerManager instance that received the signal status :   user_data : user data set when the signal handler was connected. ./Listaller-0.5.8/docs/api/xml/status.xml0000664000175000017500000015466612176743547020434 0ustar matthiasmatthias ]> ListallerErrorItem 3 LISTALLER Library ListallerErrorItem Return type describing an error Synopsis #define LISTALLER_TYPE_ERROR_ITEM gchar * listaller_error_item_to_string (ListallerErrorItem *self); ListallerErrorItem * listaller_error_item_new (ListallerErrorEnum type); ListallerErrorEnum listaller_error_item_get_error (ListallerErrorItem *self); const gchar * listaller_error_item_get_details (ListallerErrorItem *self); struct ListallerErrorItem; struct ListallerErrorItemClass; #define LISTALLER_TYPE_MESSAGE_ITEM gchar * listaller_message_item_to_string (ListallerMessageItem *self); ListallerMessageItem * listaller_message_item_new (ListallerMessageEnum type); ListallerMessageEnum listaller_message_item_get_mtype (ListallerMessageItem *self); const gchar * listaller_message_item_get_details (ListallerMessageItem *self); struct ListallerMessageItem; struct ListallerMessageItemClass; #define LISTALLER_TYPE_STATUS_ITEM ListallerStatusItem * listaller_status_item_new (ListallerStatusEnum type); ListallerStatusEnum listaller_status_item_get_status (ListallerStatusItem *self); const gchar * listaller_status_item_get_info (ListallerStatusItem *self); struct ListallerStatusItem; struct ListallerStatusItemClass; #define LISTALLER_TYPE_PROGRESS_ITEM ListallerProgressItem * listaller_progress_item_new (void); ListallerProgressEnum listaller_progress_item_get_prog_type (ListallerProgressItem *self); const gchar * listaller_progress_item_get_item_id (ListallerProgressItem *self); gint listaller_progress_item_get_value (ListallerProgressItem *self); struct ListallerProgressItem; struct ListallerProgressItemClass; #define LISTALLER_TYPE_UPDATE_ITEM ListallerUpdateItem * listaller_update_item_new (void); GType listaller_update_item_get_sw_type (ListallerUpdateItem *self); GObject * listaller_update_item_get_sw_old (ListallerUpdateItem *self); GObject * listaller_update_item_get_sw_new (ListallerUpdateItem *self); const gchar * listaller_update_item_get_architecture (ListallerUpdateItem *self); ListallerIPKChangelog * listaller_update_item_get_changelog (ListallerUpdateItem *self); gboolean listaller_update_item_get_completed (ListallerUpdateItem *self); struct ListallerUpdateItem; struct ListallerUpdateItemClass; gchar * listaller_error_enum_to_string (ListallerErrorEnum self); enum ListallerErrorEnum; enum ListallerStatusEnum; gchar * listaller_message_enum_to_string (ListallerMessageEnum self); enum ListallerMessageEnum; enum ListallerProgressEnum; Object Hierarchy GObject +----ListallerErrorItem GObject +----ListallerMessageItem GObject +----ListallerStatusItem GObject +----ListallerProgressItem GObject +----ListallerUpdateItem GEnum +----ListallerErrorEnum GEnum +----ListallerStatusEnum GEnum +----ListallerMessageEnum GEnum +----ListallerProgressEnum Properties "details" gchar* : Read / Write "error" ListallerErrorEnum : Read / Write "details" gchar* : Read / Write "mtype" ListallerMessageEnum : Read / Write "info" gchar* : Read / Write "status" ListallerStatusEnum : Read / Write "item-id" gchar* : Read / Write "prog-type" ListallerProgressEnum : Read / Write "value" gint : Read / Write "architecture" gchar* : Read / Write "changelog" ListallerIPKChangelog* : Read / Write "completed" gboolean : Read / Write "sw-new" GObject* : Read / Write "sw-old" GObject* : Read / Write "sw-type" GType* : Read / Write Description Details LISTALLER_TYPE_ERROR_ITEM LISTALLER_TYPE_ERROR_ITEM #define LISTALLER_TYPE_ERROR_ITEM (listaller_error_item_get_type ()) The type for ListallerErrorItem. listaller_error_item_to_string () listaller_error_item_to_string gchar * listaller_error_item_to_string (ListallerErrorItem *self); self : the ListallerErrorItem instance listaller_error_item_new () listaller_error_item_new ListallerErrorItem * listaller_error_item_new (ListallerErrorEnum type); type :   listaller_error_item_get_error () listaller_error_item_get_error ListallerErrorEnum listaller_error_item_get_error (ListallerErrorItem *self); Get and return the current value of the "error" property. self : the ListallerErrorItem instance to query Returns :the value of the "error" property listaller_error_item_get_details () listaller_error_item_get_details const gchar * listaller_error_item_get_details (ListallerErrorItem *self); Get and return the current value of the "details" property. self : the ListallerErrorItem instance to query Returns :the value of the "details" property struct ListallerErrorItem ListallerErrorItem struct ListallerErrorItem; Return type describing an error struct ListallerErrorItemClass ListallerErrorItemClass struct ListallerErrorItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_ERROR_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure LISTALLER_TYPE_MESSAGE_ITEM LISTALLER_TYPE_MESSAGE_ITEM #define LISTALLER_TYPE_MESSAGE_ITEM (listaller_message_item_get_type ()) The type for ListallerMessageItem. listaller_message_item_to_string () listaller_message_item_to_string gchar * listaller_message_item_to_string (ListallerMessageItem *self); self : the ListallerMessageItem instance listaller_message_item_new () listaller_message_item_new ListallerMessageItem * listaller_message_item_new (ListallerMessageEnum type); type :   listaller_message_item_get_mtype () listaller_message_item_get_mtype ListallerMessageEnum listaller_message_item_get_mtype (ListallerMessageItem *self); Get and return the current value of the "mtype" property. self : the ListallerMessageItem instance to query Returns :the value of the "mtype" property listaller_message_item_get_details () listaller_message_item_get_details const gchar * listaller_message_item_get_details (ListallerMessageItem *self); Get and return the current value of the "details" property. self : the ListallerMessageItem instance to query Returns :the value of the "details" property struct ListallerMessageItem ListallerMessageItem struct ListallerMessageItem; Return type describing a message struct ListallerMessageItemClass ListallerMessageItemClass struct ListallerMessageItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_MESSAGE_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure LISTALLER_TYPE_STATUS_ITEM LISTALLER_TYPE_STATUS_ITEM #define LISTALLER_TYPE_STATUS_ITEM (listaller_status_item_get_type ()) The type for ListallerStatusItem. listaller_status_item_new () listaller_status_item_new ListallerStatusItem * listaller_status_item_new (ListallerStatusEnum type); type :   listaller_status_item_get_status () listaller_status_item_get_status ListallerStatusEnum listaller_status_item_get_status (ListallerStatusItem *self); Get and return the current value of the "status" property. self : the ListallerStatusItem instance to query Returns :the value of the "status" property listaller_status_item_get_info () listaller_status_item_get_info const gchar * listaller_status_item_get_info (ListallerStatusItem *self); Get and return the current value of the "info" property. self : the ListallerStatusItem instance to query Returns :the value of the "info" property struct ListallerStatusItem ListallerStatusItem struct ListallerStatusItem; Return type describing a status change struct ListallerStatusItemClass ListallerStatusItemClass struct ListallerStatusItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_STATUS_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure LISTALLER_TYPE_PROGRESS_ITEM LISTALLER_TYPE_PROGRESS_ITEM #define LISTALLER_TYPE_PROGRESS_ITEM (listaller_progress_item_get_type ()) The type for ListallerProgressItem. listaller_progress_item_new () listaller_progress_item_new ListallerProgressItem * listaller_progress_item_new (void); listaller_progress_item_get_prog_type () listaller_progress_item_get_prog_type ListallerProgressEnum listaller_progress_item_get_prog_type (ListallerProgressItem *self); Get and return the current value of the "prog-type" property. self : the ListallerProgressItem instance to query Returns :the value of the "prog-type" property listaller_progress_item_get_item_id () listaller_progress_item_get_item_id const gchar * listaller_progress_item_get_item_id (ListallerProgressItem *self); Get and return the current value of the "item-id" property. self : the ListallerProgressItem instance to query Returns :the value of the "item-id" property listaller_progress_item_get_value () listaller_progress_item_get_value gint listaller_progress_item_get_value (ListallerProgressItem *self); Get and return the current value of the "value" property. self : the ListallerProgressItem instance to query Returns :the value of the "value" property struct ListallerProgressItem ListallerProgressItem struct ListallerProgressItem; Return type describing progress changes struct ListallerProgressItemClass ListallerProgressItemClass struct ListallerProgressItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_PROGRESS_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure LISTALLER_TYPE_UPDATE_ITEM LISTALLER_TYPE_UPDATE_ITEM #define LISTALLER_TYPE_UPDATE_ITEM (listaller_update_item_get_type ()) The type for ListallerUpdateItem. listaller_update_item_new () listaller_update_item_new ListallerUpdateItem * listaller_update_item_new (void); listaller_update_item_get_sw_type () listaller_update_item_get_sw_type GType listaller_update_item_get_sw_type (ListallerUpdateItem *self); Get and return the current value of the "sw-type" property. self : the ListallerUpdateItem instance to query Returns :the value of the "sw-type" property listaller_update_item_get_sw_old () listaller_update_item_get_sw_old GObject * listaller_update_item_get_sw_old (ListallerUpdateItem *self); Get and return the current value of the "sw-old" property. self : the ListallerUpdateItem instance to query Returns :the value of the "sw-old" property listaller_update_item_get_sw_new () listaller_update_item_get_sw_new GObject * listaller_update_item_get_sw_new (ListallerUpdateItem *self); Get and return the current value of the "sw-new" property. self : the ListallerUpdateItem instance to query Returns :the value of the "sw-new" property listaller_update_item_get_architecture () listaller_update_item_get_architecture const gchar * listaller_update_item_get_architecture (ListallerUpdateItem *self); Get and return the current value of the "architecture" property. self : the ListallerUpdateItem instance to query Returns :the value of the "architecture" property listaller_update_item_get_changelog () listaller_update_item_get_changelog ListallerIPKChangelog * listaller_update_item_get_changelog (ListallerUpdateItem *self); Get and return the current value of the "changelog" property. self : the ListallerUpdateItem instance to query Returns :the value of the "changelog" property listaller_update_item_get_completed () listaller_update_item_get_completed gboolean listaller_update_item_get_completed (ListallerUpdateItem *self); Get and return the current value of the "completed" property. self : the ListallerUpdateItem instance to query Returns :the value of the "completed" property struct ListallerUpdateItem ListallerUpdateItem struct ListallerUpdateItem; Return type describing a software update struct ListallerUpdateItemClass ListallerUpdateItemClass struct ListallerUpdateItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_UPDATE_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure listaller_error_enum_to_string () listaller_error_enum_to_string gchar * listaller_error_enum_to_string (ListallerErrorEnum self); self : the ListallerErrorEnum instance enum ListallerErrorEnum ListallerErrorEnum typedef enum { LISTALLER_ERROR_ENUM_INVALID, LISTALLER_ERROR_ENUM_INTERNAL, LISTALLER_ERROR_ENUM_SETUP_NOT_INITIALIZED, LISTALLER_ERROR_ENUM_IPK_LOADING_FAILED, LISTALLER_ERROR_ENUM_IPK_INCOMPLETE, LISTALLER_ERROR_ENUM_IPK_DAMAGED, LISTALLER_ERROR_ENUM_IPK_NOT_SUPPORTED, LISTALLER_ERROR_ENUM_OPERATION_NOT_ALLOWED, LISTALLER_ERROR_ENUM_UNPACKING_FAILED, LISTALLER_ERROR_ENUM_FILE_EXISTS, LISTALLER_ERROR_ENUM_HASH_MISSMATCH, LISTALLER_ERROR_ENUM_FILE_INSTALL_FAILED, LISTALLER_ERROR_ENUM_COPY_ERROR, LISTALLER_ERROR_ENUM_INSTALLATION_FAILED, LISTALLER_ERROR_ENUM_DATABASE_LOCKED, LISTALLER_ERROR_ENUM_DATABASE_FAILURE, LISTALLER_ERROR_ENUM_DATABASE_OPEN_FAILED, LISTALLER_ERROR_ENUM_ALREADY_INSTALLED, LISTALLER_ERROR_ENUM_REMOVAL_FAILED, LISTALLER_ERROR_ENUM_WRONG_ARCHITECTURE, LISTALLER_ERROR_ENUM_DEPENDENCY_MISSING, LISTALLER_ERROR_ENUM_DEPENDENCY_INSTALL_FAILED, LISTALLER_ERROR_ENUM_NATIVE_TRANSACTION_FAILED, LISTALLER_ERROR_ENUM_NETWORK_ERROR, LISTALLER_ERROR_ENUM_REFRESH_FAILED, LISTALLER_ERROR_ENUM_UPDATE_FAILED } ListallerErrorEnum; enum ListallerStatusEnum ListallerStatusEnum typedef enum { LISTALLER_STATUS_ENUM_UNKNOWN, LISTALLER_STATUS_ENUM_ACTION_STARTED, LISTALLER_STATUS_ENUM_RESOLVING_DEPENDENCIES, LISTALLER_STATUS_ENUM_INSTALLING_FILES, LISTALLER_STATUS_ENUM_REGISTERING_APPLICATION, LISTALLER_STATUS_ENUM_INSTALLATION_FINISHED, LISTALLER_STATUS_ENUM_REMOVAL_FINISHED } ListallerStatusEnum; listaller_message_enum_to_string () listaller_message_enum_to_string gchar * listaller_message_enum_to_string (ListallerMessageEnum self); self : the ListallerMessageEnum instance enum ListallerMessageEnum ListallerMessageEnum typedef enum { LISTALLER_MESSAGE_ENUM_UNKNOWN, LISTALLER_MESSAGE_ENUM_INFO, LISTALLER_MESSAGE_ENUM_WARNING, LISTALLER_MESSAGE_ENUM_CRITICAL } ListallerMessageEnum; enum ListallerProgressEnum ListallerProgressEnum typedef enum { LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS, LISTALLER_PROGRESS_ENUM_ITEM_PROGRESS } ListallerProgressEnum; Property Details The <literal>"details"</literal> property ListallerErrorItem:details "details" gchar* : Read / Write details.Default value: NULL The <literal>"error"</literal> property ListallerErrorItem:error "error" ListallerErrorEnum : Read / Write error.Default value: LISTALLER_ERROR_ENUM_INVALID The <literal>"details"</literal> property ListallerMessageItem:details "details" gchar* : Read / Write details.Default value: NULL The <literal>"mtype"</literal> property ListallerMessageItem:mtype "mtype" ListallerMessageEnum : Read / Write mtype.Default value: LISTALLER_MESSAGE_ENUM_UNKNOWN The <literal>"info"</literal> property ListallerStatusItem:info "info" gchar* : Read / Write info.Default value: NULL The <literal>"status"</literal> property ListallerStatusItem:status "status" ListallerStatusEnum : Read / Write status.Default value: LISTALLER_STATUS_ENUM_UNKNOWN The <literal>"item-id"</literal> property ListallerProgressItem:item-id "item-id" gchar* : Read / Write item-id.Default value: NULL The <literal>"prog-type"</literal> property ListallerProgressItem:prog-type "prog-type" ListallerProgressEnum : Read / Write prog-type.Default value: LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS The <literal>"value"</literal> property ListallerProgressItem:value "value" gint : Read / Write value.Default value: 0 The <literal>"architecture"</literal> property ListallerUpdateItem:architecture "architecture" gchar* : Read / Write architecture.Default value: NULL The <literal>"changelog"</literal> property ListallerUpdateItem:changelog "changelog" ListallerIPKChangelog* : Read / Write changelog. The <literal>"completed"</literal> property ListallerUpdateItem:completed "completed" gboolean : Read / Write completed.Default value: FALSE The <literal>"sw-new"</literal> property ListallerUpdateItem:sw-new "sw-new" GObject* : Read / Write sw-new. The <literal>"sw-old"</literal> property ListallerUpdateItem:sw-old "sw-old" GObject* : Read / Write sw-old. The <literal>"sw-type"</literal> property ListallerUpdateItem:sw-type "sw-type" GType* : Read / Write sw-type.Allowed values: void ./Listaller-0.5.8/docs/api/xml/object_index.sgml0000664000175000017500000000616412176743547021675 0ustar matthiasmatthias ]> GBoxed GEnum GFlags GObject ListallerAppItem ListallerAppLicense ListallerAppState ListallerDatabaseStatus ListallerDepItemType ListallerErrorEnum ListallerErrorItem ListallerIPKChangelog ListallerIPKControl ListallerIPKControlDir ListallerIPKInstallMode ListallerIPKPackControl ListallerIPKSecurityInfo ListallerKeyManager ListallerManager ListallerMessageEnum ListallerMessageItem ListallerMessageObject ListallerObjConnectFlags ListallerProgressEnum ListallerProgressItem ListallerSecurityLevel ListallerSetup ListallerSetupSettings ListallerSignStatus ListallerSignTrust ListallerStatusEnum ListallerStatusItem ListallerUpdateItem ListallerUpdater ./Listaller-0.5.8/docs/api/xml/setup-settings.xml0000664000175000017500000010212512176743547022066 0ustar matthiasmatthias ]> ListallerSetupSettings 3 LISTALLER Library ListallerSetupSettings Class to store settings of a IPK setup. Synopsis #define LISTALLER_TYPE_SETUP_SETTINGS void listaller_setup_settings_lock (ListallerSetupSettings *self); void listaller_setup_settings_unlock (ListallerSetupSettings *self); gchar * listaller_setup_settings_database_file (ListallerSetupSettings *self); gchar * listaller_setup_settings_appregister_dir (ListallerSetupSettings *self); gchar * listaller_setup_settings_appdata_dir (ListallerSetupSettings *self); gchar * listaller_setup_settings_depdata_dir (ListallerSetupSettings *self); gchar * listaller_setup_settings_icon_base_dir (ListallerSetupSettings *self); gchar * listaller_setup_settings_icon_size_dir (ListallerSetupSettings *self, gint size); gchar * listaller_setup_settings_applications_dir (ListallerSetupSettings *self); ListallerIPKInstallMode listaller_setup_settings_get_current_mode (ListallerSetupSettings *self); gboolean listaller_setup_settings_get_locked (ListallerSetupSettings *self); gboolean listaller_setup_settings_get_shared_mode (ListallerSetupSettings *self); gboolean listaller_setup_settings_get_private_mode (ListallerSetupSettings *self); gboolean listaller_setup_settings_get_test_mode (ListallerSetupSettings *self); struct ListallerSetupSettings; struct ListallerSetupSettingsClass; gboolean listaller_ipk_install_mode_is_all_set (ListallerIPKInstallMode self, ListallerIPKInstallMode flags); gboolean listaller_ipk_install_mode_is_any_set (ListallerIPKInstallMode self, ListallerIPKInstallMode flags); ListallerIPKInstallMode listaller_ipk_install_mode_set (ListallerIPKInstallMode self, ListallerIPKInstallMode mode); ListallerIPKInstallMode listaller_ipk_install_mode_unset (ListallerIPKInstallMode self, ListallerIPKInstallMode mode); enum ListallerIPKInstallMode; Object Hierarchy GObject +----ListallerSetupSettings GFlags +----ListallerIPKInstallMode Properties "current-mode" ListallerIPKInstallMode : Read / Write "locked" gboolean : Read "private-mode" gboolean : Read "shared-mode" gboolean : Read "test-mode" gboolean : Read Description Details LISTALLER_TYPE_SETUP_SETTINGS LISTALLER_TYPE_SETUP_SETTINGS #define LISTALLER_TYPE_SETUP_SETTINGS (listaller_setup_settings_get_type ()) The type for ListallerSetupSettings. listaller_setup_settings_lock () listaller_setup_settings_lock void listaller_setup_settings_lock (ListallerSetupSettings *self); Lock the settings, so no changes can be made anymore self : the ListallerSetupSettings instance listaller_setup_settings_unlock () listaller_setup_settings_unlock void listaller_setup_settings_unlock (ListallerSetupSettings *self); Allow changing the settings again self : the ListallerSetupSettings instance listaller_setup_settings_database_file () listaller_setup_settings_database_file gchar * listaller_setup_settings_database_file (ListallerSetupSettings *self); self : the ListallerSetupSettings instance listaller_setup_settings_appregister_dir () listaller_setup_settings_appregister_dir gchar * listaller_setup_settings_appregister_dir (ListallerSetupSettings *self); Get software registry directory self : the ListallerSetupSettings instance listaller_setup_settings_appdata_dir () listaller_setup_settings_appdata_dir gchar * listaller_setup_settings_appdata_dir (ListallerSetupSettings *self); self : the ListallerSetupSettings instance listaller_setup_settings_depdata_dir () listaller_setup_settings_depdata_dir gchar * listaller_setup_settings_depdata_dir (ListallerSetupSettings *self); self : the ListallerSetupSettings instance listaller_setup_settings_icon_base_dir () listaller_setup_settings_icon_base_dir gchar * listaller_setup_settings_icon_base_dir (ListallerSetupSettings *self); self : the ListallerSetupSettings instance listaller_setup_settings_icon_size_dir () listaller_setup_settings_icon_size_dir gchar * listaller_setup_settings_icon_size_dir (ListallerSetupSettings *self, gint size); self : the ListallerSetupSettings instance size :   listaller_setup_settings_applications_dir () listaller_setup_settings_applications_dir gchar * listaller_setup_settings_applications_dir (ListallerSetupSettings *self); self : the ListallerSetupSettings instance listaller_setup_settings_get_current_mode () listaller_setup_settings_get_current_mode ListallerIPKInstallMode listaller_setup_settings_get_current_mode (ListallerSetupSettings *self); Get and return the current value of the "current-mode" property. self : the ListallerSetupSettings instance to query Returns :the value of the "current-mode" property listaller_setup_settings_get_locked () listaller_setup_settings_get_locked gboolean listaller_setup_settings_get_locked (ListallerSetupSettings *self); Get and return the current value of the "locked" property. self : the ListallerSetupSettings instance to query Returns :the value of the "locked" property listaller_setup_settings_get_shared_mode () listaller_setup_settings_get_shared_mode gboolean listaller_setup_settings_get_shared_mode (ListallerSetupSettings *self); Get and return the current value of the "shared-mode" property. self : the ListallerSetupSettings instance to query Returns :the value of the "shared-mode" property listaller_setup_settings_get_private_mode () listaller_setup_settings_get_private_mode gboolean listaller_setup_settings_get_private_mode (ListallerSetupSettings *self); Get and return the current value of the "private-mode" property. self : the ListallerSetupSettings instance to query Returns :the value of the "private-mode" property listaller_setup_settings_get_test_mode () listaller_setup_settings_get_test_mode gboolean listaller_setup_settings_get_test_mode (ListallerSetupSettings *self); Get and return the current value of the "test-mode" property. self : the ListallerSetupSettings instance to query Returns :the value of the "test-mode" property struct ListallerSetupSettings ListallerSetupSettings struct ListallerSetupSettings; Class to store settings of a IPK setup. struct ListallerSetupSettingsClass ListallerSetupSettingsClass struct ListallerSetupSettingsClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_SETUP_SETTINGS. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure listaller_ipk_install_mode_is_all_set () listaller_ipk_install_mode_is_all_set gboolean listaller_ipk_install_mode_is_all_set (ListallerIPKInstallMode self, ListallerIPKInstallMode flags); self : the ListallerIPKInstallMode instance flags :   listaller_ipk_install_mode_is_any_set () listaller_ipk_install_mode_is_any_set gboolean listaller_ipk_install_mode_is_any_set (ListallerIPKInstallMode self, ListallerIPKInstallMode flags); self : the ListallerIPKInstallMode instance flags :   listaller_ipk_install_mode_set () listaller_ipk_install_mode_set ListallerIPKInstallMode listaller_ipk_install_mode_set (ListallerIPKInstallMode self, ListallerIPKInstallMode mode); self : the ListallerIPKInstallMode instance mode :   listaller_ipk_install_mode_unset () listaller_ipk_install_mode_unset ListallerIPKInstallMode listaller_ipk_install_mode_unset (ListallerIPKInstallMode self, ListallerIPKInstallMode mode); self : the ListallerIPKInstallMode instance mode :   enum ListallerIPKInstallMode ListallerIPKInstallMode typedef enum { LISTALLER_IPK_INSTALL_MODE_NONE = 0, LISTALLER_IPK_INSTALL_MODE_SHARED = 1 << 0, LISTALLER_IPK_INSTALL_MODE_PRIVATE = 1 << 1, LISTALLER_IPK_INSTALL_MODE_TEST = 1 << 2 } ListallerIPKInstallMode; Mode of a current installation. This class is also used to indicate installation modes supported by an IPK package. Property Details The <literal>"current-mode"</literal> property ListallerSetupSettings:current-mode "current-mode" ListallerIPKInstallMode : Read / Write current-mode. The <literal>"locked"</literal> property ListallerSetupSettings:locked "locked" gboolean : Read locked.Default value: FALSE The <literal>"private-mode"</literal> property ListallerSetupSettings:private-mode "private-mode" gboolean : Read private-mode.Default value: FALSE The <literal>"shared-mode"</literal> property ListallerSetupSettings:shared-mode "shared-mode" gboolean : Read shared-mode.Default value: FALSE The <literal>"test-mode"</literal> property ListallerSetupSettings:test-mode "test-mode" gboolean : Read test-mode.Default value: FALSE ./Listaller-0.5.8/docs/api/xml/message-object.xml0000664000175000017500000004071312176743547021764 0ustar matthiasmatthias ]> ListallerMessageObject 3 LISTALLER Library ListallerMessageObject Class providing basic message handling Synopsis #define LISTALLER_TYPE_MESSAGE_OBJECT void listaller_message_object_set_error_hint_str (ListallerMessageObject *self, const gchar *str); void listaller_message_object_connect_with_object (ListallerMessageObject *self, ListallerMessageObject *other_obj, ListallerObjConnectFlags flags); void listaller_message_object_connect_with_object_all (ListallerMessageObject *self, ListallerMessageObject *other_obj); struct ListallerMessageObject; struct ListallerMessageObjectClass; enum ListallerObjConnectFlags; Object Hierarchy GObject +----ListallerMessageObject +----ListallerKeyManager +----ListallerManager +----ListallerSetup +----ListallerUpdater GEnum +----ListallerObjConnectFlags Signals "error-code" : Run Last "message" : Run Last "progress" : Run Last Description Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API) Details LISTALLER_TYPE_MESSAGE_OBJECT LISTALLER_TYPE_MESSAGE_OBJECT #define LISTALLER_TYPE_MESSAGE_OBJECT (listaller_message_object_get_type ()) The type for ListallerMessageObject. listaller_message_object_set_error_hint_str () listaller_message_object_set_error_hint_str void listaller_message_object_set_error_hint_str (ListallerMessageObject *self, const gchar *str); self : the ListallerMessageObject instance str :   listaller_message_object_connect_with_object () listaller_message_object_connect_with_object void listaller_message_object_connect_with_object (ListallerMessageObject *self, ListallerMessageObject *other_obj, ListallerObjConnectFlags flags); self : the ListallerMessageObject instance other_obj :   flags :   listaller_message_object_connect_with_object_all () listaller_message_object_connect_with_object_all void listaller_message_object_connect_with_object_all (ListallerMessageObject *self, ListallerMessageObject *other_obj); self : the ListallerMessageObject instance other_obj :   struct ListallerMessageObject ListallerMessageObject struct ListallerMessageObject; Class providing basic message handling Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API) struct ListallerMessageObjectClass ListallerMessageObjectClass struct ListallerMessageObjectClass { GObjectClass parent_class; void (*emit_message) (ListallerMessageObject* self, const gchar* msg); void (*emit_warning) (ListallerMessageObject* self, const gchar* msg); void (*emit_error) (ListallerMessageObject* self, ListallerErrorEnum id, const gchar* details); void (*change_progress) (ListallerMessageObject* self, gint prog_value); void (*change_item_progress) (ListallerMessageObject* self, const gchar* id, guint item_progress); }; The class structure for LISTALLER_TYPE_MESSAGE_OBJECT. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure emit_message () emit_warning () emit_error () change_progress () change_item_progress () enum ListallerObjConnectFlags ListallerObjConnectFlags typedef enum { LISTALLER_OBJ_CONNECT_FLAGS_NONE, LISTALLER_OBJ_CONNECT_FLAGS_PROGRESS_TO_SUBPROGRESS, LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_PROGRESS, LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_ERROR_CODE } ListallerObjConnectFlags; Signal Details The <literal>"error-code"</literal> signal ListallerMessageObject::error-code void user_function (ListallerMessageObject *message_object, ListallerErrorItem *error, gpointer user_data) : Run Last message_object : the ListallerMessageObject instance that received the signal error :   user_data : user data set when the signal handler was connected. The <literal>"message"</literal> signal ListallerMessageObject::message void user_function (ListallerMessageObject *message_object, ListallerMessageItem *message, gpointer user_data) : Run Last message_object : the ListallerMessageObject instance that received the signal message :   user_data : user data set when the signal handler was connected. The <literal>"progress"</literal> signal ListallerMessageObject::progress void user_function (ListallerMessageObject *message_object, ListallerProgressItem *prog, gpointer user_data) : Run Last message_object : the ListallerMessageObject instance that received the signal prog :   user_data : user data set when the signal handler was connected. ./Listaller-0.5.8/docs/api/xml/ipk-changelog.xml0000664000175000017500000001251712176743547021605 0ustar matthiasmatthias ]> ListallerIPKChangelog 3 LISTALLER Library ListallerIPKChangelog Retrieve information from application changelogs Synopsis #define LISTALLER_IPK_TYPE_CHANGELOG gboolean listaller_ipk_changelog_open (ListallerIPKChangelog *self, const gchar *fname); ListallerIPKChangelog * listaller_ipk_changelog_new (void); struct ListallerIPKChangelog; struct ListallerIPKChangelogClass; Object Hierarchy GObject +----ListallerIPKChangelog Description Details LISTALLER_IPK_TYPE_CHANGELOG LISTALLER_IPK_TYPE_CHANGELOG #define LISTALLER_IPK_TYPE_CHANGELOG (listaller_ipk_changelog_get_type ()) The type for ListallerIPKChangelog. listaller_ipk_changelog_open () listaller_ipk_changelog_open gboolean listaller_ipk_changelog_open (ListallerIPKChangelog *self, const gchar *fname); self : the ListallerIPKChangelog instance fname :   listaller_ipk_changelog_new () listaller_ipk_changelog_new ListallerIPKChangelog * listaller_ipk_changelog_new (void); struct ListallerIPKChangelog ListallerIPKChangelog struct ListallerIPKChangelog; Retrieve information from application changelogs struct ListallerIPKChangelogClass ListallerIPKChangelogClass struct ListallerIPKChangelogClass { GObjectClass parent_class; }; The class structure for LISTALLER_IPK_TYPE_CHANGELOG. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure ./Listaller-0.5.8/docs/api/xml/database-internal.xml0000664000175000017500000000711412176743547022450 0ustar matthiasmatthias ]> database-internal 3 LISTALLER Library database-internal Synopsis gchar * listaller_database_status_to_string (ListallerDatabaseStatus self); enum ListallerDatabaseStatus; enum ListallerDatabaseError; Object Hierarchy GEnum +----ListallerDatabaseStatus Description Details listaller_database_status_to_string () listaller_database_status_to_string gchar * listaller_database_status_to_string (ListallerDatabaseStatus self); self : the ListallerDatabaseStatus instance enum ListallerDatabaseStatus ListallerDatabaseStatus typedef enum { LISTALLER_DATABASE_STATUS_OPENED, LISTALLER_DATABASE_STATUS_LOCKED, LISTALLER_DATABASE_STATUS_UNLOCKED, LISTALLER_DATABASE_STATUS_SUCCESS, LISTALLER_DATABASE_STATUS_FAILURE, LISTALLER_DATABASE_STATUS_CLOSED } ListallerDatabaseStatus; enum ListallerDatabaseError ListallerDatabaseError typedef enum { LISTALLER_DATABASE_ERROR_ERROR, LISTALLER_DATABASE_ERROR_BACKING, LISTALLER_DATABASE_ERROR_MEMORY, LISTALLER_DATABASE_ERROR_ABORT, LISTALLER_DATABASE_ERROR_LIMITS, LISTALLER_DATABASE_ERROR_TYPESPEC, LISTALLER_DATABASE_ERROR_LOCKED } ListallerDatabaseError; ./Listaller-0.5.8/docs/api/xml/updater.xml0000664000175000017500000004031512176743547020536 0ustar matthiasmatthias ]> ListallerUpdater 3 LISTALLER Library ListallerUpdater All necessary methods to keep installed applications up-to-date Synopsis #define LISTALLER_TYPE_UPDATER void listaller_updater_find_updates (ListallerUpdater *self); gboolean listaller_updater_apply_updates (ListallerUpdater *self, GeeArrayList *update_list); gboolean listaller_updater_apply_updates_all (ListallerUpdater *self); ListallerUpdater * listaller_updater_new (gboolean shared_mode); ListallerSetupSettings * listaller_updater_get_settings (ListallerUpdater *self); void listaller_updater_set_settings (ListallerUpdater *self, ListallerSetupSettings *value); GeeArrayList * listaller_updater_get_available_updates (ListallerUpdater *self); struct ListallerUpdater; struct ListallerUpdaterClass; Object Hierarchy GObject +----ListallerMessageObject +----ListallerUpdater Properties "available-updates" GeeArrayList* : Read "settings" ListallerSetupSettings* : Read / Write Signals "update" : Run Last Description This class allows installing updates for installed applications. Details LISTALLER_TYPE_UPDATER LISTALLER_TYPE_UPDATER #define LISTALLER_TYPE_UPDATER (listaller_updater_get_type ()) The type for ListallerUpdater. listaller_updater_find_updates () listaller_updater_find_updates void listaller_updater_find_updates (ListallerUpdater *self); Find updates available for installed applications. self : the ListallerUpdater instance listaller_updater_apply_updates () listaller_updater_apply_updates gboolean listaller_updater_apply_updates (ListallerUpdater *self, GeeArrayList *update_list); Apply updates selected in update_list. self : the ListallerUpdater instance update_list :  . A list containing valid UpdateItems. [in] listaller_updater_apply_updates_all () listaller_updater_apply_updates_all gboolean listaller_updater_apply_updates_all (ListallerUpdater *self); Apply all available updates self : the ListallerUpdater instance listaller_updater_new () listaller_updater_new ListallerUpdater * listaller_updater_new (gboolean shared_mode); Create a new Listaller update manager shared_mode :  . Whether we are in shared mode or not. [in] listaller_updater_get_settings () listaller_updater_get_settings ListallerSetupSettings * listaller_updater_get_settings (ListallerUpdater *self); Get and return the current value of the "settings" property. self : the ListallerUpdater instance to query Returns :the value of the "settings" property listaller_updater_set_settings () listaller_updater_set_settings void listaller_updater_set_settings (ListallerUpdater *self, ListallerSetupSettings *value); Set the value of the "settings" property to value. self : the ListallerUpdater instance to modify value : the new value of the "settings" property listaller_updater_get_available_updates () listaller_updater_get_available_updates GeeArrayList * listaller_updater_get_available_updates (ListallerUpdater *self); Get and return the current value of the "available-updates" property. self : the ListallerUpdater instance to query Returns :the value of the "available-updates" property struct ListallerUpdater ListallerUpdater struct ListallerUpdater; All necessary methods to keep installed applications up-to-date This class allows installing updates for installed applications. struct ListallerUpdaterClass ListallerUpdaterClass struct ListallerUpdaterClass { ListallerMessageObjectClass parent_class; }; The class structure for LISTALLER_TYPE_UPDATER. All the fields in this structure are private and should never be accessed directly. ListallerMessageObjectClass parent_class; the parent class structure Property Details The <literal>"available-updates"</literal> property ListallerUpdater:available-updates "available-updates" GeeArrayList* : Read available-updates. The <literal>"settings"</literal> property ListallerUpdater:settings "settings" ListallerSetupSettings* : Read / Write settings. Signal Details The <literal>"update"</literal> signal ListallerUpdater::update void user_function (ListallerUpdater *updater, ListallerUpdateItem *update, gpointer user_data) : Run Last updater : the ListallerUpdater instance that received the signal update :   user_data : user data set when the signal handler was connected. ./Listaller-0.5.8/docs/api/xml/security-info.xml0000664000175000017500000006514312176743547021700 0ustar matthiasmatthias ]> ListallerIPKSecurityInfo 3 LISTALLER Library ListallerIPKSecurityInfo Package security information Synopsis #define LISTALLER_IPK_TYPE_SECURITY_INFO ListallerSecurityLevel listaller_ipk_security_info_get_level (ListallerIPKSecurityInfo *self); gchar * listaller_ipk_security_info_get_level_as_sentence (ListallerIPKSecurityInfo *self); gchar * listaller_ipk_security_info_get_level_as_string (ListallerIPKSecurityInfo *self); ListallerSignStatus listaller_ipk_security_info_get_signature_status (ListallerIPKSecurityInfo *self); ListallerSignTrust listaller_ipk_security_info_get_signature_trustlevel (ListallerIPKSecurityInfo *self); const gchar * listaller_ipk_security_info_get_user_names (ListallerIPKSecurityInfo *self); const gchar * listaller_ipk_security_info_get_key_fpr (ListallerIPKSecurityInfo *self); const gchar * listaller_ipk_security_info_get_trust_reason (ListallerIPKSecurityInfo *self); struct ListallerIPKSecurityInfo; struct ListallerIPKSecurityInfoClass; gchar * listaller_security_level_to_string (ListallerSecurityLevel self); ListallerSecurityLevel listaller_security_level_from_string (const gchar *str); enum ListallerSecurityLevel; gchar * listaller_sign_status_to_string (ListallerSignStatus self); enum ListallerSignStatus; gchar * listaller_sign_trust_to_string (ListallerSignTrust self); enum ListallerSignTrust; Object Hierarchy GObject +----ListallerIPKSecurityInfo GEnum +----ListallerSecurityLevel GEnum +----ListallerSignStatus GEnum +----ListallerSignTrust Properties "key-fpr" gchar* : Read / Write "signature-status" ListallerSignStatus : Read / Write "signature-trustlevel" ListallerSignTrust : Read / Write "trust-reason" gchar* : Read / Write "user-names" gchar* : Read / Write Description This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature. Details LISTALLER_IPK_TYPE_SECURITY_INFO LISTALLER_IPK_TYPE_SECURITY_INFO #define LISTALLER_IPK_TYPE_SECURITY_INFO (listaller_ipk_security_info_get_type ()) The type for ListallerIPKSecurityInfo. listaller_ipk_security_info_get_level () listaller_ipk_security_info_get_level ListallerSecurityLevel listaller_ipk_security_info_get_level (ListallerIPKSecurityInfo *self); self : the ListallerIPKSecurityInfo instance Returns :a human-readable general security level, which was determined for the associated package. listaller_ipk_security_info_get_level_as_sentence () listaller_ipk_security_info_get_level_as_sentence gchar * listaller_ipk_security_info_get_level_as_sentence (ListallerIPKSecurityInfo *self); Get a sentence describing the security status of a package. self : the ListallerIPKSecurityInfo instance listaller_ipk_security_info_get_level_as_string () listaller_ipk_security_info_get_level_as_string gchar * listaller_ipk_security_info_get_level_as_string (ListallerIPKSecurityInfo *self); Get a simple workd (such as "high" or "low") which describes the security status of a package. self : the ListallerIPKSecurityInfo instance listaller_ipk_security_info_get_signature_status () listaller_ipk_security_info_get_signature_status ListallerSignStatus listaller_ipk_security_info_get_signature_status (ListallerIPKSecurityInfo *self); Get and return the current value of the "signature-status" property. self : the ListallerIPKSecurityInfo instance to query Returns :the value of the "signature-status" property listaller_ipk_security_info_get_signature_trustlevel () listaller_ipk_security_info_get_signature_trustlevel ListallerSignTrust listaller_ipk_security_info_get_signature_trustlevel (ListallerIPKSecurityInfo *self); Get and return the current value of the "signature-trustlevel" property. self : the ListallerIPKSecurityInfo instance to query Returns :the value of the "signature-trustlevel" property listaller_ipk_security_info_get_user_names () listaller_ipk_security_info_get_user_names const gchar * listaller_ipk_security_info_get_user_names (ListallerIPKSecurityInfo *self); Get and return the current value of the "user-names" property. self : the ListallerIPKSecurityInfo instance to query Returns :the value of the "user-names" property listaller_ipk_security_info_get_key_fpr () listaller_ipk_security_info_get_key_fpr const gchar * listaller_ipk_security_info_get_key_fpr (ListallerIPKSecurityInfo *self); Get and return the current value of the "key-fpr" property. self : the ListallerIPKSecurityInfo instance to query Returns :the value of the "key-fpr" property listaller_ipk_security_info_get_trust_reason () listaller_ipk_security_info_get_trust_reason const gchar * listaller_ipk_security_info_get_trust_reason (ListallerIPKSecurityInfo *self); Get and return the current value of the "trust-reason" property. self : the ListallerIPKSecurityInfo instance to query Returns :the value of the "trust-reason" property struct ListallerIPKSecurityInfo ListallerIPKSecurityInfo struct ListallerIPKSecurityInfo; Package security information This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature. struct ListallerIPKSecurityInfoClass ListallerIPKSecurityInfoClass struct ListallerIPKSecurityInfoClass { GObjectClass parent_class; }; The class structure for LISTALLER_IPK_TYPE_SECURITY_INFO. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure listaller_security_level_to_string () listaller_security_level_to_string gchar * listaller_security_level_to_string (ListallerSecurityLevel self); self : the ListallerSecurityLevel instance listaller_security_level_from_string () listaller_security_level_from_string ListallerSecurityLevel listaller_security_level_from_string (const gchar *str); str :   enum ListallerSecurityLevel ListallerSecurityLevel typedef enum { LISTALLER_SECURITY_LEVEL_DANGEROUS, LISTALLER_SECURITY_LEVEL_LOW, LISTALLER_SECURITY_LEVEL_MEDIUM, LISTALLER_SECURITY_LEVEL_HIGH } ListallerSecurityLevel; Simple indicator of package security listaller_sign_status_to_string () listaller_sign_status_to_string gchar * listaller_sign_status_to_string (ListallerSignStatus self); self : the ListallerSignStatus instance enum ListallerSignStatus ListallerSignStatus typedef enum { LISTALLER_SIGN_STATUS_UNKNOWN, LISTALLER_SIGN_STATUS_VALID, LISTALLER_SIGN_STATUS_KEY_EXPIRED, LISTALLER_SIGN_STATUS_KEY_MISSING, LISTALLER_SIGN_STATUS_CERT_REVOKED, LISTALLER_SIGN_STATUS_SIG_EXPIRED, LISTALLER_SIGN_STATUS_BAD, LISTALLER_SIGN_STATUS_NO_PUBKEY } ListallerSignStatus; Status of a package signature listaller_sign_trust_to_string () listaller_sign_trust_to_string gchar * listaller_sign_trust_to_string (ListallerSignTrust self); self : the ListallerSignTrust instance enum ListallerSignTrust ListallerSignTrust typedef enum { LISTALLER_SIGN_TRUST_UNKNOWN, LISTALLER_SIGN_TRUST_BAD_VALUE, LISTALLER_SIGN_TRUST_UNDEFINED, LISTALLER_SIGN_TRUST_NEVER, LISTALLER_SIGN_TRUST_MARGINAL, LISTALLER_SIGN_TRUST_FULL, LISTALLER_SIGN_TRUST_ULTIMATE } ListallerSignTrust; Trust level of a signature Property Details The <literal>"key-fpr"</literal> property ListallerIPKSecurityInfo:key-fpr "key-fpr" gchar* : Read / Write key-fpr.Default value: NULL The <literal>"signature-status"</literal> property ListallerIPKSecurityInfo:signature-status "signature-status" ListallerSignStatus : Read / Write signature-status.Default value: LISTALLER_SIGN_STATUS_UNKNOWN The <literal>"signature-trustlevel"</literal> property ListallerIPKSecurityInfo:signature-trustlevel "signature-trustlevel" ListallerSignTrust : Read / Write signature-trustlevel.Default value: LISTALLER_SIGN_TRUST_UNKNOWN The <literal>"trust-reason"</literal> property ListallerIPKSecurityInfo:trust-reason "trust-reason" gchar* : Read / Write trust-reason.Default value: NULL The <literal>"user-names"</literal> property ListallerIPKSecurityInfo:user-names "user-names" gchar* : Read / Write user-names.Default value: NULL ./Listaller-0.5.8/docs/api/xml/utils.xml0000664000175000017500000000473712176743547020242 0ustar matthiasmatthias ]> utils 3 LISTALLER Library utils Common utility functions used by Listaller Synopsis gchar * listaller_utils_build_filename (const gchar *first_element, ...); Description Details listaller_utils_build_filename () listaller_utils_build_filename gchar * listaller_utils_build_filename (const gchar *first_element, ...); Builds a filename similar to g_build_filename, but this implementation resolves all relative ("../.") path statements to one coherent path string. self : the (null) instance first_element :   ... :   ./Listaller-0.5.8/docs/api/xml/api-index-full.xml0000664000175000017500000024055712176743547021722 0ustar matthiasmatthias ]> A listaller_add_log_domain, function in logging ListallerAppItem, struct in ListallerAppItem ListallerAppItem:appid, object property in ListallerAppItem ListallerAppItem:author, object property in ListallerAppItem ListallerAppItem:categories, object property in ListallerAppItem ListallerAppItem:dependencies-str, object property in ListallerAppItem ListallerAppItem:description, object property in ListallerAppItem ListallerAppItem:desktop-file, object property in ListallerAppItem ListallerAppItem:full-name, object property in ListallerAppItem ListallerAppItem:icon-name, object property in ListallerAppItem ListallerAppItem:idname, object property in ListallerAppItem ListallerAppItem:install-time, object property in ListallerAppItem ListallerAppItem:license, object property in ListallerAppItem ListallerAppItem:origin, object property in ListallerAppItem ListallerAppItem:publisher, object property in ListallerAppItem ListallerAppItem:replaces, object property in ListallerAppItem ListallerAppItem:size-installed, object property in ListallerAppItem ListallerAppItem:state, object property in ListallerAppItem ListallerAppItem:summary, object property in ListallerAppItem ListallerAppItem:version, object property in ListallerAppItem ListallerAppItem:website, object property in ListallerAppItem ListallerAppItemClass, struct in ListallerAppItem ListallerAppLicense, struct in ListallerAppItem ListallerAppState, enum in ListallerAppItem listaller_app_item_build_pk_package_id, function in ListallerAppItem listaller_app_item_compare_version_with, function in ListallerAppItem listaller_app_item_fast_check, function in ListallerAppItem listaller_app_item_get_appid, function in ListallerAppItem listaller_app_item_get_author, function in ListallerAppItem listaller_app_item_get_categories, function in ListallerAppItem listaller_app_item_get_dependencies_str, function in ListallerAppItem listaller_app_item_get_description, function in ListallerAppItem listaller_app_item_get_desktop_file, function in ListallerAppItem listaller_app_item_get_full_name, function in ListallerAppItem listaller_app_item_get_icon_name, function in ListallerAppItem listaller_app_item_get_idname, function in ListallerAppItem listaller_app_item_get_install_time, function in ListallerAppItem listaller_app_item_get_license, function in ListallerAppItem listaller_app_item_get_origin, function in ListallerAppItem listaller_app_item_get_publisher, function in ListallerAppItem listaller_app_item_get_raw_cmd, function in ListallerAppItem listaller_app_item_get_replaces, function in ListallerAppItem listaller_app_item_get_size_installed, function in ListallerAppItem listaller_app_item_get_state, function in ListallerAppItem listaller_app_item_get_summary, function in ListallerAppItem listaller_app_item_get_version, function in ListallerAppItem listaller_app_item_get_website, function in ListallerAppItem listaller_app_item_new, function in ListallerAppItem listaller_app_item_new_blank, function in ListallerAppItem listaller_app_item_new_from_desktopfile, function in ListallerAppItem listaller_app_item_new_from_id, function in ListallerAppItem listaller_app_item_set_author, function in ListallerAppItem listaller_app_item_set_categories, function in ListallerAppItem listaller_app_item_set_dependencies_str, function in ListallerAppItem listaller_app_item_set_description, function in ListallerAppItem listaller_app_item_set_desktop_file, function in ListallerAppItem listaller_app_item_set_full_name, function in ListallerAppItem listaller_app_item_set_icon_name, function in ListallerAppItem listaller_app_item_set_install_time, function in ListallerAppItem listaller_app_item_set_license, function in ListallerAppItem listaller_app_item_set_license_from_doap_name, function in ListallerAppItem listaller_app_item_set_license_name, function in ListallerAppItem listaller_app_item_set_license_text, function in ListallerAppItem listaller_app_item_set_origin, function in ListallerAppItem listaller_app_item_set_origin_local, function in ListallerAppItem listaller_app_item_set_publisher, function in ListallerAppItem listaller_app_item_set_replaces, function in ListallerAppItem listaller_app_item_set_size_installed, function in ListallerAppItem listaller_app_item_set_state, function in ListallerAppItem listaller_app_item_set_summary, function in ListallerAppItem listaller_app_item_set_version, function in ListallerAppItem listaller_app_item_set_website, function in ListallerAppItem listaller_app_item_to_string, function in ListallerAppItem listaller_app_item_update_with_appid, function in ListallerAppItem listaller_app_item_update_with_desktop_file, function in ListallerAppItem listaller_app_item_validate_appid, function in ListallerAppItem listaller_app_license_copy, function in ListallerAppItem listaller_app_license_destroy, function in ListallerAppItem listaller_app_license_dup, function in ListallerAppItem listaller_app_license_free, function in ListallerAppItem listaller_app_state_is_all_set, function in ListallerAppItem listaller_app_state_is_any_set, function in ListallerAppItem listaller_app_state_set, function in ListallerAppItem listaller_app_state_to_string, function in ListallerAppItem listaller_app_state_unset, function in ListallerAppItem C listaller_compare_versions, function in version D ListallerDatabaseError, enum in database-internal ListallerDatabaseStatus, enum in database-internal listaller_database_status_to_string, function in database-internal ListallerDepItemType, enum in components E ListallerErrorEnum, enum in ListallerErrorItem ListallerErrorItem, struct in ListallerErrorItem ListallerErrorItem:details, object property in ListallerErrorItem ListallerErrorItem:error, object property in ListallerErrorItem ListallerErrorItemClass, struct in ListallerErrorItem listaller_error_enum_to_string, function in ListallerErrorItem listaller_error_item_get_details, function in ListallerErrorItem listaller_error_item_get_error, function in ListallerErrorItem listaller_error_item_new, function in ListallerErrorItem listaller_error_item_to_string, function in ListallerErrorItem G listaller_get_full_version_info_str, function in version listaller_get_verbose_mode, function in logging listaller_get_version_info_str, function in version I ListallerIPKChangelog, struct in ListallerIPKChangelog ListallerIPKChangelogClass, struct in ListallerIPKChangelog ListallerIPKControl, struct in ListallerIPKControl ListallerIPKControl:user-accept-license, object property in ListallerIPKControl ListallerIPKControlClass, struct in ListallerIPKControl ListallerIPKControlDataError, enum in ListallerIPKControl ListallerIPKControlDir, struct in ListallerIPKControl ListallerIPKControlDirClass, struct in ListallerIPKControl ListallerIPKInstallMode, enum in ListallerSetupSettings ListallerIPKPackControl, struct in ListallerIPKControl ListallerIPKPackControlClass, struct in ListallerIPKControl ListallerIPKSecurityInfo, struct in ListallerIPKSecurityInfo ListallerIPKSecurityInfo:key-fpr, object property in ListallerIPKSecurityInfo ListallerIPKSecurityInfo:signature-status, object property in ListallerIPKSecurityInfo ListallerIPKSecurityInfo:signature-trustlevel, object property in ListallerIPKSecurityInfo ListallerIPKSecurityInfo:trust-reason, object property in ListallerIPKSecurityInfo ListallerIPKSecurityInfo:user-names, object property in ListallerIPKSecurityInfo ListallerIPKSecurityInfoClass, struct in ListallerIPKSecurityInfo listaller_ipk_changelog_new, function in ListallerIPKChangelog listaller_ipk_changelog_open, function in ListallerIPKChangelog listaller_ipk_control_dir_auto_dependency_search, function in ListallerIPKControl listaller_ipk_control_dir_get_doap_data, function in ListallerIPKControl listaller_ipk_control_dir_get_files_rootdir, function in ListallerIPKControl listaller_ipk_control_dir_new, function in ListallerIPKControl listaller_ipk_control_dir_open_dir, function in ListallerIPKControl listaller_ipk_control_dir_save_control, function in ListallerIPKControl listaller_ipk_control_get_application, function in ListallerIPKControl listaller_ipk_control_get_architectures, function in ListallerIPKControl listaller_ipk_control_get_dependencies, function in ListallerIPKControl listaller_ipk_control_get_install_modes, function in ListallerIPKControl listaller_ipk_control_get_ipk_version, function in ListallerIPKControl listaller_ipk_control_get_replaces, function in ListallerIPKControl listaller_ipk_control_get_user_accept_license, function in ListallerIPKControl listaller_ipk_control_open_doap, function in ListallerIPKControl listaller_ipk_control_open_doap_file, function in ListallerIPKControl listaller_ipk_control_open_packsetting, function in ListallerIPKControl listaller_ipk_control_set_architectures, function in ListallerIPKControl listaller_ipk_control_set_dependencies, function in ListallerIPKControl listaller_ipk_control_set_install_modes, function in ListallerIPKControl listaller_ipk_control_set_ipk_version, function in ListallerIPKControl listaller_ipk_control_set_license_text, function in ListallerIPKControl listaller_ipk_control_set_license_text_from_file, function in ListallerIPKControl listaller_ipk_control_set_replaces, function in ListallerIPKControl listaller_ipk_control_set_user_accept_license, function in ListallerIPKControl listaller_ipk_install_mode_is_all_set, function in ListallerSetupSettings listaller_ipk_install_mode_is_any_set, function in ListallerSetupSettings listaller_ipk_install_mode_set, function in ListallerSetupSettings listaller_ipk_install_mode_unset, function in ListallerSetupSettings listaller_ipk_pack_control_create_new, function in ListallerIPKControl listaller_ipk_pack_control_get_files, function in ListallerIPKControl listaller_ipk_pack_control_is_delta_pkg, function in ListallerIPKControl listaller_ipk_pack_control_new, function in ListallerIPKControl listaller_ipk_pack_control_open_control, function in ListallerIPKControl listaller_ipk_pack_control_save_to_dir, function in ListallerIPKControl listaller_ipk_pack_control_update_installmode_data, function in ListallerIPKControl listaller_ipk_security_info_get_key_fpr, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_level, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_level_as_sentence, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_level_as_string, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_signature_status, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_signature_trustlevel, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_trust_reason, function in ListallerIPKSecurityInfo listaller_ipk_security_info_get_user_names, function in ListallerIPKSecurityInfo LISTALLER_IPK_TYPE_CHANGELOG, macro in ListallerIPKChangelog LISTALLER_IPK_TYPE_CONTROL, macro in ListallerIPKControl LISTALLER_IPK_TYPE_CONTROL_DIR, macro in ListallerIPKControl LISTALLER_IPK_TYPE_PACK_CONTROL, macro in ListallerIPKControl LISTALLER_IPK_TYPE_SECURITY_INFO, macro in ListallerIPKSecurityInfo K ListallerKeyManager, struct in ListallerKeyManager ListallerKeyManagerClass, struct in ListallerKeyManager listaller_key_manager_get_key_info, function in ListallerKeyManager listaller_key_manager_import_key, function in ListallerKeyManager listaller_key_manager_new, function in ListallerKeyManager M ListallerManager, struct in ListallerManager ListallerManager::application, object signal in ListallerManager ListallerManager::status-changed, object signal in ListallerManager ListallerManager:settings, object property in ListallerManager ListallerManagerClass, struct in ListallerManager listaller_manager_filter_applications, function in ListallerManager listaller_manager_find_applications_by_values, function in ListallerManager listaller_manager_get_applications_by_fullname, function in ListallerManager listaller_manager_get_application_by_idname, function in ListallerManager listaller_manager_get_application_filelist, function in ListallerManager listaller_manager_get_app_ld_environment, function in ListallerManager listaller_manager_get_settings, function in ListallerManager listaller_manager_new, function in ListallerManager listaller_manager_prepare_setup_for_app, function in ListallerManager listaller_manager_refresh_appitem_data, function in ListallerManager listaller_manager_refresh_repository_cache, function in ListallerManager listaller_manager_remove_application, function in ListallerManager ListallerMessageEnum, enum in ListallerErrorItem ListallerMessageItem, struct in ListallerErrorItem ListallerMessageItem:details, object property in ListallerErrorItem ListallerMessageItem:mtype, object property in ListallerErrorItem ListallerMessageItemClass, struct in ListallerErrorItem ListallerMessageObject, struct in ListallerMessageObject ListallerMessageObject::error-code, object signal in ListallerMessageObject ListallerMessageObject::message, object signal in ListallerMessageObject ListallerMessageObject::progress, object signal in ListallerMessageObject ListallerMessageObjectClass, struct in ListallerMessageObject listaller_message_enum_to_string, function in ListallerErrorItem listaller_message_item_get_details, function in ListallerErrorItem listaller_message_item_get_mtype, function in ListallerErrorItem listaller_message_item_new, function in ListallerErrorItem listaller_message_item_to_string, function in ListallerErrorItem listaller_message_object_connect_with_object, function in ListallerMessageObject listaller_message_object_connect_with_object_all, function in ListallerMessageObject listaller_message_object_set_error_hint_str, function in ListallerMessageObject O ListallerObjConnectFlags, enum in ListallerMessageObject P ListallerProgressEnum, enum in ListallerErrorItem ListallerProgressItem, struct in ListallerErrorItem ListallerProgressItem:item-id, object property in ListallerErrorItem ListallerProgressItem:prog-type, object property in ListallerErrorItem ListallerProgressItem:value, object property in ListallerErrorItem ListallerProgressItemClass, struct in ListallerErrorItem listaller_progress_item_get_item_id, function in ListallerErrorItem listaller_progress_item_get_prog_type, function in ListallerErrorItem listaller_progress_item_get_value, function in ListallerErrorItem listaller_progress_item_new, function in ListallerErrorItem S ListallerSecurityLevel, enum in ListallerIPKSecurityInfo listaller_security_level_from_string, function in ListallerIPKSecurityInfo listaller_security_level_to_string, function in ListallerIPKSecurityInfo ListallerSetup, struct in ListallerSetup ListallerSetup::status-changed, object signal in ListallerSetup ListallerSetup:control, object property in ListallerSetup ListallerSetup:fname, object property in ListallerSetup ListallerSetup:settings, object property in ListallerSetup ListallerSetupClass, struct in ListallerSetup ListallerSetupSettings, struct in ListallerSetupSettings ListallerSetupSettings:current-mode, object property in ListallerSetupSettings ListallerSetupSettings:locked, object property in ListallerSetupSettings ListallerSetupSettings:private-mode, object property in ListallerSetupSettings ListallerSetupSettings:shared-mode, object property in ListallerSetupSettings ListallerSetupSettings:test-mode, object property in ListallerSetupSettings ListallerSetupSettingsClass, struct in ListallerSetupSettings listaller_setup_get_control, function in ListallerSetup listaller_setup_get_current_application, function in ListallerSetup listaller_setup_get_fname, function in ListallerSetup listaller_setup_get_install_mode, function in ListallerSetup listaller_setup_get_replaced_native_packs, function in ListallerSetup listaller_setup_get_security_info, function in ListallerSetup listaller_setup_get_settings, function in ListallerSetup listaller_setup_initialize, function in ListallerSetup listaller_setup_kill_installation_process, function in ListallerSetup listaller_setup_new, function in ListallerSetup listaller_setup_run_installation, function in ListallerSetup listaller_setup_settings_appdata_dir, function in ListallerSetupSettings listaller_setup_settings_applications_dir, function in ListallerSetupSettings listaller_setup_settings_appregister_dir, function in ListallerSetupSettings listaller_setup_settings_database_file, function in ListallerSetupSettings listaller_setup_settings_depdata_dir, function in ListallerSetupSettings listaller_setup_settings_get_current_mode, function in ListallerSetupSettings listaller_setup_settings_get_locked, function in ListallerSetupSettings listaller_setup_settings_get_private_mode, function in ListallerSetupSettings listaller_setup_settings_get_shared_mode, function in ListallerSetupSettings listaller_setup_settings_get_test_mode, function in ListallerSetupSettings listaller_setup_settings_icon_base_dir, function in ListallerSetupSettings listaller_setup_settings_icon_size_dir, function in ListallerSetupSettings listaller_setup_settings_lock, function in ListallerSetupSettings listaller_setup_settings_unlock, function in ListallerSetupSettings listaller_setup_set_install_mode, function in ListallerSetup listaller_setup_supported_install_modes, function in ListallerSetup listaller_set_clitool_mode, function in logging listaller_set_console_mode, function in logging listaller_set_verbose_mode, function in logging ListallerSignStatus, enum in ListallerIPKSecurityInfo ListallerSignTrust, enum in ListallerIPKSecurityInfo listaller_sign_status_to_string, function in ListallerIPKSecurityInfo listaller_sign_trust_to_string, function in ListallerIPKSecurityInfo ListallerStatusEnum, enum in ListallerErrorItem ListallerStatusItem, struct in ListallerErrorItem ListallerStatusItem:info, object property in ListallerErrorItem ListallerStatusItem:status, object property in ListallerErrorItem ListallerStatusItemClass, struct in ListallerErrorItem listaller_status_item_get_info, function in ListallerErrorItem listaller_status_item_get_status, function in ListallerErrorItem listaller_status_item_new, function in ListallerErrorItem T LISTALLER_TYPE_APP_ITEM, macro in ListallerAppItem LISTALLER_TYPE_ERROR_ITEM, macro in ListallerErrorItem LISTALLER_TYPE_KEY_MANAGER, macro in ListallerKeyManager LISTALLER_TYPE_MANAGER, macro in ListallerManager LISTALLER_TYPE_MESSAGE_ITEM, macro in ListallerErrorItem LISTALLER_TYPE_MESSAGE_OBJECT, macro in ListallerMessageObject LISTALLER_TYPE_PROGRESS_ITEM, macro in ListallerErrorItem LISTALLER_TYPE_SETUP, macro in ListallerSetup LISTALLER_TYPE_SETUP_SETTINGS, macro in ListallerSetupSettings LISTALLER_TYPE_STATUS_ITEM, macro in ListallerErrorItem LISTALLER_TYPE_UPDATER, macro in ListallerUpdater LISTALLER_TYPE_UPDATE_ITEM, macro in ListallerErrorItem U ListallerUpdateItem, struct in ListallerErrorItem ListallerUpdateItem:architecture, object property in ListallerErrorItem ListallerUpdateItem:changelog, object property in ListallerErrorItem ListallerUpdateItem:completed, object property in ListallerErrorItem ListallerUpdateItem:sw-new, object property in ListallerErrorItem ListallerUpdateItem:sw-old, object property in ListallerErrorItem ListallerUpdateItem:sw-type, object property in ListallerErrorItem ListallerUpdateItemClass, struct in ListallerErrorItem ListallerUpdater, struct in ListallerUpdater ListallerUpdater::update, object signal in ListallerUpdater ListallerUpdater:available-updates, object property in ListallerUpdater ListallerUpdater:settings, object property in ListallerUpdater ListallerUpdaterClass, struct in ListallerUpdater listaller_updater_apply_updates, function in ListallerUpdater listaller_updater_apply_updates_all, function in ListallerUpdater listaller_updater_find_updates, function in ListallerUpdater listaller_updater_get_available_updates, function in ListallerUpdater listaller_updater_get_settings, function in ListallerUpdater listaller_updater_new, function in ListallerUpdater listaller_updater_set_settings, function in ListallerUpdater listaller_update_item_get_architecture, function in ListallerErrorItem listaller_update_item_get_changelog, function in ListallerErrorItem listaller_update_item_get_completed, function in ListallerErrorItem listaller_update_item_get_sw_new, function in ListallerErrorItem listaller_update_item_get_sw_old, function in ListallerErrorItem listaller_update_item_get_sw_type, function in ListallerErrorItem listaller_update_item_new, function in ListallerErrorItem listaller_utils_build_filename, function in utils listaller_utils_enable_translation, function in config-global ./Listaller-0.5.8/docs/api/xml/tree_index.sgml0000664000175000017500000000511712176743547021363 0ustar matthiasmatthias ]> GObject ListallerAppItem ListallerErrorItem ListallerIPKChangelog ListallerIPKControl ListallerIPKControlDir ListallerIPKPackControl ListallerIPKSecurityInfo ListallerMessageObject ListallerKeyManager ListallerManager ListallerSetup ListallerUpdater ListallerMessageItem ListallerProgressItem ListallerSetupSettings ListallerStatusItem ListallerUpdateItem GBoxed ListallerAppLicense GFlags ListallerAppState ListallerIPKInstallMode GEnum ListallerDatabaseStatus ListallerDepItemType ListallerErrorEnum ListallerMessageEnum ListallerObjConnectFlags ListallerProgressEnum ListallerSecurityLevel ListallerSignStatus ListallerSignTrust ListallerStatusEnum ./Listaller-0.5.8/docs/api/xml/annotation-glossary.xml0000664000175000017500000000357212176743547023111 0ustar matthiasmatthias ]> Annotation Glossary O out Parameter for returning results. Default is transfer full. A array Parameter points to an array of items. I in Parameter for input. Default is transfer none. T transfer full Free data after the code is done. E error-domains Typed errors. Similar to throws in Java. T transfer none Don't free data after the code is done. ./Listaller-0.5.8/docs/api/xml/config-global.xml0000664000175000017500000000351012176743547021571 0ustar matthiasmatthias ]> config-global 3 LISTALLER Library config-global Synopsis void listaller_utils_enable_translation (void); Description Details listaller_utils_enable_translation () listaller_utils_enable_translation void listaller_utils_enable_translation (void); self : the (null) instance ./Listaller-0.5.8/docs/api/xml/logging.xml0000664000175000017500000001343512176743547020523 0ustar matthiasmatthias ]> logging 3 LISTALLER Library logging Synopsis void listaller_set_verbose_mode (gboolean enabled); gboolean listaller_get_verbose_mode (void); void listaller_set_console_mode (gboolean enabled); void listaller_set_clitool_mode (gboolean enabled); void listaller_add_log_domain (const gchar *log_domain); Description Details listaller_set_verbose_mode () listaller_set_verbose_mode void listaller_set_verbose_mode (gboolean enabled); self : the (null) instance enabled :   listaller_get_verbose_mode () listaller_get_verbose_mode gboolean listaller_get_verbose_mode (void); self : the (null) instance listaller_set_console_mode () listaller_set_console_mode void listaller_set_console_mode (gboolean enabled); self : the (null) instance enabled :   listaller_set_clitool_mode () listaller_set_clitool_mode void listaller_set_clitool_mode (gboolean enabled); self : the (null) instance enabled :   listaller_add_log_domain () listaller_add_log_domain void listaller_add_log_domain (const gchar *log_domain); self : the (null) instance log_domain :   ./Listaller-0.5.8/docs/api/xml/components.xml0000664000175000017500000000370512176743547021261 0ustar matthiasmatthias ]> components 3 LISTALLER Library components Synopsis enum ListallerDepItemType; Object Hierarchy GEnum +----ListallerDepItemType Description Details enum ListallerDepItemType ListallerDepItemType typedef enum { LISTALLER_DEP_ITEM_TYPE_SHARED_LIB, LISTALLER_DEP_ITEM_TYPE_BINARY, LISTALLER_DEP_ITEM_TYPE_PYTHON, LISTALLER_DEP_ITEM_TYPE_PYTHON_2, LISTALLER_DEP_ITEM_TYPE_FILE, LISTALLER_DEP_ITEM_TYPE_UNKNOWN } ListallerDepItemType; Type of a component-item Describes the type of an item which is part of a dependency (framework/module). ./Listaller-0.5.8/docs/api/xml/key-manager.xml0000664000175000017500000001624112176743547021273 0ustar matthiasmatthias ]> ListallerKeyManager 3 LISTALLER Library ListallerKeyManager Manage Listaller's GPG-Key database Synopsis #define LISTALLER_TYPE_KEY_MANAGER gboolean listaller_key_manager_import_key (ListallerKeyManager *self, const gchar *fpr); gchar * listaller_key_manager_get_key_info (ListallerKeyManager *self, const gchar *pattern); ListallerKeyManager * listaller_key_manager_new (void); struct ListallerKeyManager; struct ListallerKeyManagerClass; Object Hierarchy GObject +----ListallerMessageObject +----ListallerKeyManager Description Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels. Details LISTALLER_TYPE_KEY_MANAGER LISTALLER_TYPE_KEY_MANAGER #define LISTALLER_TYPE_KEY_MANAGER (listaller_key_manager_get_type ()) The type for ListallerKeyManager. listaller_key_manager_import_key () listaller_key_manager_import_key gboolean listaller_key_manager_import_key (ListallerKeyManager *self, const gchar *fpr); self : the ListallerKeyManager instance fpr :   listaller_key_manager_get_key_info () listaller_key_manager_get_key_info gchar * listaller_key_manager_get_key_info (ListallerKeyManager *self, const gchar *pattern); self : the ListallerKeyManager instance pattern :   listaller_key_manager_new () listaller_key_manager_new ListallerKeyManager * listaller_key_manager_new (void); struct ListallerKeyManager ListallerKeyManager struct ListallerKeyManager; Manage Listaller's GPG-Key database Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels. struct ListallerKeyManagerClass ListallerKeyManagerClass struct ListallerKeyManagerClass { ListallerMessageObjectClass parent_class; }; The class structure for LISTALLER_TYPE_KEY_MANAGER. All the fields in this structure are private and should never be accessed directly. ListallerMessageObjectClass parent_class; the parent class structure ./Listaller-0.5.8/docs/api/xml/installer.xml0000664000175000017500000006007112176743547021070 0ustar matthiasmatthias ]> ListallerSetup 3 LISTALLER Library ListallerSetup Performs the installation of an IPK package Synopsis #define LISTALLER_TYPE_SETUP ListallerIPKInstallMode listaller_setup_supported_install_modes (ListallerSetup *self); gboolean listaller_setup_set_install_mode (ListallerSetup *self, ListallerIPKInstallMode mode); ListallerIPKInstallMode listaller_setup_get_install_mode (ListallerSetup *self); gboolean listaller_setup_initialize (ListallerSetup *self); ListallerAppItem * listaller_setup_get_current_application (ListallerSetup *self); void listaller_setup_kill_installation_process (ListallerSetup *self); gchar * listaller_setup_get_replaced_native_packs (ListallerSetup *self); gboolean listaller_setup_run_installation (ListallerSetup *self); ListallerIPKSecurityInfo * listaller_setup_get_security_info (ListallerSetup *self); ListallerSetup * listaller_setup_new (const gchar *ipkfilename); const gchar * listaller_setup_get_fname (ListallerSetup *self); ListallerSetupSettings * listaller_setup_get_settings (ListallerSetup *self); ListallerIPKControl * listaller_setup_get_control (ListallerSetup *self); struct ListallerSetup; struct ListallerSetupClass; Object Hierarchy GObject +----ListallerMessageObject +----ListallerSetup Properties "control" ListallerIPKControl* : Read "fname" gchar* : Read "settings" ListallerSetupSettings* : Read Signals "status-changed" : Run Last Description This class handles all stuff required to install an application. All methods are syncronous right now. Details LISTALLER_TYPE_SETUP LISTALLER_TYPE_SETUP #define LISTALLER_TYPE_SETUP (listaller_setup_get_type ()) The type for ListallerSetup. listaller_setup_supported_install_modes () listaller_setup_supported_install_modes ListallerIPKInstallMode listaller_setup_supported_install_modes (ListallerSetup *self); self : the ListallerSetup instance listaller_setup_set_install_mode () listaller_setup_set_install_mode gboolean listaller_setup_set_install_mode (ListallerSetup *self, ListallerIPKInstallMode mode); self : the ListallerSetup instance mode :   listaller_setup_get_install_mode () listaller_setup_get_install_mode ListallerIPKInstallMode listaller_setup_get_install_mode (ListallerSetup *self); self : the ListallerSetup instance listaller_setup_initialize () listaller_setup_initialize gboolean listaller_setup_initialize (ListallerSetup *self); self : the ListallerSetup instance listaller_setup_get_current_application () listaller_setup_get_current_application ListallerAppItem * listaller_setup_get_current_application (ListallerSetup *self); self : the ListallerSetup instance listaller_setup_kill_installation_process () listaller_setup_kill_installation_process void listaller_setup_kill_installation_process (ListallerSetup *self); Forcibly kills a running installation process. You should never use this method, it might only be useful in command-line applications, where you can catch an interrupt signal and tell the running setup about it. It might be used on mobile devices if a setup is running and the device is running out of power. (but best way in that case would be to prevent an installation in the first place, if there is not enough energy left) This function does some emergency cleanup and tries to make sure that nothing gets corrupted. self : the ListallerSetup instance listaller_setup_get_replaced_native_packs () listaller_setup_get_replaced_native_packs gchar * listaller_setup_get_replaced_native_packs (ListallerSetup *self); Check if there are native packages providing the same functionality Software packages can declare a "replaces" element, showing which native componants become obsolete if their 3rd-party app gets installed. E.g. Firefox could declare a replacement of "/usr/bin/firefox", so the user gets hinted to maybe remove the native package. This feature is optional, and Listaller won't perform any removal actions! This function will fail if the user did not request a shared installation. self : the ListallerSetup instance Returns :List of replaces package-ids, separated by newlines or NULL if no replacement was declared. listaller_setup_run_installation () listaller_setup_run_installation gboolean listaller_setup_run_installation (ListallerSetup *self); Execute software installation self : the ListallerSetup instance Returns :Success of the operation (if FALSE, an error was emitted) listaller_setup_get_security_info () listaller_setup_get_security_info ListallerIPKSecurityInfo * listaller_setup_get_security_info (ListallerSetup *self); self : the ListallerSetup instance listaller_setup_new () listaller_setup_new ListallerSetup * listaller_setup_new (const gchar *ipkfilename); ipkfilename :   listaller_setup_get_fname () listaller_setup_get_fname const gchar * listaller_setup_get_fname (ListallerSetup *self); Get and return the current value of the "fname" property. self : the ListallerSetup instance to query Returns :the value of the "fname" property listaller_setup_get_settings () listaller_setup_get_settings ListallerSetupSettings * listaller_setup_get_settings (ListallerSetup *self); Get and return the current value of the "settings" property. self : the ListallerSetup instance to query Returns :the value of the "settings" property listaller_setup_get_control () listaller_setup_get_control ListallerIPKControl * listaller_setup_get_control (ListallerSetup *self); Get and return the current value of the "control" property. self : the ListallerSetup instance to query Returns :the value of the "control" property struct ListallerSetup ListallerSetup struct ListallerSetup; Performs the installation of an IPK package This class handles all stuff required to install an application. All methods are syncronous right now. struct ListallerSetupClass ListallerSetupClass struct ListallerSetupClass { ListallerMessageObjectClass parent_class; }; The class structure for LISTALLER_TYPE_SETUP. All the fields in this structure are private and should never be accessed directly. ListallerMessageObjectClass parent_class; the parent class structure Property Details The <literal>"control"</literal> property ListallerSetup:control "control" ListallerIPKControl* : Read control. The <literal>"fname"</literal> property ListallerSetup:fname "fname" gchar* : Read fname.Default value: NULL The <literal>"settings"</literal> property ListallerSetup:settings "settings" ListallerSetupSettings* : Read settings. Signal Details The <literal>"status-changed"</literal> signal ListallerSetup::status-changed void user_function (ListallerSetup *setup, ListallerStatusItem *status, gpointer user_data) : Run Last setup : the ListallerSetup instance that received the signal status :   user_data : user data set when the signal handler was connected. ./Listaller-0.5.8/docs/api/xml/listaller-doc.bottom0000664000175000017500000000136112176743547022332 0ustar matthiasmatthias ./Listaller-0.5.8/docs/api/xml/version.xml0000664000175000017500000001143512176743547020560 0ustar matthiasmatthias ]> version 3 LISTALLER Library version Synopsis gchar * listaller_get_version_info_str (void); gchar * listaller_get_full_version_info_str (void); gint listaller_compare_versions (const gchar *a, const gchar *b); Description Details listaller_get_version_info_str () listaller_get_version_info_str gchar * listaller_get_version_info_str (void); Get string describing Listaller's version number. self : the (null) instance Returns :Listaller version string listaller_get_full_version_info_str () listaller_get_full_version_info_str gchar * listaller_get_full_version_info_str (void); Get string describing Listaller's version number. This function will return a more detailed description of Listaller's version and the OS it's running on. self : the (null) instance Returns :detailed Listaller version string listaller_compare_versions () listaller_compare_versions gint listaller_compare_versions (const gchar *a, const gchar *b); compare alpha and numeric segments of two versions self : the (null) instance a :   b :   Returns :1: a is newer than b 0: a and b are the same version -1: b is newer than a ./Listaller-0.5.8/docs/api/xml/application.xml0000664000175000017500000032151612176743547021402 0ustar matthiasmatthias ]> ListallerAppItem 3 LISTALLER Library ListallerAppItem Application entry Synopsis #define LISTALLER_TYPE_APP_ITEM void listaller_app_item_set_origin_local (ListallerAppItem *self); gchar * listaller_app_item_to_string (ListallerAppItem *self); void listaller_app_item_set_license_name (ListallerAppItem *self, const gchar *lName); void listaller_app_item_set_license_text (ListallerAppItem *self, const gchar *lText); void listaller_app_item_set_license_from_doap_name (ListallerAppItem *self, const gchar *name); void listaller_app_item_fast_check (ListallerAppItem *self); void listaller_app_item_update_with_appid (ListallerAppItem *self, gboolean fast); gchar * listaller_app_item_build_pk_package_id (ListallerAppItem *self); void listaller_app_item_update_with_desktop_file (ListallerAppItem *self); gchar * listaller_app_item_get_raw_cmd (ListallerAppItem *self, gboolean subst_cmd); gint listaller_app_item_compare_version_with (ListallerAppItem *self, const gchar *bversion); ListallerAppItem * listaller_app_item_new_blank (void); ListallerAppItem * listaller_app_item_new (const gchar *afullname, const gchar *aversion, const gchar *desktop_filename); ListallerAppItem * listaller_app_item_new_from_id (const gchar *application_id); ListallerAppItem * listaller_app_item_new_from_desktopfile (const gchar *desktop_filename); const gchar * listaller_app_item_get_idname (ListallerAppItem *self); const gchar * listaller_app_item_get_full_name (ListallerAppItem *self); void listaller_app_item_set_full_name (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_version (ListallerAppItem *self); void listaller_app_item_set_version (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_summary (ListallerAppItem *self); void listaller_app_item_set_summary (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_description (ListallerAppItem *self); void listaller_app_item_set_description (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_author (ListallerAppItem *self); void listaller_app_item_set_author (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_publisher (ListallerAppItem *self); void listaller_app_item_set_publisher (ListallerAppItem *self, const gchar *value); void listaller_app_item_get_license (ListallerAppItem *self, ListallerAppLicense *result); void listaller_app_item_set_license (ListallerAppItem *self, ListallerAppLicense *value); const gchar * listaller_app_item_get_categories (ListallerAppItem *self); void listaller_app_item_set_categories (ListallerAppItem *self, const gchar *value); gint listaller_app_item_get_size_installed (ListallerAppItem *self); void listaller_app_item_set_size_installed (ListallerAppItem *self, gint value); const gchar * listaller_app_item_get_desktop_file (ListallerAppItem *self); void listaller_app_item_set_desktop_file (ListallerAppItem *self, const gchar *value); ListallerAppState listaller_app_item_get_state (ListallerAppItem *self); void listaller_app_item_set_state (ListallerAppItem *self, ListallerAppState value); const gchar * listaller_app_item_get_icon_name (ListallerAppItem *self); void listaller_app_item_set_icon_name (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_website (ListallerAppItem *self); void listaller_app_item_set_website (ListallerAppItem *self, const gchar *value); gint64 listaller_app_item_get_install_time (ListallerAppItem *self); void listaller_app_item_set_install_time (ListallerAppItem *self, gint64 value); const gchar * listaller_app_item_get_replaces (ListallerAppItem *self); void listaller_app_item_set_replaces (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_origin (ListallerAppItem *self); void listaller_app_item_set_origin (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_dependencies_str (ListallerAppItem *self); void listaller_app_item_set_dependencies_str (ListallerAppItem *self, const gchar *value); const gchar * listaller_app_item_get_appid (ListallerAppItem *self); gboolean listaller_app_item_validate_appid (const gchar *application_id); struct ListallerAppItem; struct ListallerAppItemClass; gchar * listaller_app_state_to_string (ListallerAppState self); gboolean listaller_app_state_is_all_set (ListallerAppState self, ListallerAppState flags); gboolean listaller_app_state_is_any_set (ListallerAppState self, ListallerAppState flags); ListallerAppState listaller_app_state_set (ListallerAppState self, ListallerAppState mode); ListallerAppState listaller_app_state_unset (ListallerAppState self, ListallerAppState mode); enum ListallerAppState; struct ListallerAppLicense; ListallerAppLicense * listaller_app_license_dup (const ListallerAppLicense *self); void listaller_app_license_free (ListallerAppLicense *self); void listaller_app_license_copy (const ListallerAppLicense *self, ListallerAppLicense *dest); void listaller_app_license_destroy (ListallerAppLicense *self); Object Hierarchy GObject +----ListallerAppItem GFlags +----ListallerAppState GBoxed +----ListallerAppLicense Properties "appid" gchar* : Read "author" gchar* : Read / Write "categories" gchar* : Read / Write "dependencies-str" gchar* : Read / Write "description" gchar* : Read / Write "desktop-file" gchar* : Read / Write "full-name" gchar* : Read / Write "icon-name" gchar* : Read / Write "idname" gchar* : Read / Write "install-time" gint64 : Read / Write "license" ListallerAppLicense* : Read / Write "origin" gchar* : Read / Write "publisher" gchar* : Read / Write "replaces" gchar* : Read / Write "size-installed" gint : Read / Write "state" ListallerAppState : Read / Write "summary" gchar* : Read / Write "version" gchar* : Read / Write "website" gchar* : Read / Write Description Objects of this class contain information about an application Details LISTALLER_TYPE_APP_ITEM LISTALLER_TYPE_APP_ITEM #define LISTALLER_TYPE_APP_ITEM (listaller_app_item_get_type ()) The type for ListallerAppItem. listaller_app_item_set_origin_local () listaller_app_item_set_origin_local void listaller_app_item_set_origin_local (ListallerAppItem *self); self : the ListallerAppItem instance listaller_app_item_to_string () listaller_app_item_to_string gchar * listaller_app_item_to_string (ListallerAppItem *self); self : the ListallerAppItem instance listaller_app_item_set_license_name () listaller_app_item_set_license_name void listaller_app_item_set_license_name (ListallerAppItem *self, const gchar *lName); self : the ListallerAppItem instance lName :   listaller_app_item_set_license_text () listaller_app_item_set_license_text void listaller_app_item_set_license_text (ListallerAppItem *self, const gchar *lText); self : the ListallerAppItem instance lText :   listaller_app_item_set_license_from_doap_name () listaller_app_item_set_license_from_doap_name void listaller_app_item_set_license_from_doap_name (ListallerAppItem *self, const gchar *name); self : the ListallerAppItem instance name :   listaller_app_item_fast_check () listaller_app_item_fast_check void listaller_app_item_fast_check (ListallerAppItem *self); self : the ListallerAppItem instance listaller_app_item_update_with_appid () listaller_app_item_update_with_appid void listaller_app_item_update_with_appid (ListallerAppItem *self, gboolean fast); self : the ListallerAppItem instance fast :   listaller_app_item_build_pk_package_id () listaller_app_item_build_pk_package_id gchar * listaller_app_item_build_pk_package_id (ListallerAppItem *self); Generate a PackageKit package-id for this application self : the ListallerAppItem instance listaller_app_item_update_with_desktop_file () listaller_app_item_update_with_desktop_file void listaller_app_item_update_with_desktop_file (ListallerAppItem *self); self : the ListallerAppItem instance listaller_app_item_get_raw_cmd () listaller_app_item_get_raw_cmd gchar * listaller_app_item_get_raw_cmd (ListallerAppItem *self, gboolean subst_cmd); self : the ListallerAppItem instance subst_cmd :   listaller_app_item_compare_version_with () listaller_app_item_compare_version_with gint listaller_app_item_compare_version_with (ListallerAppItem *self, const gchar *bversion); self : the ListallerAppItem instance bversion :   listaller_app_item_new_blank () listaller_app_item_new_blank ListallerAppItem * listaller_app_item_new_blank (void); listaller_app_item_new () listaller_app_item_new ListallerAppItem * listaller_app_item_new (const gchar *afullname, const gchar *aversion, const gchar *desktop_filename); afullname :   aversion :   desktop_filename :   listaller_app_item_new_from_id () listaller_app_item_new_from_id ListallerAppItem * listaller_app_item_new_from_id (const gchar *application_id); application_id :   listaller_app_item_new_from_desktopfile () listaller_app_item_new_from_desktopfile ListallerAppItem * listaller_app_item_new_from_desktopfile (const gchar *desktop_filename); desktop_filename :   listaller_app_item_get_idname () listaller_app_item_get_idname const gchar * listaller_app_item_get_idname (ListallerAppItem *self); Get and return the current value of the "idname" property. Application identifier self : the ListallerAppItem instance to query Returns :the value of the "idname" property listaller_app_item_get_full_name () listaller_app_item_get_full_name const gchar * listaller_app_item_get_full_name (ListallerAppItem *self); Get and return the current value of the "full-name" property. self : the ListallerAppItem instance to query Returns :the value of the "full-name" property listaller_app_item_set_full_name () listaller_app_item_set_full_name void listaller_app_item_set_full_name (ListallerAppItem *self, const gchar *value); Set the value of the "full-name" property to value. self : the ListallerAppItem instance to modify value : the new value of the "full-name" property listaller_app_item_get_version () listaller_app_item_get_version const gchar * listaller_app_item_get_version (ListallerAppItem *self); Get and return the current value of the "version" property. self : the ListallerAppItem instance to query Returns :the value of the "version" property listaller_app_item_set_version () listaller_app_item_set_version void listaller_app_item_set_version (ListallerAppItem *self, const gchar *value); Set the value of the "version" property to value. self : the ListallerAppItem instance to modify value : the new value of the "version" property listaller_app_item_get_summary () listaller_app_item_get_summary const gchar * listaller_app_item_get_summary (ListallerAppItem *self); Get and return the current value of the "summary" property. self : the ListallerAppItem instance to query Returns :the value of the "summary" property listaller_app_item_set_summary () listaller_app_item_set_summary void listaller_app_item_set_summary (ListallerAppItem *self, const gchar *value); Set the value of the "summary" property to value. self : the ListallerAppItem instance to modify value : the new value of the "summary" property listaller_app_item_get_description () listaller_app_item_get_description const gchar * listaller_app_item_get_description (ListallerAppItem *self); Get and return the current value of the "description" property. self : the ListallerAppItem instance to query Returns :the value of the "description" property listaller_app_item_set_description () listaller_app_item_set_description void listaller_app_item_set_description (ListallerAppItem *self, const gchar *value); Set the value of the "description" property to value. self : the ListallerAppItem instance to modify value : the new value of the "description" property listaller_app_item_get_author () listaller_app_item_get_author const gchar * listaller_app_item_get_author (ListallerAppItem *self); Get and return the current value of the "author" property. self : the ListallerAppItem instance to query Returns :the value of the "author" property listaller_app_item_set_author () listaller_app_item_set_author void listaller_app_item_set_author (ListallerAppItem *self, const gchar *value); Set the value of the "author" property to value. self : the ListallerAppItem instance to modify value : the new value of the "author" property listaller_app_item_get_publisher () listaller_app_item_get_publisher const gchar * listaller_app_item_get_publisher (ListallerAppItem *self); Get and return the current value of the "publisher" property. self : the ListallerAppItem instance to query Returns :the value of the "publisher" property listaller_app_item_set_publisher () listaller_app_item_set_publisher void listaller_app_item_set_publisher (ListallerAppItem *self, const gchar *value); Set the value of the "publisher" property to value. self : the ListallerAppItem instance to modify value : the new value of the "publisher" property listaller_app_item_get_license () listaller_app_item_get_license void listaller_app_item_get_license (ListallerAppItem *self, ListallerAppLicense *result); Get and return the current value of the "license" property. self : the ListallerAppItem instance to query Returns :the value of the "license" property listaller_app_item_set_license () listaller_app_item_set_license void listaller_app_item_set_license (ListallerAppItem *self, ListallerAppLicense *value); Set the value of the "license" property to value. self : the ListallerAppItem instance to modify value : the new value of the "license" property listaller_app_item_get_categories () listaller_app_item_get_categories const gchar * listaller_app_item_get_categories (ListallerAppItem *self); Get and return the current value of the "categories" property. self : the ListallerAppItem instance to query Returns :the value of the "categories" property listaller_app_item_set_categories () listaller_app_item_set_categories void listaller_app_item_set_categories (ListallerAppItem *self, const gchar *value); Set the value of the "categories" property to value. self : the ListallerAppItem instance to modify value : the new value of the "categories" property listaller_app_item_get_size_installed () listaller_app_item_get_size_installed gint listaller_app_item_get_size_installed (ListallerAppItem *self); Get and return the current value of the "size-installed" property. self : the ListallerAppItem instance to query Returns :the value of the "size-installed" property listaller_app_item_set_size_installed () listaller_app_item_set_size_installed void listaller_app_item_set_size_installed (ListallerAppItem *self, gint value); Set the value of the "size-installed" property to value. self : the ListallerAppItem instance to modify value : the new value of the "size-installed" property listaller_app_item_get_desktop_file () listaller_app_item_get_desktop_file const gchar * listaller_app_item_get_desktop_file (ListallerAppItem *self); Get and return the current value of the "desktop-file" property. self : the ListallerAppItem instance to query Returns :the value of the "desktop-file" property listaller_app_item_set_desktop_file () listaller_app_item_set_desktop_file void listaller_app_item_set_desktop_file (ListallerAppItem *self, const gchar *value); Set the value of the "desktop-file" property to value. self : the ListallerAppItem instance to modify value : the new value of the "desktop-file" property listaller_app_item_get_state () listaller_app_item_get_state ListallerAppState listaller_app_item_get_state (ListallerAppItem *self); Get and return the current value of the "state" property. self : the ListallerAppItem instance to query Returns :the value of the "state" property listaller_app_item_set_state () listaller_app_item_set_state void listaller_app_item_set_state (ListallerAppItem *self, ListallerAppState value); Set the value of the "state" property to value. self : the ListallerAppItem instance to modify value : the new value of the "state" property listaller_app_item_get_icon_name () listaller_app_item_get_icon_name const gchar * listaller_app_item_get_icon_name (ListallerAppItem *self); Get and return the current value of the "icon-name" property. self : the ListallerAppItem instance to query Returns :the value of the "icon-name" property listaller_app_item_set_icon_name () listaller_app_item_set_icon_name void listaller_app_item_set_icon_name (ListallerAppItem *self, const gchar *value); Set the value of the "icon-name" property to value. self : the ListallerAppItem instance to modify value : the new value of the "icon-name" property listaller_app_item_get_website () listaller_app_item_get_website const gchar * listaller_app_item_get_website (ListallerAppItem *self); Get and return the current value of the "website" property. self : the ListallerAppItem instance to query Returns :the value of the "website" property listaller_app_item_set_website () listaller_app_item_set_website void listaller_app_item_set_website (ListallerAppItem *self, const gchar *value); Set the value of the "website" property to value. self : the ListallerAppItem instance to modify value : the new value of the "website" property listaller_app_item_get_install_time () listaller_app_item_get_install_time gint64 listaller_app_item_get_install_time (ListallerAppItem *self); Get and return the current value of the "install-time" property. self : the ListallerAppItem instance to query Returns :the value of the "install-time" property listaller_app_item_set_install_time () listaller_app_item_set_install_time void listaller_app_item_set_install_time (ListallerAppItem *self, gint64 value); Set the value of the "install-time" property to value. self : the ListallerAppItem instance to modify value : the new value of the "install-time" property listaller_app_item_get_replaces () listaller_app_item_get_replaces const gchar * listaller_app_item_get_replaces (ListallerAppItem *self); Get and return the current value of the "replaces" property. self : the ListallerAppItem instance to query Returns :the value of the "replaces" property listaller_app_item_set_replaces () listaller_app_item_set_replaces void listaller_app_item_set_replaces (ListallerAppItem *self, const gchar *value); Set the value of the "replaces" property to value. self : the ListallerAppItem instance to modify value : the new value of the "replaces" property listaller_app_item_get_origin () listaller_app_item_get_origin const gchar * listaller_app_item_get_origin (ListallerAppItem *self); Get and return the current value of the "origin" property. self : the ListallerAppItem instance to query Returns :the value of the "origin" property listaller_app_item_set_origin () listaller_app_item_set_origin void listaller_app_item_set_origin (ListallerAppItem *self, const gchar *value); Set the value of the "origin" property to value. self : the ListallerAppItem instance to modify value : the new value of the "origin" property listaller_app_item_get_dependencies_str () listaller_app_item_get_dependencies_str const gchar * listaller_app_item_get_dependencies_str (ListallerAppItem *self); Get and return the current value of the "dependencies-str" property. self : the ListallerAppItem instance to query Returns :the value of the "dependencies-str" property listaller_app_item_set_dependencies_str () listaller_app_item_set_dependencies_str void listaller_app_item_set_dependencies_str (ListallerAppItem *self, const gchar *value); Set the value of the "dependencies-str" property to value. self : the ListallerAppItem instance to modify value : the new value of the "dependencies-str" property listaller_app_item_get_appid () listaller_app_item_get_appid const gchar * listaller_app_item_get_appid (ListallerAppItem *self); Get and return the current value of the "appid" property. self : the ListallerAppItem instance to query Returns :the value of the "appid" property listaller_app_item_validate_appid () listaller_app_item_validate_appid gboolean listaller_app_item_validate_appid (const gchar *application_id); application_id :   struct ListallerAppItem ListallerAppItem struct ListallerAppItem; Application entry Objects of this class contain information about an application struct ListallerAppItemClass ListallerAppItemClass struct ListallerAppItemClass { GObjectClass parent_class; }; The class structure for LISTALLER_TYPE_APP_ITEM. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure listaller_app_state_to_string () listaller_app_state_to_string gchar * listaller_app_state_to_string (ListallerAppState self); self : the ListallerAppState instance listaller_app_state_is_all_set () listaller_app_state_is_all_set gboolean listaller_app_state_is_all_set (ListallerAppState self, ListallerAppState flags); self : the ListallerAppState instance flags :   listaller_app_state_is_any_set () listaller_app_state_is_any_set gboolean listaller_app_state_is_any_set (ListallerAppState self, ListallerAppState flags); self : the ListallerAppState instance flags :   listaller_app_state_set () listaller_app_state_set ListallerAppState listaller_app_state_set (ListallerAppState self, ListallerAppState mode); self : the ListallerAppState instance mode :   listaller_app_state_unset () listaller_app_state_unset ListallerAppState listaller_app_state_unset (ListallerAppState self, ListallerAppState mode); self : the ListallerAppState instance mode :   enum ListallerAppState ListallerAppState typedef enum { LISTALLER_APP_STATE_UNKNOWN = 1 << 0, LISTALLER_APP_STATE_INSTALLED_SHARED = 1 << 1, LISTALLER_APP_STATE_INSTALLED_PRIVATE = 1 << 2, LISTALLER_APP_STATE_AVAILABLE = 1 << 3 } ListallerAppState; Status of an application Indicates if an application is installed (and in which mode it was installed), or if it is in any other, different state. struct ListallerAppLicense ListallerAppLicense struct ListallerAppLicense { gchar* name; gchar* text; }; License name and text pair Describes a software license listaller_app_license_dup () listaller_app_license_dup ListallerAppLicense * listaller_app_license_dup (const ListallerAppLicense *self); Creates a copy of self. See also: listaller_app_license_copy(), listaller_app_license_destroy(), listaller_app_license_free() self : the instance to duplicate Returns :a copy of self, free with listaller_app_license_free() listaller_app_license_free () listaller_app_license_free void listaller_app_license_free (ListallerAppLicense *self); Frees the heap-allocated struct. See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_destroy() self : the struct to free listaller_app_license_copy () listaller_app_license_copy void listaller_app_license_copy (const ListallerAppLicense *self, ListallerAppLicense *dest); Creates a copy of self. See also: listaller_app_license_dup(), listaller_app_license_destroy(), listaller_app_license_free() self : the struct to copy dest : a unused struct. Use listaller_app_license_destroy() to free the content. listaller_app_license_destroy () listaller_app_license_destroy void listaller_app_license_destroy (ListallerAppLicense *self); Frees the content of the struct pointed by self. See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_free() self : the struct to destroy Property Details The <literal>"appid"</literal> property ListallerAppItem:appid "appid" gchar* : Read appid.Default value: NULL The <literal>"author"</literal> property ListallerAppItem:author "author" gchar* : Read / Write author.Default value: NULL The <literal>"categories"</literal> property ListallerAppItem:categories "categories" gchar* : Read / Write categories.Default value: NULL The <literal>"dependencies-str"</literal> property ListallerAppItem:dependencies-str "dependencies-str" gchar* : Read / Write dependencies-str.Default value: NULL The <literal>"description"</literal> property ListallerAppItem:description "description" gchar* : Read / Write description.Default value: NULL The <literal>"desktop-file"</literal> property ListallerAppItem:desktop-file "desktop-file" gchar* : Read / Write desktop-file.Default value: NULL The <literal>"full-name"</literal> property ListallerAppItem:full-name "full-name" gchar* : Read / Write full-name.Default value: NULL The <literal>"icon-name"</literal> property ListallerAppItem:icon-name "icon-name" gchar* : Read / Write icon-name.Default value: NULL The <literal>"idname"</literal> property ListallerAppItem:idname "idname" gchar* : Read / Write Application identifier Default value: NULL The <literal>"install-time"</literal> property ListallerAppItem:install-time "install-time" gint64 : Read / Write install-time.Default value: 0 The <literal>"license"</literal> property ListallerAppItem:license "license" ListallerAppLicense* : Read / Write license. The <literal>"origin"</literal> property ListallerAppItem:origin "origin" gchar* : Read / Write origin.Default value: NULL The <literal>"publisher"</literal> property ListallerAppItem:publisher "publisher" gchar* : Read / Write publisher.Default value: NULL The <literal>"replaces"</literal> property ListallerAppItem:replaces "replaces" gchar* : Read / Write replaces.Default value: NULL The <literal>"size-installed"</literal> property ListallerAppItem:size-installed "size-installed" gint : Read / Write size-installed.Default value: 0 The <literal>"state"</literal> property ListallerAppItem:state "state" ListallerAppState : Read / Write state. The <literal>"summary"</literal> property ListallerAppItem:summary "summary" gchar* : Read / Write summary.Default value: NULL The <literal>"version"</literal> property ListallerAppItem:version "version" gchar* : Read / Write version.Default value: NULL The <literal>"website"</literal> property ListallerAppItem:website "website" gchar* : Read / Write website.Default value: NULL ./Listaller-0.5.8/docs/api/xml/ipk-control.xml0000664000175000017500000015712612176743547021344 0ustar matthiasmatthias ]> ListallerIPKControl 3 LISTALLER Library ListallerIPKControl Generic IPK package control data Synopsis #define LISTALLER_IPK_TYPE_CONTROL gboolean listaller_ipk_control_open_doap (ListallerIPKControl *self, const gchar *data); gboolean listaller_ipk_control_open_doap_file (ListallerIPKControl *self, const gchar *fname); gboolean listaller_ipk_control_open_packsetting (ListallerIPKControl *self, const gchar *pksFName); gchar * listaller_ipk_control_get_ipk_version (ListallerIPKControl *self); void listaller_ipk_control_set_ipk_version (ListallerIPKControl *self, const gchar *ipkV); gchar * listaller_ipk_control_get_architectures (ListallerIPKControl *self); void listaller_ipk_control_set_architectures (ListallerIPKControl *self, const gchar *archs); gchar * listaller_ipk_control_get_replaces (ListallerIPKControl *self); void listaller_ipk_control_set_replaces (ListallerIPKControl *self, const gchar *repList); void listaller_ipk_control_set_install_modes (ListallerIPKControl *self, ListallerIPKInstallMode modes); ListallerIPKInstallMode listaller_ipk_control_get_install_modes (ListallerIPKControl *self); ListallerAppItem * listaller_ipk_control_get_application (ListallerIPKControl *self); void listaller_ipk_control_set_dependencies (ListallerIPKControl *self, const gchar *dependencies_list, const gchar *arch); gchar * listaller_ipk_control_get_dependencies (ListallerIPKControl *self, const gchar *arch, gboolean arch_only); gboolean listaller_ipk_control_set_license_text_from_file (ListallerIPKControl *self, const gchar *fname); void listaller_ipk_control_set_license_text (ListallerIPKControl *self, const gchar *txt); gboolean listaller_ipk_control_get_user_accept_license (ListallerIPKControl *self); void listaller_ipk_control_set_user_accept_license (ListallerIPKControl *self, gboolean value); struct ListallerIPKControl; struct ListallerIPKControlClass; #define LISTALLER_IPK_TYPE_PACK_CONTROL gboolean listaller_ipk_pack_control_open_control (ListallerIPKPackControl *self, const gchar *fPackSetting, const gchar *fDoap); gboolean listaller_ipk_pack_control_create_new (ListallerIPKPackControl *self, const gchar *newDoapData, const gchar *ipkV); gboolean listaller_ipk_pack_control_is_delta_pkg (ListallerIPKPackControl *self); gboolean listaller_ipk_pack_control_save_to_dir (ListallerIPKPackControl *self, const gchar *dirPath); gchar ** listaller_ipk_pack_control_get_files (ListallerIPKPackControl *self); void listaller_ipk_pack_control_update_installmode_data (ListallerIPKPackControl *self); ListallerIPKPackControl * listaller_ipk_pack_control_new (void); struct ListallerIPKPackControl; struct ListallerIPKPackControlClass; #define LISTALLER_IPK_TYPE_CONTROL_DIR gboolean listaller_ipk_control_dir_open_dir (ListallerIPKControlDir *self, const gchar *dir, GError **error); gchar * listaller_ipk_control_dir_get_files_rootdir (ListallerIPKControlDir *self); gboolean listaller_ipk_control_dir_auto_dependency_search (ListallerIPKControlDir *self); gchar * listaller_ipk_control_dir_get_doap_data (ListallerIPKControlDir *self); gboolean listaller_ipk_control_dir_save_control (ListallerIPKControlDir *self); ListallerIPKControlDir * listaller_ipk_control_dir_new (void); struct ListallerIPKControlDir; struct ListallerIPKControlDirClass; enum ListallerIPKControlDataError; Object Hierarchy GObject +----ListallerIPKControl +----ListallerIPKControlDir +----ListallerIPKPackControl GObject +----ListallerIPKControl +----ListallerIPKPackControl GObject +----ListallerIPKControl +----ListallerIPKControlDir Properties "user-accept-license" gboolean : Read / Write Description Details LISTALLER_IPK_TYPE_CONTROL LISTALLER_IPK_TYPE_CONTROL #define LISTALLER_IPK_TYPE_CONTROL (listaller_ipk_control_get_type ()) The type for ListallerIPKControl. listaller_ipk_control_open_doap () listaller_ipk_control_open_doap gboolean listaller_ipk_control_open_doap (ListallerIPKControl *self, const gchar *data); self : the ListallerIPKControl instance data :   listaller_ipk_control_open_doap_file () listaller_ipk_control_open_doap_file gboolean listaller_ipk_control_open_doap_file (ListallerIPKControl *self, const gchar *fname); self : the ListallerIPKControl instance fname :   listaller_ipk_control_open_packsetting () listaller_ipk_control_open_packsetting gboolean listaller_ipk_control_open_packsetting (ListallerIPKControl *self, const gchar *pksFName); self : the ListallerIPKControl instance pksFName :   listaller_ipk_control_get_ipk_version () listaller_ipk_control_get_ipk_version gchar * listaller_ipk_control_get_ipk_version (ListallerIPKControl *self); self : the ListallerIPKControl instance listaller_ipk_control_set_ipk_version () listaller_ipk_control_set_ipk_version void listaller_ipk_control_set_ipk_version (ListallerIPKControl *self, const gchar *ipkV); self : the ListallerIPKControl instance ipkV :   listaller_ipk_control_get_architectures () listaller_ipk_control_get_architectures gchar * listaller_ipk_control_get_architectures (ListallerIPKControl *self); Get architectures supported by this package self : the ListallerIPKControl instance listaller_ipk_control_set_architectures () listaller_ipk_control_set_architectures void listaller_ipk_control_set_architectures (ListallerIPKControl *self, const gchar *archs); Set architectures supported by this package self : the ListallerIPKControl instance archs :   listaller_ipk_control_get_replaces () listaller_ipk_control_get_replaces gchar * listaller_ipk_control_get_replaces (ListallerIPKControl *self); Get replaced native components for the package. self : the ListallerIPKControl instance listaller_ipk_control_set_replaces () listaller_ipk_control_set_replaces void listaller_ipk_control_set_replaces (ListallerIPKControl *self, const gchar *repList); self : the ListallerIPKControl instance repList :   listaller_ipk_control_set_install_modes () listaller_ipk_control_set_install_modes void listaller_ipk_control_set_install_modes (ListallerIPKControl *self, ListallerIPKInstallMode modes); self : the ListallerIPKControl instance modes :   listaller_ipk_control_get_install_modes () listaller_ipk_control_get_install_modes ListallerIPKInstallMode listaller_ipk_control_get_install_modes (ListallerIPKControl *self); self : the ListallerIPKControl instance listaller_ipk_control_get_application () listaller_ipk_control_get_application ListallerAppItem * listaller_ipk_control_get_application (ListallerIPKControl *self); self : the ListallerIPKControl instance listaller_ipk_control_set_dependencies () listaller_ipk_control_set_dependencies void listaller_ipk_control_set_dependencies (ListallerIPKControl *self, const gchar *dependencies_list, const gchar *arch); self : the ListallerIPKControl instance dependencies_list :   arch :   listaller_ipk_control_get_dependencies () listaller_ipk_control_get_dependencies gchar * listaller_ipk_control_get_dependencies (ListallerIPKControl *self, const gchar *arch, gboolean arch_only); self : the ListallerIPKControl instance arch :   arch_only :   listaller_ipk_control_set_license_text_from_file () listaller_ipk_control_set_license_text_from_file gboolean listaller_ipk_control_set_license_text_from_file (ListallerIPKControl *self, const gchar *fname); self : the ListallerIPKControl instance fname :   listaller_ipk_control_set_license_text () listaller_ipk_control_set_license_text void listaller_ipk_control_set_license_text (ListallerIPKControl *self, const gchar *txt); self : the ListallerIPKControl instance txt :   listaller_ipk_control_get_user_accept_license () listaller_ipk_control_get_user_accept_license gboolean listaller_ipk_control_get_user_accept_license (ListallerIPKControl *self); Get and return the current value of the "user-accept-license" property. TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. self : the ListallerIPKControl instance to query Returns :the value of the "user-accept-license" property listaller_ipk_control_set_user_accept_license () listaller_ipk_control_set_user_accept_license void listaller_ipk_control_set_user_accept_license (ListallerIPKControl *self, gboolean value); Set the value of the "user-accept-license" property to value. TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. self : the ListallerIPKControl instance to modify value : the new value of the "user-accept-license" property struct ListallerIPKControl ListallerIPKControl struct ListallerIPKControl; Generic IPK package control data struct ListallerIPKControlClass ListallerIPKControlClass struct ListallerIPKControlClass { GObjectClass parent_class; }; The class structure for LISTALLER_IPK_TYPE_CONTROL. All the fields in this structure are private and should never be accessed directly. GObjectClass parent_class; the parent class structure LISTALLER_IPK_TYPE_PACK_CONTROL LISTALLER_IPK_TYPE_PACK_CONTROL #define LISTALLER_IPK_TYPE_PACK_CONTROL (listaller_ipk_pack_control_get_type ()) The type for ListallerIPKPackControl. listaller_ipk_pack_control_open_control () listaller_ipk_pack_control_open_control gboolean listaller_ipk_pack_control_open_control (ListallerIPKPackControl *self, const gchar *fPackSetting, const gchar *fDoap); self : the ListallerIPKPackControl instance fPackSetting :   fDoap :   listaller_ipk_pack_control_create_new () listaller_ipk_pack_control_create_new gboolean listaller_ipk_pack_control_create_new (ListallerIPKPackControl *self, const gchar *newDoapData, const gchar *ipkV); self : the ListallerIPKPackControl instance newDoapData :   ipkV :   listaller_ipk_pack_control_is_delta_pkg () listaller_ipk_pack_control_is_delta_pkg gboolean listaller_ipk_pack_control_is_delta_pkg (ListallerIPKPackControl *self); self : the ListallerIPKPackControl instance listaller_ipk_pack_control_save_to_dir () listaller_ipk_pack_control_save_to_dir gboolean listaller_ipk_pack_control_save_to_dir (ListallerIPKPackControl *self, const gchar *dirPath); self : the ListallerIPKPackControl instance dirPath :   listaller_ipk_pack_control_get_files () listaller_ipk_pack_control_get_files gchar ** listaller_ipk_pack_control_get_files (ListallerIPKPackControl *self); self : the ListallerIPKPackControl instance Returns :. [array length=result_length1] listaller_ipk_pack_control_update_installmode_data () listaller_ipk_pack_control_update_installmode_data void listaller_ipk_pack_control_update_installmode_data (ListallerIPKPackControl *self); self : the ListallerIPKPackControl instance listaller_ipk_pack_control_new () listaller_ipk_pack_control_new ListallerIPKPackControl * listaller_ipk_pack_control_new (void); struct ListallerIPKPackControl ListallerIPKPackControl struct ListallerIPKPackControl; Control metadata of an IPK package struct ListallerIPKPackControlClass ListallerIPKPackControlClass struct ListallerIPKPackControlClass { ListallerIPKControlClass parent_class; }; The class structure for LISTALLER_IPK_TYPE_PACK_CONTROL. All the fields in this structure are private and should never be accessed directly. ListallerIPKControlClass parent_class; the parent class structure LISTALLER_IPK_TYPE_CONTROL_DIR LISTALLER_IPK_TYPE_CONTROL_DIR #define LISTALLER_IPK_TYPE_CONTROL_DIR (listaller_ipk_control_dir_get_type ()) The type for ListallerIPKControlDir. listaller_ipk_control_dir_open_dir () listaller_ipk_control_dir_open_dir gboolean listaller_ipk_control_dir_open_dir (ListallerIPKControlDir *self, const gchar *dir, GError **error); self : the ListallerIPKControlDir instance dir :   error : location to store the error occuring, or NULL to ignore. [error-domains ListallerIPKControlDataError] listaller_ipk_control_dir_get_files_rootdir () listaller_ipk_control_dir_get_files_rootdir gchar * listaller_ipk_control_dir_get_files_rootdir (ListallerIPKControlDir *self); self : the ListallerIPKControlDir instance listaller_ipk_control_dir_auto_dependency_search () listaller_ipk_control_dir_auto_dependency_search gboolean listaller_ipk_control_dir_auto_dependency_search (ListallerIPKControlDir *self); self : the ListallerIPKControlDir instance listaller_ipk_control_dir_get_doap_data () listaller_ipk_control_dir_get_doap_data gchar * listaller_ipk_control_dir_get_doap_data (ListallerIPKControlDir *self); self : the ListallerIPKControlDir instance listaller_ipk_control_dir_save_control () listaller_ipk_control_dir_save_control gboolean listaller_ipk_control_dir_save_control (ListallerIPKControlDir *self); self : the ListallerIPKControlDir instance listaller_ipk_control_dir_new () listaller_ipk_control_dir_new ListallerIPKControlDir * listaller_ipk_control_dir_new (void); struct ListallerIPKControlDir ListallerIPKControlDir struct ListallerIPKControlDir; Data stored in an IPK-source control directory. This class is used by tools like lipkgen to extract data about a to-be-created IPK package from an IPK control directory. struct ListallerIPKControlDirClass ListallerIPKControlDirClass struct ListallerIPKControlDirClass { ListallerIPKControlClass parent_class; }; The class structure for LISTALLER_IPK_TYPE_CONTROL_DIR. All the fields in this structure are private and should never be accessed directly. ListallerIPKControlClass parent_class; the parent class structure enum ListallerIPKControlDataError ListallerIPKControlDataError typedef enum { LISTALLER_IPK_CONTROL_DATA_ERROR_NO_DOAP, LISTALLER_IPK_CONTROL_DATA_ERROR_DOAP_INVALID, LISTALLER_IPK_CONTROL_DATA_ERROR_DEPLIST_INVALID, LISTALLER_IPK_CONTROL_DATA_ERROR_INTERNAL, LISTALLER_IPK_CONTROL_DATA_ERROR_UNKNOWN } ListallerIPKControlDataError; Property Details The <literal>"user-accept-license"</literal> property ListallerIPKControl:user-accept-license "user-accept-license" gboolean : Read / Write TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this. Default value: FALSE ./Listaller-0.5.8/docs/api/sgml.stamp0000664000175000017500000000001112176743547017545 0ustar matthiasmatthiastimestamp./Listaller-0.5.8/docs/api/listaller.types0000664000175000017500000000177312150512741020614 0ustar matthiasmatthiaslistaller_app_item_get_type listaller_app_license_get_type listaller_app_state_get_type listaller_database_status_get_type listaller_dep_item_type_get_type listaller_doap_data_get_type listaller_error_enum_get_type listaller_error_item_get_type listaller_ipk_changelog_get_type listaller_ipk_control_dir_get_type listaller_ipk_control_get_type listaller_ipk_install_mode_get_type listaller_ipk_meta_file_get_type listaller_ipk_pack_control_get_type listaller_ipk_security_info_get_type listaller_key_manager_get_type listaller_manager_get_type listaller_message_enum_get_type listaller_message_item_get_type listaller_message_object_get_type listaller_obj_connect_flags_get_type listaller_progress_enum_get_type listaller_progress_item_get_type listaller_security_level_get_type listaller_setup_get_type listaller_setup_settings_get_type listaller_sign_status_get_type listaller_sign_trust_get_type listaller_status_enum_get_type listaller_status_item_get_type listaller_update_item_get_type listaller_updater_get_type ./Listaller-0.5.8/docs/api/html/0000755000175000017500000000000012176743563016505 5ustar matthiasmatthias./Listaller-0.5.8/docs/api/html/ListallerManager.html0000664000175000017500000010467712176743563022642 0ustar matthiasmatthias ListallerManager

ListallerManager

ListallerManager — Allows managing Listaller applications

Object Hierarchy

  GObject
   +----ListallerMessageObject
         +----ListallerManager

Properties

  "settings"                 ListallerSetupSettings*  : Read / Write

Description

This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources.

Details

LISTALLER_TYPE_MANAGER

#define LISTALLER_TYPE_MANAGER (listaller_manager_get_type ())

The type for ListallerManager.


listaller_manager_filter_applications ()

gboolean            listaller_manager_filter_applications
                                                        (ListallerManager *self,
                                                         ListallerAppState filter,
                                                         GeeArrayList **app_list);

self :

the ListallerManager instance

filter :

 

app_list :

 

listaller_manager_find_applications_by_values ()

gboolean            listaller_manager_find_applications_by_values
                                                        (ListallerManager *self,
                                                         const gchar *filter,
                                                         gchar **values,
                                                         GeeArrayList **appList);

Find applications which match the strings in values

self :

the ListallerManager instance

filter :

 . Filter, which is applied on the results. [in]

values :

 . Null-terminated list of strings to search for. [in][array length=values_length1]

values_length1 :

length of the values array

appList :

 . ArrayList of AppItems to store the result, or NULL (all applications are also emitted in the "application" signal). [out]

listaller_manager_get_applications_by_fullname ()

GeeArrayList *      listaller_manager_get_applications_by_fullname
                                                        (ListallerManager *self,
                                                         const gchar *full_name);

self :

the ListallerManager instance

full_name :

 

listaller_manager_get_application_by_idname ()

ListallerAppItem *  listaller_manager_get_application_by_idname
                                                        (ListallerManager *self,
                                                         const gchar *idname);

self :

the ListallerManager instance

idname :

 

listaller_manager_remove_application ()

gboolean            listaller_manager_remove_application
                                                        (ListallerManager *self,
                                                         ListallerAppItem *app);

self :

the ListallerManager instance

app :

 

listaller_manager_refresh_appitem_data ()

gboolean            listaller_manager_refresh_appitem_data
                                                        (ListallerManager *self,
                                                         ListallerAppItem **item);

self :

the ListallerManager instance

item :

 

listaller_manager_get_application_filelist ()

gchar **            listaller_manager_get_application_filelist
                                                        (ListallerManager *self,
                                                         ListallerAppItem *app);

self :

the ListallerManager instance

app :

 

Returns :

. [array length=result_length1]

listaller_manager_get_app_ld_environment ()

gchar *             listaller_manager_get_app_ld_environment
                                                        (ListallerManager *self,
                                                         ListallerAppItem *app);

Get the LD_LIBRARY_PATH environment for an application.

self :

the ListallerManager instance

app :

 . AppItem belonging to an Listaller-installed app. [in]

listaller_manager_refresh_repository_cache ()

gboolean            listaller_manager_refresh_repository_cache
                                                        (ListallerManager *self);

Update the 3rd-party remote application cache. This will allow querying for new updates.

self :

the ListallerManager instance

Returns :

TRUE if refresh was successful.

listaller_manager_prepare_setup_for_app ()

ListallerSetup *    listaller_manager_prepare_setup_for_app
                                                        (ListallerManager *self,
                                                         const gchar *app_idname);

self :

the ListallerManager instance

app_idname :

 

listaller_manager_new ()

ListallerManager *  listaller_manager_new               (gboolean shared_mode);

Create a new Listaller application manager

shared_mode :

 . Whether we are in shared mode or not. [in]

listaller_manager_get_settings ()

ListallerSetupSettings * listaller_manager_get_settings (ListallerManager *self);

Get and return the current value of the "settings" property.

self :

the ListallerManager instance to query

Returns :

the value of the "settings" property

struct ListallerManager

struct ListallerManager;

Allows managing Listaller applications

This class allows managing installed applications as well as performing maintainance tasks to keep applications running. It also allows fetching applications from remote sources.


struct ListallerManagerClass

struct ListallerManagerClass {
	ListallerMessageObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_MANAGER. All the fields in this structure are private and should never be accessed directly.

ListallerMessageObjectClass parent_class;

the parent class structure

Property Details

The "settings" property

  "settings"                 ListallerSetupSettings*  : Read / Write

settings.

Signal Details

The "application" signal

void                user_function                      (ListallerManager *manager,
                                                        ListallerAppItem *appid,
                                                        gpointer          user_data)      : Run Last

manager :

the ListallerManager instance that received the signal

appid :

 

user_data :

user data set when the signal handler was connected.

The "status-changed" signal

void                user_function                      (ListallerManager    *manager,
                                                        ListallerStatusItem *status,
                                                        gpointer             user_data)      : Run Last

manager :

the ListallerManager instance that received the signal

status :

 

user_data :

user data set when the signal handler was connected.
./Listaller-0.5.8/docs/api/html/listaller.devhelp20000664000175000017500000013205612176743562022143 0ustar matthiasmatthias ./Listaller-0.5.8/docs/api/html/ListallerIPKControl.html0000664000175000017500000020146012176743563023240 0ustar matthiasmatthias ListallerIPKControl

ListallerIPKControl

ListallerIPKControl — Generic IPK package control data

Synopsis

#define             LISTALLER_IPK_TYPE_CONTROL
gboolean            listaller_ipk_control_open_doap     (ListallerIPKControl *self,
                                                         const gchar *data);
gboolean            listaller_ipk_control_open_doap_file
                                                        (ListallerIPKControl *self,
                                                         const gchar *fname);
gboolean            listaller_ipk_control_open_packsetting
                                                        (ListallerIPKControl *self,
                                                         const gchar *pksFName);
gchar *             listaller_ipk_control_get_ipk_version
                                                        (ListallerIPKControl *self);
void                listaller_ipk_control_set_ipk_version
                                                        (ListallerIPKControl *self,
                                                         const gchar *ipkV);
gchar *             listaller_ipk_control_get_architectures
                                                        (ListallerIPKControl *self);
void                listaller_ipk_control_set_architectures
                                                        (ListallerIPKControl *self,
                                                         const gchar *archs);
gchar *             listaller_ipk_control_get_replaces  (ListallerIPKControl *self);
void                listaller_ipk_control_set_replaces  (ListallerIPKControl *self,
                                                         const gchar *repList);
void                listaller_ipk_control_set_install_modes
                                                        (ListallerIPKControl *self,
                                                         ListallerIPKInstallMode modes);
ListallerIPKInstallMode listaller_ipk_control_get_install_modes
                                                        (ListallerIPKControl *self);
ListallerAppItem *  listaller_ipk_control_get_application
                                                        (ListallerIPKControl *self);
void                listaller_ipk_control_set_dependencies
                                                        (ListallerIPKControl *self,
                                                         const gchar *dependencies_list,
                                                         const gchar *arch);
gchar *             listaller_ipk_control_get_dependencies
                                                        (ListallerIPKControl *self,
                                                         const gchar *arch,
                                                         gboolean arch_only);
gboolean            listaller_ipk_control_set_license_text_from_file
                                                        (ListallerIPKControl *self,
                                                         const gchar *fname);
void                listaller_ipk_control_set_license_text
                                                        (ListallerIPKControl *self,
                                                         const gchar *txt);
gboolean            listaller_ipk_control_get_user_accept_license
                                                        (ListallerIPKControl *self);
void                listaller_ipk_control_set_user_accept_license
                                                        (ListallerIPKControl *self,
                                                         gboolean value);
struct              ListallerIPKControl;
struct              ListallerIPKControlClass;
#define             LISTALLER_IPK_TYPE_PACK_CONTROL
gboolean            listaller_ipk_pack_control_open_control
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *fPackSetting,
                                                         const gchar *fDoap);
gboolean            listaller_ipk_pack_control_create_new
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *newDoapData,
                                                         const gchar *ipkV);
gboolean            listaller_ipk_pack_control_is_delta_pkg
                                                        (ListallerIPKPackControl *self);
gboolean            listaller_ipk_pack_control_save_to_dir
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *dirPath);
gchar **            listaller_ipk_pack_control_get_files
                                                        (ListallerIPKPackControl *self);
void                listaller_ipk_pack_control_update_installmode_data
                                                        (ListallerIPKPackControl *self);
ListallerIPKPackControl * listaller_ipk_pack_control_new
                                                        (void);
struct              ListallerIPKPackControl;
struct              ListallerIPKPackControlClass;
#define             LISTALLER_IPK_TYPE_CONTROL_DIR
gboolean            listaller_ipk_control_dir_open_dir  (ListallerIPKControlDir *self,
                                                         const gchar *dir,
                                                         GError **error);
gchar *             listaller_ipk_control_dir_get_files_rootdir
                                                        (ListallerIPKControlDir *self);
gboolean            listaller_ipk_control_dir_auto_dependency_search
                                                        (ListallerIPKControlDir *self);
gchar *             listaller_ipk_control_dir_get_doap_data
                                                        (ListallerIPKControlDir *self);
gboolean            listaller_ipk_control_dir_save_control
                                                        (ListallerIPKControlDir *self);
ListallerIPKControlDir * listaller_ipk_control_dir_new  (void);
struct              ListallerIPKControlDir;
struct              ListallerIPKControlDirClass;
enum                ListallerIPKControlDataError;

Object Hierarchy

  GObject
   +----ListallerIPKControl
         +----ListallerIPKControlDir
         +----ListallerIPKPackControl
  GObject
   +----ListallerIPKControl
         +----ListallerIPKPackControl
  GObject
   +----ListallerIPKControl
         +----ListallerIPKControlDir

Properties

  "user-accept-license"      gboolean              : Read / Write

Description

Details

LISTALLER_IPK_TYPE_CONTROL

#define LISTALLER_IPK_TYPE_CONTROL (listaller_ipk_control_get_type ())

The type for ListallerIPKControl.


listaller_ipk_control_open_doap ()

gboolean            listaller_ipk_control_open_doap     (ListallerIPKControl *self,
                                                         const gchar *data);

self :

the ListallerIPKControl instance

data :

 

listaller_ipk_control_open_doap_file ()

gboolean            listaller_ipk_control_open_doap_file
                                                        (ListallerIPKControl *self,
                                                         const gchar *fname);

self :

the ListallerIPKControl instance

fname :

 

listaller_ipk_control_open_packsetting ()

gboolean            listaller_ipk_control_open_packsetting
                                                        (ListallerIPKControl *self,
                                                         const gchar *pksFName);

self :

the ListallerIPKControl instance

pksFName :

 

listaller_ipk_control_get_ipk_version ()

gchar *             listaller_ipk_control_get_ipk_version
                                                        (ListallerIPKControl *self);

self :

the ListallerIPKControl instance

listaller_ipk_control_set_ipk_version ()

void                listaller_ipk_control_set_ipk_version
                                                        (ListallerIPKControl *self,
                                                         const gchar *ipkV);

self :

the ListallerIPKControl instance

ipkV :

 

listaller_ipk_control_get_architectures ()

gchar *             listaller_ipk_control_get_architectures
                                                        (ListallerIPKControl *self);

Get architectures supported by this package

self :

the ListallerIPKControl instance

listaller_ipk_control_set_architectures ()

void                listaller_ipk_control_set_architectures
                                                        (ListallerIPKControl *self,
                                                         const gchar *archs);

Set architectures supported by this package

self :

the ListallerIPKControl instance

archs :

 

listaller_ipk_control_get_replaces ()

gchar *             listaller_ipk_control_get_replaces  (ListallerIPKControl *self);

Get replaced native components for the package.

self :

the ListallerIPKControl instance

listaller_ipk_control_set_replaces ()

void                listaller_ipk_control_set_replaces  (ListallerIPKControl *self,
                                                         const gchar *repList);

self :

the ListallerIPKControl instance

repList :

 

listaller_ipk_control_set_install_modes ()

void                listaller_ipk_control_set_install_modes
                                                        (ListallerIPKControl *self,
                                                         ListallerIPKInstallMode modes);

self :

the ListallerIPKControl instance

modes :

 

listaller_ipk_control_get_install_modes ()

ListallerIPKInstallMode listaller_ipk_control_get_install_modes
                                                        (ListallerIPKControl *self);

self :

the ListallerIPKControl instance

listaller_ipk_control_get_application ()

ListallerAppItem *  listaller_ipk_control_get_application
                                                        (ListallerIPKControl *self);

self :

the ListallerIPKControl instance

listaller_ipk_control_set_dependencies ()

void                listaller_ipk_control_set_dependencies
                                                        (ListallerIPKControl *self,
                                                         const gchar *dependencies_list,
                                                         const gchar *arch);

self :

the ListallerIPKControl instance

dependencies_list :

 

arch :

 

listaller_ipk_control_get_dependencies ()

gchar *             listaller_ipk_control_get_dependencies
                                                        (ListallerIPKControl *self,
                                                         const gchar *arch,
                                                         gboolean arch_only);

self :

the ListallerIPKControl instance

arch :

 

arch_only :

 

listaller_ipk_control_set_license_text_from_file ()

gboolean            listaller_ipk_control_set_license_text_from_file
                                                        (ListallerIPKControl *self,
                                                         const gchar *fname);

self :

the ListallerIPKControl instance

fname :

 

listaller_ipk_control_set_license_text ()

void                listaller_ipk_control_set_license_text
                                                        (ListallerIPKControl *self,
                                                         const gchar *txt);

self :

the ListallerIPKControl instance

txt :

 

listaller_ipk_control_get_user_accept_license ()

gboolean            listaller_ipk_control_get_user_accept_license
                                                        (ListallerIPKControl *self);

Get and return the current value of the "user-accept-license" property.

TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this.

self :

the ListallerIPKControl instance to query

Returns :

the value of the "user-accept-license" property

listaller_ipk_control_set_user_accept_license ()

void                listaller_ipk_control_set_user_accept_license
                                                        (ListallerIPKControl *self,
                                                         gboolean value);

Set the value of the "user-accept-license" property to value.

TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this.

self :

the ListallerIPKControl instance to modify

value :

the new value of the "user-accept-license" property

struct ListallerIPKControl

struct ListallerIPKControl;

Generic IPK package control data


struct ListallerIPKControlClass

struct ListallerIPKControlClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_CONTROL. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

LISTALLER_IPK_TYPE_PACK_CONTROL

#define LISTALLER_IPK_TYPE_PACK_CONTROL (listaller_ipk_pack_control_get_type ())

The type for ListallerIPKPackControl.


listaller_ipk_pack_control_open_control ()

gboolean            listaller_ipk_pack_control_open_control
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *fPackSetting,
                                                         const gchar *fDoap);

self :

the ListallerIPKPackControl instance

fPackSetting :

 

fDoap :

 

listaller_ipk_pack_control_create_new ()

gboolean            listaller_ipk_pack_control_create_new
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *newDoapData,
                                                         const gchar *ipkV);

self :

the ListallerIPKPackControl instance

newDoapData :

 

ipkV :

 

listaller_ipk_pack_control_is_delta_pkg ()

gboolean            listaller_ipk_pack_control_is_delta_pkg
                                                        (ListallerIPKPackControl *self);

self :

the ListallerIPKPackControl instance

listaller_ipk_pack_control_save_to_dir ()

gboolean            listaller_ipk_pack_control_save_to_dir
                                                        (ListallerIPKPackControl *self,
                                                         const gchar *dirPath);

self :

the ListallerIPKPackControl instance

dirPath :

 

listaller_ipk_pack_control_get_files ()

gchar **            listaller_ipk_pack_control_get_files
                                                        (ListallerIPKPackControl *self);

self :

the ListallerIPKPackControl instance

Returns :

. [array length=result_length1]

listaller_ipk_pack_control_update_installmode_data ()

void                listaller_ipk_pack_control_update_installmode_data
                                                        (ListallerIPKPackControl *self);

self :

the ListallerIPKPackControl instance

listaller_ipk_pack_control_new ()

ListallerIPKPackControl * listaller_ipk_pack_control_new
                                                        (void);

struct ListallerIPKPackControl

struct ListallerIPKPackControl;

Control metadata of an IPK package


struct ListallerIPKPackControlClass

struct ListallerIPKPackControlClass {
	ListallerIPKControlClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_PACK_CONTROL. All the fields in this structure are private and should never be accessed directly.

ListallerIPKControlClass parent_class;

the parent class structure

LISTALLER_IPK_TYPE_CONTROL_DIR

#define LISTALLER_IPK_TYPE_CONTROL_DIR (listaller_ipk_control_dir_get_type ())

The type for ListallerIPKControlDir.


listaller_ipk_control_dir_open_dir ()

gboolean            listaller_ipk_control_dir_open_dir  (ListallerIPKControlDir *self,
                                                         const gchar *dir,
                                                         GError **error);

self :

the ListallerIPKControlDir instance

dir :

 

error :

location to store the error occuring, or NULL to ignore. [error-domains ListallerIPKControlDataError]

listaller_ipk_control_dir_get_files_rootdir ()

gchar *             listaller_ipk_control_dir_get_files_rootdir
                                                        (ListallerIPKControlDir *self);

self :

the ListallerIPKControlDir instance

listaller_ipk_control_dir_auto_dependency_search ()

gboolean            listaller_ipk_control_dir_auto_dependency_search
                                                        (ListallerIPKControlDir *self);

self :

the ListallerIPKControlDir instance

listaller_ipk_control_dir_get_doap_data ()

gchar *             listaller_ipk_control_dir_get_doap_data
                                                        (ListallerIPKControlDir *self);

self :

the ListallerIPKControlDir instance

listaller_ipk_control_dir_save_control ()

gboolean            listaller_ipk_control_dir_save_control
                                                        (ListallerIPKControlDir *self);

self :

the ListallerIPKControlDir instance

listaller_ipk_control_dir_new ()

ListallerIPKControlDir * listaller_ipk_control_dir_new  (void);

struct ListallerIPKControlDir

struct ListallerIPKControlDir;

Data stored in an IPK-source control directory.

This class is used by tools like lipkgen to extract data about a to-be-created IPK package from an IPK control directory.


struct ListallerIPKControlDirClass

struct ListallerIPKControlDirClass {
	ListallerIPKControlClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_CONTROL_DIR. All the fields in this structure are private and should never be accessed directly.

ListallerIPKControlClass parent_class;

the parent class structure

enum ListallerIPKControlDataError

typedef enum {
	LISTALLER_IPK_CONTROL_DATA_ERROR_NO_DOAP,
	LISTALLER_IPK_CONTROL_DATA_ERROR_DOAP_INVALID,
	LISTALLER_IPK_CONTROL_DATA_ERROR_DEPLIST_INVALID,
	LISTALLER_IPK_CONTROL_DATA_ERROR_INTERNAL,
	LISTALLER_IPK_CONTROL_DATA_ERROR_UNKNOWN
} ListallerIPKControlDataError;

Property Details

The "user-accept-license" property

  "user-accept-license"      gboolean              : Read / Write

TRUE if user should manually accept the supplied license/eula. FALSE if there is no need to do this.

Default value: FALSE

./Listaller-0.5.8/docs/api/html/ListallerAppItem.html0000664000175000017500000036703712176743563022630 0ustar matthiasmatthias ListallerAppItem

ListallerAppItem

ListallerAppItem — Application entry

Synopsis

#define             LISTALLER_TYPE_APP_ITEM
void                listaller_app_item_set_origin_local (ListallerAppItem *self);
gchar *             listaller_app_item_to_string        (ListallerAppItem *self);
void                listaller_app_item_set_license_name (ListallerAppItem *self,
                                                         const gchar *lName);
void                listaller_app_item_set_license_text (ListallerAppItem *self,
                                                         const gchar *lText);
void                listaller_app_item_set_license_from_doap_name
                                                        (ListallerAppItem *self,
                                                         const gchar *name);
void                listaller_app_item_fast_check       (ListallerAppItem *self);
void                listaller_app_item_update_with_appid
                                                        (ListallerAppItem *self,
                                                         gboolean fast);
gchar *             listaller_app_item_build_pk_package_id
                                                        (ListallerAppItem *self);
void                listaller_app_item_update_with_desktop_file
                                                        (ListallerAppItem *self);
gchar *             listaller_app_item_get_raw_cmd      (ListallerAppItem *self,
                                                         gboolean subst_cmd);
gint                listaller_app_item_compare_version_with
                                                        (ListallerAppItem *self,
                                                         const gchar *bversion);
ListallerAppItem *  listaller_app_item_new_blank        (void);
ListallerAppItem *  listaller_app_item_new              (const gchar *afullname,
                                                         const gchar *aversion,
                                                         const gchar *desktop_filename);
ListallerAppItem *  listaller_app_item_new_from_id      (const gchar *application_id);
ListallerAppItem *  listaller_app_item_new_from_desktopfile
                                                        (const gchar *desktop_filename);
const gchar *       listaller_app_item_get_idname       (ListallerAppItem *self);
const gchar *       listaller_app_item_get_full_name    (ListallerAppItem *self);
void                listaller_app_item_set_full_name    (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_version      (ListallerAppItem *self);
void                listaller_app_item_set_version      (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_summary      (ListallerAppItem *self);
void                listaller_app_item_set_summary      (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_description  (ListallerAppItem *self);
void                listaller_app_item_set_description  (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_author       (ListallerAppItem *self);
void                listaller_app_item_set_author       (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_publisher    (ListallerAppItem *self);
void                listaller_app_item_set_publisher    (ListallerAppItem *self,
                                                         const gchar *value);
void                listaller_app_item_get_license      (ListallerAppItem *self,
                                                         ListallerAppLicense *result);
void                listaller_app_item_set_license      (ListallerAppItem *self,
                                                         ListallerAppLicense *value);
const gchar *       listaller_app_item_get_categories   (ListallerAppItem *self);
void                listaller_app_item_set_categories   (ListallerAppItem *self,
                                                         const gchar *value);
gint                listaller_app_item_get_size_installed
                                                        (ListallerAppItem *self);
void                listaller_app_item_set_size_installed
                                                        (ListallerAppItem *self,
                                                         gint value);
const gchar *       listaller_app_item_get_desktop_file (ListallerAppItem *self);
void                listaller_app_item_set_desktop_file (ListallerAppItem *self,
                                                         const gchar *value);
ListallerAppState   listaller_app_item_get_state        (ListallerAppItem *self);
void                listaller_app_item_set_state        (ListallerAppItem *self,
                                                         ListallerAppState value);
const gchar *       listaller_app_item_get_icon_name    (ListallerAppItem *self);
void                listaller_app_item_set_icon_name    (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_website      (ListallerAppItem *self);
void                listaller_app_item_set_website      (ListallerAppItem *self,
                                                         const gchar *value);
gint64              listaller_app_item_get_install_time (ListallerAppItem *self);
void                listaller_app_item_set_install_time (ListallerAppItem *self,
                                                         gint64 value);
const gchar *       listaller_app_item_get_replaces     (ListallerAppItem *self);
void                listaller_app_item_set_replaces     (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_origin       (ListallerAppItem *self);
void                listaller_app_item_set_origin       (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_dependencies_str
                                                        (ListallerAppItem *self);
void                listaller_app_item_set_dependencies_str
                                                        (ListallerAppItem *self,
                                                         const gchar *value);
const gchar *       listaller_app_item_get_appid        (ListallerAppItem *self);
gboolean            listaller_app_item_validate_appid   (const gchar *application_id);
struct              ListallerAppItem;
struct              ListallerAppItemClass;
gchar *             listaller_app_state_to_string       (ListallerAppState self);
gboolean            listaller_app_state_is_all_set      (ListallerAppState self,
                                                         ListallerAppState flags);
gboolean            listaller_app_state_is_any_set      (ListallerAppState self,
                                                         ListallerAppState flags);
ListallerAppState   listaller_app_state_set             (ListallerAppState self,
                                                         ListallerAppState mode);
ListallerAppState   listaller_app_state_unset           (ListallerAppState self,
                                                         ListallerAppState mode);
enum                ListallerAppState;
struct              ListallerAppLicense;
ListallerAppLicense * listaller_app_license_dup         (const ListallerAppLicense *self);
void                listaller_app_license_free          (ListallerAppLicense *self);
void                listaller_app_license_copy          (const ListallerAppLicense *self,
                                                         ListallerAppLicense *dest);
void                listaller_app_license_destroy       (ListallerAppLicense *self);

Object Hierarchy

  GObject
   +----ListallerAppItem
  GFlags
   +----ListallerAppState
  GBoxed
   +----ListallerAppLicense

Properties

  "appid"                    gchar*                : Read
  "author"                   gchar*                : Read / Write
  "categories"               gchar*                : Read / Write
  "dependencies-str"         gchar*                : Read / Write
  "description"              gchar*                : Read / Write
  "desktop-file"             gchar*                : Read / Write
  "full-name"                gchar*                : Read / Write
  "icon-name"                gchar*                : Read / Write
  "idname"                   gchar*                : Read / Write
  "install-time"             gint64                : Read / Write
  "license"                  ListallerAppLicense*  : Read / Write
  "origin"                   gchar*                : Read / Write
  "publisher"                gchar*                : Read / Write
  "replaces"                 gchar*                : Read / Write
  "size-installed"           gint                  : Read / Write
  "state"                    ListallerAppState     : Read / Write
  "summary"                  gchar*                : Read / Write
  "version"                  gchar*                : Read / Write
  "website"                  gchar*                : Read / Write

Description

Objects of this class contain information about an application

Details

LISTALLER_TYPE_APP_ITEM

#define LISTALLER_TYPE_APP_ITEM (listaller_app_item_get_type ())

The type for ListallerAppItem.


listaller_app_item_set_origin_local ()

void                listaller_app_item_set_origin_local (ListallerAppItem *self);

self :

the ListallerAppItem instance

listaller_app_item_to_string ()

gchar *             listaller_app_item_to_string        (ListallerAppItem *self);

self :

the ListallerAppItem instance

listaller_app_item_set_license_name ()

void                listaller_app_item_set_license_name (ListallerAppItem *self,
                                                         const gchar *lName);

self :

the ListallerAppItem instance

lName :

 

listaller_app_item_set_license_text ()

void                listaller_app_item_set_license_text (ListallerAppItem *self,
                                                         const gchar *lText);

self :

the ListallerAppItem instance

lText :

 

listaller_app_item_set_license_from_doap_name ()

void                listaller_app_item_set_license_from_doap_name
                                                        (ListallerAppItem *self,
                                                         const gchar *name);

self :

the ListallerAppItem instance

name :

 

listaller_app_item_fast_check ()

void                listaller_app_item_fast_check       (ListallerAppItem *self);

self :

the ListallerAppItem instance

listaller_app_item_update_with_appid ()

void                listaller_app_item_update_with_appid
                                                        (ListallerAppItem *self,
                                                         gboolean fast);

self :

the ListallerAppItem instance

fast :

 

listaller_app_item_build_pk_package_id ()

gchar *             listaller_app_item_build_pk_package_id
                                                        (ListallerAppItem *self);

Generate a PackageKit package-id for this application

self :

the ListallerAppItem instance

listaller_app_item_update_with_desktop_file ()

void                listaller_app_item_update_with_desktop_file
                                                        (ListallerAppItem *self);

self :

the ListallerAppItem instance

listaller_app_item_get_raw_cmd ()

gchar *             listaller_app_item_get_raw_cmd      (ListallerAppItem *self,
                                                         gboolean subst_cmd);

self :

the ListallerAppItem instance

subst_cmd :

 

listaller_app_item_compare_version_with ()

gint                listaller_app_item_compare_version_with
                                                        (ListallerAppItem *self,
                                                         const gchar *bversion);

self :

the ListallerAppItem instance

bversion :

 

listaller_app_item_new_blank ()

ListallerAppItem *  listaller_app_item_new_blank        (void);

listaller_app_item_new ()

ListallerAppItem *  listaller_app_item_new              (const gchar *afullname,
                                                         const gchar *aversion,
                                                         const gchar *desktop_filename);

afullname :

 

aversion :

 

desktop_filename :

 

listaller_app_item_new_from_id ()

ListallerAppItem *  listaller_app_item_new_from_id      (const gchar *application_id);

application_id :

 

listaller_app_item_new_from_desktopfile ()

ListallerAppItem *  listaller_app_item_new_from_desktopfile
                                                        (const gchar *desktop_filename);

desktop_filename :

 

listaller_app_item_get_idname ()

const gchar *       listaller_app_item_get_idname       (ListallerAppItem *self);

Get and return the current value of the "idname" property.

Application identifier

self :

the ListallerAppItem instance to query

Returns :

the value of the "idname" property

listaller_app_item_get_full_name ()

const gchar *       listaller_app_item_get_full_name    (ListallerAppItem *self);

Get and return the current value of the "full-name" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "full-name" property

listaller_app_item_set_full_name ()

void                listaller_app_item_set_full_name    (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "full-name" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "full-name" property

listaller_app_item_get_version ()

const gchar *       listaller_app_item_get_version      (ListallerAppItem *self);

Get and return the current value of the "version" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "version" property

listaller_app_item_set_version ()

void                listaller_app_item_set_version      (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "version" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "version" property

listaller_app_item_get_summary ()

const gchar *       listaller_app_item_get_summary      (ListallerAppItem *self);

Get and return the current value of the "summary" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "summary" property

listaller_app_item_set_summary ()

void                listaller_app_item_set_summary      (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "summary" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "summary" property

listaller_app_item_get_description ()

const gchar *       listaller_app_item_get_description  (ListallerAppItem *self);

Get and return the current value of the "description" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "description" property

listaller_app_item_set_description ()

void                listaller_app_item_set_description  (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "description" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "description" property

listaller_app_item_get_author ()

const gchar *       listaller_app_item_get_author       (ListallerAppItem *self);

Get and return the current value of the "author" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "author" property

listaller_app_item_set_author ()

void                listaller_app_item_set_author       (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "author" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "author" property

listaller_app_item_get_publisher ()

const gchar *       listaller_app_item_get_publisher    (ListallerAppItem *self);

Get and return the current value of the "publisher" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "publisher" property

listaller_app_item_set_publisher ()

void                listaller_app_item_set_publisher    (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "publisher" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "publisher" property

listaller_app_item_get_license ()

void                listaller_app_item_get_license      (ListallerAppItem *self,
                                                         ListallerAppLicense *result);

Get and return the current value of the "license" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "license" property

listaller_app_item_set_license ()

void                listaller_app_item_set_license      (ListallerAppItem *self,
                                                         ListallerAppLicense *value);

Set the value of the "license" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "license" property

listaller_app_item_get_categories ()

const gchar *       listaller_app_item_get_categories   (ListallerAppItem *self);

Get and return the current value of the "categories" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "categories" property

listaller_app_item_set_categories ()

void                listaller_app_item_set_categories   (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "categories" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "categories" property

listaller_app_item_get_size_installed ()

gint                listaller_app_item_get_size_installed
                                                        (ListallerAppItem *self);

Get and return the current value of the "size-installed" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "size-installed" property

listaller_app_item_set_size_installed ()

void                listaller_app_item_set_size_installed
                                                        (ListallerAppItem *self,
                                                         gint value);

Set the value of the "size-installed" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "size-installed" property

listaller_app_item_get_desktop_file ()

const gchar *       listaller_app_item_get_desktop_file (ListallerAppItem *self);

Get and return the current value of the "desktop-file" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "desktop-file" property

listaller_app_item_set_desktop_file ()

void                listaller_app_item_set_desktop_file (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "desktop-file" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "desktop-file" property

listaller_app_item_get_state ()

ListallerAppState   listaller_app_item_get_state        (ListallerAppItem *self);

Get and return the current value of the "state" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "state" property

listaller_app_item_set_state ()

void                listaller_app_item_set_state        (ListallerAppItem *self,
                                                         ListallerAppState value);

Set the value of the "state" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "state" property

listaller_app_item_get_icon_name ()

const gchar *       listaller_app_item_get_icon_name    (ListallerAppItem *self);

Get and return the current value of the "icon-name" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "icon-name" property

listaller_app_item_set_icon_name ()

void                listaller_app_item_set_icon_name    (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "icon-name" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "icon-name" property

listaller_app_item_get_website ()

const gchar *       listaller_app_item_get_website      (ListallerAppItem *self);

Get and return the current value of the "website" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "website" property

listaller_app_item_set_website ()

void                listaller_app_item_set_website      (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "website" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "website" property

listaller_app_item_get_install_time ()

gint64              listaller_app_item_get_install_time (ListallerAppItem *self);

Get and return the current value of the "install-time" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "install-time" property

listaller_app_item_set_install_time ()

void                listaller_app_item_set_install_time (ListallerAppItem *self,
                                                         gint64 value);

Set the value of the "install-time" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "install-time" property

listaller_app_item_get_replaces ()

const gchar *       listaller_app_item_get_replaces     (ListallerAppItem *self);

Get and return the current value of the "replaces" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "replaces" property

listaller_app_item_set_replaces ()

void                listaller_app_item_set_replaces     (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "replaces" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "replaces" property

listaller_app_item_get_origin ()

const gchar *       listaller_app_item_get_origin       (ListallerAppItem *self);

Get and return the current value of the "origin" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "origin" property

listaller_app_item_set_origin ()

void                listaller_app_item_set_origin       (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "origin" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "origin" property

listaller_app_item_get_dependencies_str ()

const gchar *       listaller_app_item_get_dependencies_str
                                                        (ListallerAppItem *self);

Get and return the current value of the "dependencies-str" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "dependencies-str" property

listaller_app_item_set_dependencies_str ()

void                listaller_app_item_set_dependencies_str
                                                        (ListallerAppItem *self,
                                                         const gchar *value);

Set the value of the "dependencies-str" property to value.

self :

the ListallerAppItem instance to modify

value :

the new value of the "dependencies-str" property

listaller_app_item_get_appid ()

const gchar *       listaller_app_item_get_appid        (ListallerAppItem *self);

Get and return the current value of the "appid" property.

self :

the ListallerAppItem instance to query

Returns :

the value of the "appid" property

listaller_app_item_validate_appid ()

gboolean            listaller_app_item_validate_appid   (const gchar *application_id);

application_id :

 

struct ListallerAppItem

struct ListallerAppItem;

Application entry

Objects of this class contain information about an application


struct ListallerAppItemClass

struct ListallerAppItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_APP_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

listaller_app_state_to_string ()

gchar *             listaller_app_state_to_string       (ListallerAppState self);

self :

the ListallerAppState instance

listaller_app_state_is_all_set ()

gboolean            listaller_app_state_is_all_set      (ListallerAppState self,
                                                         ListallerAppState flags);

self :

the ListallerAppState instance

flags :

 

listaller_app_state_is_any_set ()

gboolean            listaller_app_state_is_any_set      (ListallerAppState self,
                                                         ListallerAppState flags);

self :

the ListallerAppState instance

flags :

 

listaller_app_state_set ()

ListallerAppState   listaller_app_state_set             (ListallerAppState self,
                                                         ListallerAppState mode);

self :

the ListallerAppState instance

mode :

 

listaller_app_state_unset ()

ListallerAppState   listaller_app_state_unset           (ListallerAppState self,
                                                         ListallerAppState mode);

self :

the ListallerAppState instance

mode :

 

enum ListallerAppState

typedef enum {
	LISTALLER_APP_STATE_UNKNOWN = 1 << 0,
	LISTALLER_APP_STATE_INSTALLED_SHARED = 1 << 1,
	LISTALLER_APP_STATE_INSTALLED_PRIVATE = 1 << 2,
	LISTALLER_APP_STATE_AVAILABLE = 1 << 3
} ListallerAppState;

Status of an application

Indicates if an application is installed (and in which mode it was installed), or if it is in any other, different state.


struct ListallerAppLicense

struct ListallerAppLicense {
	gchar* name;
	gchar* text;
};

License name and text pair

Describes a software license


listaller_app_license_dup ()

ListallerAppLicense * listaller_app_license_dup         (const ListallerAppLicense *self);

Creates a copy of self.

See also: listaller_app_license_copy(), listaller_app_license_destroy(), listaller_app_license_free()

self :

the instance to duplicate

Returns :

a copy of self, free with listaller_app_license_free()

listaller_app_license_free ()

void                listaller_app_license_free          (ListallerAppLicense *self);

Frees the heap-allocated struct.

See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_destroy()

self :

the struct to free

listaller_app_license_copy ()

void                listaller_app_license_copy          (const ListallerAppLicense *self,
                                                         ListallerAppLicense *dest);

Creates a copy of self.

See also: listaller_app_license_dup(), listaller_app_license_destroy(), listaller_app_license_free()

self :

the struct to copy

dest :

a unused struct. Use listaller_app_license_destroy() to free the content.

listaller_app_license_destroy ()

void                listaller_app_license_destroy       (ListallerAppLicense *self);

Frees the content of the struct pointed by self.

See also: listaller_app_license_dup(), listaller_app_license_copy(), listaller_app_license_free()

self :

the struct to destroy

Property Details

The "appid" property

  "appid"                    gchar*                : Read

appid.

Default value: NULL


The "author" property

  "author"                   gchar*                : Read / Write

author.

Default value: NULL


The "categories" property

  "categories"               gchar*                : Read / Write

categories.

Default value: NULL


The "dependencies-str" property

  "dependencies-str"         gchar*                : Read / Write

dependencies-str.

Default value: NULL


The "description" property

  "description"              gchar*                : Read / Write

description.

Default value: NULL


The "desktop-file" property

  "desktop-file"             gchar*                : Read / Write

desktop-file.

Default value: NULL


The "full-name" property

  "full-name"                gchar*                : Read / Write

full-name.

Default value: NULL


The "icon-name" property

  "icon-name"                gchar*                : Read / Write

icon-name.

Default value: NULL


The "idname" property

  "idname"                   gchar*                : Read / Write

Application identifier

Default value: NULL


The "install-time" property

  "install-time"             gint64                : Read / Write

install-time.

Default value: 0


The "license" property

  "license"                  ListallerAppLicense*  : Read / Write

license.


The "origin" property

  "origin"                   gchar*                : Read / Write

origin.

Default value: NULL


The "publisher" property

  "publisher"                gchar*                : Read / Write

publisher.

Default value: NULL


The "replaces" property

  "replaces"                 gchar*                : Read / Write

replaces.

Default value: NULL


The "size-installed" property

  "size-installed"           gint                  : Read / Write

size-installed.

Default value: 0


The "state" property

  "state"                    ListallerAppState     : Read / Write

state.


The "summary" property

  "summary"                  gchar*                : Read / Write

summary.

Default value: NULL


The "version" property

  "version"                  gchar*                : Read / Write

version.

Default value: NULL


The "website" property

  "website"                  gchar*                : Read / Write

website.

Default value: NULL

./Listaller-0.5.8/docs/api/html/listaller-utils.html0000664000175000017500000000771612176743563022541 0ustar matthiasmatthias utils

utils

utils — Common utility functions used by Listaller

Synopsis

gchar *             listaller_utils_build_filename      (const gchar *first_element,
                                                         ...);

Description

Details

listaller_utils_build_filename ()

gchar *             listaller_utils_build_filename      (const gchar *first_element,
                                                         ...);

Builds a filename similar to g_build_filename, but this implementation resolves all relative ("../.") path statements to one coherent path string.

self :

the (null) instance

first_element :

 

... :

 
./Listaller-0.5.8/docs/api/html/ListallerErrorItem.html0000664000175000017500000017412712176743563023175 0ustar matthiasmatthias ListallerErrorItem

ListallerErrorItem

ListallerErrorItem — Return type describing an error

Synopsis

#define             LISTALLER_TYPE_ERROR_ITEM
gchar *             listaller_error_item_to_string      (ListallerErrorItem *self);
ListallerErrorItem * listaller_error_item_new           (ListallerErrorEnum type);
ListallerErrorEnum  listaller_error_item_get_error      (ListallerErrorItem *self);
const gchar *       listaller_error_item_get_details    (ListallerErrorItem *self);
struct              ListallerErrorItem;
struct              ListallerErrorItemClass;
#define             LISTALLER_TYPE_MESSAGE_ITEM
gchar *             listaller_message_item_to_string    (ListallerMessageItem *self);
ListallerMessageItem * listaller_message_item_new       (ListallerMessageEnum type);
ListallerMessageEnum listaller_message_item_get_mtype   (ListallerMessageItem *self);
const gchar *       listaller_message_item_get_details  (ListallerMessageItem *self);
struct              ListallerMessageItem;
struct              ListallerMessageItemClass;
#define             LISTALLER_TYPE_STATUS_ITEM
ListallerStatusItem * listaller_status_item_new         (ListallerStatusEnum type);
ListallerStatusEnum listaller_status_item_get_status    (ListallerStatusItem *self);
const gchar *       listaller_status_item_get_info      (ListallerStatusItem *self);
struct              ListallerStatusItem;
struct              ListallerStatusItemClass;
#define             LISTALLER_TYPE_PROGRESS_ITEM
ListallerProgressItem * listaller_progress_item_new     (void);
ListallerProgressEnum listaller_progress_item_get_prog_type
                                                        (ListallerProgressItem *self);
const gchar *       listaller_progress_item_get_item_id (ListallerProgressItem *self);
gint                listaller_progress_item_get_value   (ListallerProgressItem *self);
struct              ListallerProgressItem;
struct              ListallerProgressItemClass;
#define             LISTALLER_TYPE_UPDATE_ITEM
ListallerUpdateItem * listaller_update_item_new         (void);
GType               listaller_update_item_get_sw_type   (ListallerUpdateItem *self);
GObject *           listaller_update_item_get_sw_old    (ListallerUpdateItem *self);
GObject *           listaller_update_item_get_sw_new    (ListallerUpdateItem *self);
const gchar *       listaller_update_item_get_architecture
                                                        (ListallerUpdateItem *self);
ListallerIPKChangelog * listaller_update_item_get_changelog
                                                        (ListallerUpdateItem *self);
gboolean            listaller_update_item_get_completed (ListallerUpdateItem *self);
struct              ListallerUpdateItem;
struct              ListallerUpdateItemClass;
gchar *             listaller_error_enum_to_string      (ListallerErrorEnum self);
enum                ListallerErrorEnum;
enum                ListallerStatusEnum;
gchar *             listaller_message_enum_to_string    (ListallerMessageEnum self);
enum                ListallerMessageEnum;
enum                ListallerProgressEnum;

Object Hierarchy

  GObject
   +----ListallerErrorItem
  GObject
   +----ListallerMessageItem
  GObject
   +----ListallerStatusItem
  GObject
   +----ListallerProgressItem
  GObject
   +----ListallerUpdateItem
  GEnum
   +----ListallerErrorEnum
  GEnum
   +----ListallerStatusEnum
  GEnum
   +----ListallerMessageEnum
  GEnum
   +----ListallerProgressEnum

Properties

  "details"                  gchar*                : Read / Write
  "error"                    ListallerErrorEnum    : Read / Write
  "details"                  gchar*                : Read / Write
  "mtype"                    ListallerMessageEnum  : Read / Write
  "info"                     gchar*                : Read / Write
  "status"                   ListallerStatusEnum   : Read / Write
  "item-id"                  gchar*                : Read / Write
  "prog-type"                ListallerProgressEnum  : Read / Write
  "value"                    gint                  : Read / Write
  "architecture"             gchar*                : Read / Write
  "changelog"                ListallerIPKChangelog*  : Read / Write
  "completed"                gboolean              : Read / Write
  "sw-new"                   GObject*              : Read / Write
  "sw-old"                   GObject*              : Read / Write
  "sw-type"                  GType*                : Read / Write

Description

Details

LISTALLER_TYPE_ERROR_ITEM

#define LISTALLER_TYPE_ERROR_ITEM (listaller_error_item_get_type ())

The type for ListallerErrorItem.


listaller_error_item_to_string ()

gchar *             listaller_error_item_to_string      (ListallerErrorItem *self);

self :

the ListallerErrorItem instance

listaller_error_item_new ()

ListallerErrorItem * listaller_error_item_new           (ListallerErrorEnum type);

type :

 

listaller_error_item_get_error ()

ListallerErrorEnum  listaller_error_item_get_error      (ListallerErrorItem *self);

Get and return the current value of the "error" property.

self :

the ListallerErrorItem instance to query

Returns :

the value of the "error" property

listaller_error_item_get_details ()

const gchar *       listaller_error_item_get_details    (ListallerErrorItem *self);

Get and return the current value of the "details" property.

self :

the ListallerErrorItem instance to query

Returns :

the value of the "details" property

struct ListallerErrorItem

struct ListallerErrorItem;

Return type describing an error


struct ListallerErrorItemClass

struct ListallerErrorItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_ERROR_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

LISTALLER_TYPE_MESSAGE_ITEM

#define LISTALLER_TYPE_MESSAGE_ITEM (listaller_message_item_get_type ())

The type for ListallerMessageItem.


listaller_message_item_to_string ()

gchar *             listaller_message_item_to_string    (ListallerMessageItem *self);

self :

the ListallerMessageItem instance

listaller_message_item_new ()

ListallerMessageItem * listaller_message_item_new       (ListallerMessageEnum type);

type :

 

listaller_message_item_get_mtype ()

ListallerMessageEnum listaller_message_item_get_mtype   (ListallerMessageItem *self);

Get and return the current value of the "mtype" property.

self :

the ListallerMessageItem instance to query

Returns :

the value of the "mtype" property

listaller_message_item_get_details ()

const gchar *       listaller_message_item_get_details  (ListallerMessageItem *self);

Get and return the current value of the "details" property.

self :

the ListallerMessageItem instance to query

Returns :

the value of the "details" property

struct ListallerMessageItem

struct ListallerMessageItem;

Return type describing a message


struct ListallerMessageItemClass

struct ListallerMessageItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_MESSAGE_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

LISTALLER_TYPE_STATUS_ITEM

#define LISTALLER_TYPE_STATUS_ITEM (listaller_status_item_get_type ())

The type for ListallerStatusItem.


listaller_status_item_new ()

ListallerStatusItem * listaller_status_item_new         (ListallerStatusEnum type);

type :

 

listaller_status_item_get_status ()

ListallerStatusEnum listaller_status_item_get_status    (ListallerStatusItem *self);

Get and return the current value of the "status" property.

self :

the ListallerStatusItem instance to query

Returns :

the value of the "status" property

listaller_status_item_get_info ()

const gchar *       listaller_status_item_get_info      (ListallerStatusItem *self);

Get and return the current value of the "info" property.

self :

the ListallerStatusItem instance to query

Returns :

the value of the "info" property

struct ListallerStatusItem

struct ListallerStatusItem;

Return type describing a status change


struct ListallerStatusItemClass

struct ListallerStatusItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_STATUS_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

LISTALLER_TYPE_PROGRESS_ITEM

#define LISTALLER_TYPE_PROGRESS_ITEM (listaller_progress_item_get_type ())

The type for ListallerProgressItem.


listaller_progress_item_new ()

ListallerProgressItem * listaller_progress_item_new     (void);

listaller_progress_item_get_prog_type ()

ListallerProgressEnum listaller_progress_item_get_prog_type
                                                        (ListallerProgressItem *self);

Get and return the current value of the "prog-type" property.

self :

the ListallerProgressItem instance to query

Returns :

the value of the "prog-type" property

listaller_progress_item_get_item_id ()

const gchar *       listaller_progress_item_get_item_id (ListallerProgressItem *self);

Get and return the current value of the "item-id" property.

self :

the ListallerProgressItem instance to query

Returns :

the value of the "item-id" property

listaller_progress_item_get_value ()

gint                listaller_progress_item_get_value   (ListallerProgressItem *self);

Get and return the current value of the "value" property.

self :

the ListallerProgressItem instance to query

Returns :

the value of the "value" property

struct ListallerProgressItem

struct ListallerProgressItem;

Return type describing progress changes


struct ListallerProgressItemClass

struct ListallerProgressItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_PROGRESS_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

LISTALLER_TYPE_UPDATE_ITEM

#define LISTALLER_TYPE_UPDATE_ITEM (listaller_update_item_get_type ())

The type for ListallerUpdateItem.


listaller_update_item_new ()

ListallerUpdateItem * listaller_update_item_new         (void);

listaller_update_item_get_sw_type ()

GType               listaller_update_item_get_sw_type   (ListallerUpdateItem *self);

Get and return the current value of the "sw-type" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "sw-type" property

listaller_update_item_get_sw_old ()

GObject *           listaller_update_item_get_sw_old    (ListallerUpdateItem *self);

Get and return the current value of the "sw-old" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "sw-old" property

listaller_update_item_get_sw_new ()

GObject *           listaller_update_item_get_sw_new    (ListallerUpdateItem *self);

Get and return the current value of the "sw-new" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "sw-new" property

listaller_update_item_get_architecture ()

const gchar *       listaller_update_item_get_architecture
                                                        (ListallerUpdateItem *self);

Get and return the current value of the "architecture" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "architecture" property

listaller_update_item_get_changelog ()

ListallerIPKChangelog * listaller_update_item_get_changelog
                                                        (ListallerUpdateItem *self);

Get and return the current value of the "changelog" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "changelog" property

listaller_update_item_get_completed ()

gboolean            listaller_update_item_get_completed (ListallerUpdateItem *self);

Get and return the current value of the "completed" property.

self :

the ListallerUpdateItem instance to query

Returns :

the value of the "completed" property

struct ListallerUpdateItem

struct ListallerUpdateItem;

Return type describing a software update


struct ListallerUpdateItemClass

struct ListallerUpdateItemClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_UPDATE_ITEM. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

listaller_error_enum_to_string ()

gchar *             listaller_error_enum_to_string      (ListallerErrorEnum self);

self :

the ListallerErrorEnum instance

enum ListallerErrorEnum

typedef enum {
	LISTALLER_ERROR_ENUM_INVALID,
	LISTALLER_ERROR_ENUM_INTERNAL,
	LISTALLER_ERROR_ENUM_SETUP_NOT_INITIALIZED,
	LISTALLER_ERROR_ENUM_IPK_LOADING_FAILED,
	LISTALLER_ERROR_ENUM_IPK_INCOMPLETE,
	LISTALLER_ERROR_ENUM_IPK_DAMAGED,
	LISTALLER_ERROR_ENUM_IPK_NOT_SUPPORTED,
	LISTALLER_ERROR_ENUM_OPERATION_NOT_ALLOWED,
	LISTALLER_ERROR_ENUM_UNPACKING_FAILED,
	LISTALLER_ERROR_ENUM_FILE_EXISTS,
	LISTALLER_ERROR_ENUM_HASH_MISSMATCH,
	LISTALLER_ERROR_ENUM_FILE_INSTALL_FAILED,
	LISTALLER_ERROR_ENUM_COPY_ERROR,
	LISTALLER_ERROR_ENUM_INSTALLATION_FAILED,
	LISTALLER_ERROR_ENUM_DATABASE_LOCKED,
	LISTALLER_ERROR_ENUM_DATABASE_FAILURE,
	LISTALLER_ERROR_ENUM_DATABASE_OPEN_FAILED,
	LISTALLER_ERROR_ENUM_ALREADY_INSTALLED,
	LISTALLER_ERROR_ENUM_REMOVAL_FAILED,
	LISTALLER_ERROR_ENUM_WRONG_ARCHITECTURE,
	LISTALLER_ERROR_ENUM_DEPENDENCY_MISSING,
	LISTALLER_ERROR_ENUM_DEPENDENCY_INSTALL_FAILED,
	LISTALLER_ERROR_ENUM_NATIVE_TRANSACTION_FAILED,
	LISTALLER_ERROR_ENUM_NETWORK_ERROR,
	LISTALLER_ERROR_ENUM_REFRESH_FAILED,
	LISTALLER_ERROR_ENUM_UPDATE_FAILED
} ListallerErrorEnum;

enum ListallerStatusEnum

typedef enum {
	LISTALLER_STATUS_ENUM_UNKNOWN,
	LISTALLER_STATUS_ENUM_ACTION_STARTED,
	LISTALLER_STATUS_ENUM_RESOLVING_DEPENDENCIES,
	LISTALLER_STATUS_ENUM_INSTALLING_FILES,
	LISTALLER_STATUS_ENUM_REGISTERING_APPLICATION,
	LISTALLER_STATUS_ENUM_INSTALLATION_FINISHED,
	LISTALLER_STATUS_ENUM_REMOVAL_FINISHED
} ListallerStatusEnum;

listaller_message_enum_to_string ()

gchar *             listaller_message_enum_to_string    (ListallerMessageEnum self);

self :

the ListallerMessageEnum instance

enum ListallerMessageEnum

typedef enum {
	LISTALLER_MESSAGE_ENUM_UNKNOWN,
	LISTALLER_MESSAGE_ENUM_INFO,
	LISTALLER_MESSAGE_ENUM_WARNING,
	LISTALLER_MESSAGE_ENUM_CRITICAL
} ListallerMessageEnum;

enum ListallerProgressEnum

typedef enum {
	LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS,
	LISTALLER_PROGRESS_ENUM_ITEM_PROGRESS
} ListallerProgressEnum;

Property Details

The "details" property

  "details"                  gchar*                : Read / Write

details.

Default value: NULL


The "error" property

  "error"                    ListallerErrorEnum    : Read / Write

error.

Default value: LISTALLER_ERROR_ENUM_INVALID


The "details" property

  "details"                  gchar*                : Read / Write

details.

Default value: NULL


The "mtype" property

  "mtype"                    ListallerMessageEnum  : Read / Write

mtype.

Default value: LISTALLER_MESSAGE_ENUM_UNKNOWN


The "info" property

  "info"                     gchar*                : Read / Write

info.

Default value: NULL


The "status" property

  "status"                   ListallerStatusEnum   : Read / Write

status.

Default value: LISTALLER_STATUS_ENUM_UNKNOWN


The "item-id" property

  "item-id"                  gchar*                : Read / Write

item-id.

Default value: NULL


The "prog-type" property

  "prog-type"                ListallerProgressEnum  : Read / Write

prog-type.

Default value: LISTALLER_PROGRESS_ENUM_MAIN_PROGRESS


The "value" property

  "value"                    gint                  : Read / Write

value.

Default value: 0


The "architecture" property

  "architecture"             gchar*                : Read / Write

architecture.

Default value: NULL


The "changelog" property

  "changelog"                ListallerIPKChangelog*  : Read / Write

changelog.


The "completed" property

  "completed"                gboolean              : Read / Write

completed.

Default value: FALSE


The "sw-new" property

  "sw-new"                   GObject*              : Read / Write

sw-new.


The "sw-old" property

  "sw-old"                   GObject*              : Read / Write

sw-old.


The "sw-type" property

  "sw-type"                  GType*                : Read / Write

sw-type.

Allowed values: void

./Listaller-0.5.8/docs/api/html/index.sgml0000664000175000017500000014636112176743562020514 0ustar matthiasmatthias ./Listaller-0.5.8/docs/api/html/re20.html0000664000175000017500000001040212176743563020142 0ustar matthiasmatthias ligcc

ligcc

ligcc — Wrapper around gcc to create more portable apps

Synopsis

ligcc [OPTION ...]

Description

This manual page documents briefly the ligcc command.

ligcc is a wrapper around gcc. It allows you to create more portable executables by doing three things:

  • Forces the linker to link against older glibc symbols. Users who are using an older version of glibc will no longer get "undefined symbol GLIBC_2.4 in /lib/libc.so"-style error messages.

  • Allows you to easily statically link to any other library.

  • Automatically removes bogus dependencies. For example, your program uses libfoo. libfoo uses libpng internally, but your app does not. Yet the pkg-config file for libfoo specifies "-lfoo -lpng" is linker parameters. And tadaa - you now have a bogus dependency on libpng! LiGCC automatically removes the -lpng for you if your app doesn't use libpng directly.

  • Add $ORIGIN/../lib to the binary's library search path. $ORIGIN is the directory in which the binary exists. This ensures that your binary can find library dependencies which are placed in the 'lib' folder under the same prefix. You might want to install custom libraries into /lib. If you set $APBUILD_PROJECTNAME, ligcc will also add $ORIGIN/../lib/$APBUILD_PROJECTNAME to the library search path.

Options

See the manpage of gcc(1) for more information about possible options.

There are also several environment variables available to modify ligcc's behavior check the documentation for more information.

See Also

lig++ (1), gcc(1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/style.css0000644000175000017500000001210012176743562020350 0ustar matthiasmatthias.synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; border: solid 1px #d3d7cf; padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ background: #e6f3ff; border: solid 1px #729fcf; padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } @media screen { sup a.footnote { position: relative; top: 0em ! important; } /* this is needed so that the local anchors are displayed below the naviagtion */ div.footnote a[name], div.refnamediv a[name], div.refsect1 a[name], div.refsect2 a[name], div.index a[name], div.glossary a[name], div.sect1 a[name] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 3.2em; padding-bottom: 20em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; z-index: 10; } .navigation a, .navigation a:visited { /* tango:scarlet red 3 */ color: #a40000; } .navigation a:hover { /* tango:scarlet red 1 */ color: #ef2929; } td.shortcuts { /* tango:scarlet red 1 */ color: #ef2929; font-size: 80%; white-space: nowrap; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; /* tango:scarlet red 0/1 */ background: #ffe6e6; border: solid 1px #ef2929; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } .navigation .title { font-size: 200%; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } hr { /* tango:aluminium 3 */ color: #babdb6; background: #babdb6; border: none 0px; height: 1px; clear: both; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .warning { /* tango:orange 0/1 */ background: #ffeed9; border-color: #ffb04f; } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; border-color: #abf562; } .note, .warning { padding: 0.5em; border-width: 1px; border-style: solid; } .note h3, .warning h3 { margin-top: 0.0em } .note p, .warning p { margin-bottom: 0.0em } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-size: 80%; font-weight: normal; } /* code listings */ .listing_code .programlisting .cbracket { color: #a40000; } /* tango: scarlet red 3 */ .listing_code .programlisting .comment { color: #a1a39d; } /* tango: aluminium 4 */ .listing_code .programlisting .function { color: #000000; font-weight: bold; } .listing_code .programlisting .function a { color: #11326b; font-weight: bold; } /* tango: sky blue 4 */ .listing_code .programlisting .keyword { color: #4e9a06; } /* tango: chameleon 3 */ .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .normal { color: #000000; } .listing_code .programlisting .number { color: #75507b; } /* tango: plum 2 */ .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #c17d11; } /* tango: chocolate 2 */ .listing_code .programlisting .type { color: #000000; } .listing_code .programlisting .type a { color: #11326b; } /* tango: sky blue 4 */ .listing_code .programlisting .symbol { color: #ce5c00; } /* tango: orange 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; } .listing_lines pre, .listing_code pre { margin: 0px; } ./Listaller-0.5.8/docs/api/html/ListallerKeyManager.html0000664000175000017500000002300012176743563023267 0ustar matthiasmatthias ListallerKeyManager

ListallerKeyManager

ListallerKeyManager — Manage Listaller's GPG-Key database

Object Hierarchy

  GObject
   +----ListallerMessageObject
         +----ListallerKeyManager

Description

Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels.

Details

LISTALLER_TYPE_KEY_MANAGER

#define LISTALLER_TYPE_KEY_MANAGER (listaller_key_manager_get_type ())

The type for ListallerKeyManager.


listaller_key_manager_import_key ()

gboolean            listaller_key_manager_import_key    (ListallerKeyManager *self,
                                                         const gchar *fpr);

self :

the ListallerKeyManager instance

fpr :

 

listaller_key_manager_get_key_info ()

gchar *             listaller_key_manager_get_key_info  (ListallerKeyManager *self,
                                                         const gchar *pattern);

self :

the ListallerKeyManager instance

pattern :

 

listaller_key_manager_new ()

ListallerKeyManager * listaller_key_manager_new         (void);

struct ListallerKeyManager

struct ListallerKeyManager;

Manage Listaller's GPG-Key database

Listaller uses it's own set of GPG keys to determine package trust levels. Use this class to access the key database and to check package trust levels.


struct ListallerKeyManagerClass

struct ListallerKeyManagerClass {
	ListallerMessageObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_KEY_MANAGER. All the fields in this structure are private and should never be accessed directly.

ListallerMessageObjectClass parent_class;

the parent class structure
./Listaller-0.5.8/docs/api/html/ListallerIPKDependency.html0000664000175000017500000021170712176743563023703 0ustar matthiasmatthias ListallerIPKDependency

ListallerIPKDependency

ListallerIPKDependency — Information about a shared resource

Synopsis

#define             LISTALLER_IPK_TYPE_DEPENDENCY
GeeHashSet *        listaller_ipk_dependency_get_installdata
                                                        (ListallerIPKDependency *self);
gchar *             listaller_ipk_dependency_get_installdata_as_string
                                                        (ListallerIPKDependency *self);
gboolean            listaller_ipk_dependency_has_installdata
                                                        (ListallerIPKDependency *self);
void                listaller_ipk_dependency_regenerate_depid
                                                        (ListallerIPKDependency *self);
void                listaller_ipk_dependency_add_component
                                                        (ListallerIPKDependency *self,
                                                         const gchar *cname,
                                                         ListallerDepComponentType tp);
void                listaller_ipk_dependency_add_component_list
                                                        (ListallerIPKDependency *self,
                                                         ListallerDepComponentType ty,
                                                         const gchar *list);
gboolean            listaller_ipk_dependency_has_component
                                                        (ListallerIPKDependency *self,
                                                         const gchar *cname,
                                                         ListallerDepComponentType tp);
gboolean            listaller_ipk_dependency_has_components
                                                        (ListallerIPKDependency *self);
gboolean            listaller_ipk_dependency_has_feed   (ListallerIPKDependency *self);
gchar *             listaller_ipk_dependency_get_install_dir_for_setting
                                                        (ListallerIPKDependency *self,
                                                         ListallerSetupSettings *setup_setting);
gchar *             listaller_ipk_dependency_build_pk_package_id
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_full_name
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_summary
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_description
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_homepage
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_author (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_version
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_origin (ListallerIPKDependency *self);
gboolean            listaller_ipk_dependency_get_satisfied
                                                        (ListallerIPKDependency *self);
void                listaller_ipk_dependency_set_satisfied
                                                        (ListallerIPKDependency *self,
                                                         gboolean value);
const gchar *       listaller_ipk_dependency_get_architecture
                                                        (ListallerIPKDependency *self);
gboolean            listaller_ipk_dependency_get_is_standardlib
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_feed_url
                                                        (ListallerIPKDependency *self);
gint64              listaller_ipk_dependency_get_install_time
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_environment
                                                        (ListallerIPKDependency *self);
const gchar *       listaller_ipk_dependency_get_idname (ListallerIPKDependency *self);
void                listaller_ipk_dependency_set_idname (ListallerIPKDependency *self,
                                                         const gchar *value);
GeeHashSet *        listaller_ipk_dependency_get_raw_complist
                                                        (ListallerIPKDependency *self);
gchar *             listaller_ipk_dependency_component_get_name
                                                        (const gchar *cidname);
ListallerDepComponentType listaller_ipk_dependency_component_get_type
                                                        (const gchar *cidname);
struct              ListallerIPKDependency;
struct              ListallerIPKDependencyClass;
enum                ListallerDepComponentType;

Object Hierarchy

  GObject
   +----ListallerIPKDependency
  GEnum
   +----ListallerDepComponentType

Properties

  "architecture"             gchar*                : Read / Write
  "author"                   gchar*                : Read / Write
  "description"              gchar*                : Read / Write
  "environment"              gchar*                : Read / Write
  "feed-url"                 gchar*                : Read / Write
  "full-name"                gchar*                : Read / Write
  "homepage"                 gchar*                : Read / Write
  "idname"                   gchar*                : Read / Write
  "install-time"             gint64                : Read / Write
  "is-standardlib"           gboolean              : Read / Write
  "origin"                   gchar*                : Read / Write
  "raw-complist"             GeeHashSet*           : Read
  "satisfied"                gboolean              : Read / Write
  "summary"                  gchar*                : Read / Write
  "version"                  gchar*                : Read / Write

Description

Dependency objects carry information about shared resources or external requirements which many applications might need. Dependencies can be satisfied using native distro packages (installed by PackageKit) or by using some other methods, for example installing a feed. A Dependency object carries all information which caracterizes a dependency and it's state.

Details

LISTALLER_IPK_TYPE_DEPENDENCY

#define LISTALLER_IPK_TYPE_DEPENDENCY (listaller_ipk_dependency_get_type ())

The type for ListallerIPKDependency.


listaller_ipk_dependency_get_installdata ()

GeeHashSet *        listaller_ipk_dependency_get_installdata
                                                        (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_get_installdata_as_string ()

gchar *             listaller_ipk_dependency_get_installdata_as_string
                                                        (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_has_installdata ()

gboolean            listaller_ipk_dependency_has_installdata
                                                        (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_regenerate_depid ()

void                listaller_ipk_dependency_regenerate_depid
                                                        (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_add_component ()

void                listaller_ipk_dependency_add_component
                                                        (ListallerIPKDependency *self,
                                                         const gchar *cname,
                                                         ListallerDepComponentType tp);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_add_component_list ()

void                listaller_ipk_dependency_add_component_list
                                                        (ListallerIPKDependency *self,
                                                         ListallerDepComponentType ty,
                                                         const gchar *list);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_has_component ()

gboolean            listaller_ipk_dependency_has_component
                                                        (ListallerIPKDependency *self,
                                                         const gchar *cname,
                                                         ListallerDepComponentType tp);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_has_components ()

gboolean            listaller_ipk_dependency_has_components
                                                        (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_has_feed ()

gboolean            listaller_ipk_dependency_has_feed   (ListallerIPKDependency *self);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_get_install_dir_for_setting ()

gchar *             listaller_ipk_dependency_get_install_dir_for_setting
                                                        (ListallerIPKDependency *self,
                                                         ListallerSetupSettings *setup_setting);

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_build_pk_package_id ()

gchar *             listaller_ipk_dependency_build_pk_package_id
                                                        (ListallerIPKDependency *self);

Generate a PackageKit package-id for this dependency information

self :

the ListallerIPKDependency instance

listaller_ipk_dependency_get_full_name ()

const gchar *       listaller_ipk_dependency_get_full_name
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "full-name" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "full-name" property

listaller_ipk_dependency_get_summary ()

const gchar *       listaller_ipk_dependency_get_summary
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "summary" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "summary" property

listaller_ipk_dependency_get_description ()

const gchar *       listaller_ipk_dependency_get_description
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "description" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "description" property

listaller_ipk_dependency_get_homepage ()

const gchar *       listaller_ipk_dependency_get_homepage
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "homepage" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "homepage" property

listaller_ipk_dependency_get_author ()

const gchar *       listaller_ipk_dependency_get_author (ListallerIPKDependency *self);

Get and return the current value of the "author" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "author" property

listaller_ipk_dependency_get_version ()

const gchar *       listaller_ipk_dependency_get_version
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "version" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "version" property

listaller_ipk_dependency_get_origin ()

const gchar *       listaller_ipk_dependency_get_origin (ListallerIPKDependency *self);

Get and return the current value of the "origin" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "origin" property

listaller_ipk_dependency_get_satisfied ()

gboolean            listaller_ipk_dependency_get_satisfied
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "satisfied" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "satisfied" property

listaller_ipk_dependency_set_satisfied ()

void                listaller_ipk_dependency_set_satisfied
                                                        (ListallerIPKDependency *self,
                                                         gboolean value);

Set the value of the "satisfied" property to value.

self :

the ListallerIPKDependency instance to modify

value :

the new value of the "satisfied" property

listaller_ipk_dependency_get_architecture ()

const gchar *       listaller_ipk_dependency_get_architecture
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "architecture" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "architecture" property

listaller_ipk_dependency_get_is_standardlib ()

gboolean            listaller_ipk_dependency_get_is_standardlib
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "is-standardlib" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "is-standardlib" property

listaller_ipk_dependency_get_feed_url ()

const gchar *       listaller_ipk_dependency_get_feed_url
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "feed-url" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "feed-url" property

listaller_ipk_dependency_get_install_time ()

gint64              listaller_ipk_dependency_get_install_time
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "install-time" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "install-time" property

listaller_ipk_dependency_get_environment ()

const gchar *       listaller_ipk_dependency_get_environment
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "environment" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "environment" property

listaller_ipk_dependency_get_idname ()

const gchar *       listaller_ipk_dependency_get_idname (ListallerIPKDependency *self);

Get and return the current value of the "idname" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "idname" property

listaller_ipk_dependency_set_idname ()

void                listaller_ipk_dependency_set_idname (ListallerIPKDependency *self,
                                                         const gchar *value);

Set the value of the "idname" property to value.

self :

the ListallerIPKDependency instance to modify

value :

the new value of the "idname" property

listaller_ipk_dependency_get_raw_complist ()

GeeHashSet *        listaller_ipk_dependency_get_raw_complist
                                                        (ListallerIPKDependency *self);

Get and return the current value of the "raw-complist" property.

self :

the ListallerIPKDependency instance to query

Returns :

the value of the "raw-complist" property

listaller_ipk_dependency_component_get_name ()

gchar *             listaller_ipk_dependency_component_get_name
                                                        (const gchar *cidname);

listaller_ipk_dependency_component_get_type ()

ListallerDepComponentType listaller_ipk_dependency_component_get_type
                                                        (const gchar *cidname);

struct ListallerIPKDependency

struct ListallerIPKDependency;

Information about a shared resource

Dependency objects carry information about shared resources or external requirements which many applications might need. Dependencies can be satisfied using native distro packages (installed by PackageKit) or by using some other methods, for example installing a feed. A Dependency object carries all information which caracterizes a dependency and it's state.


struct ListallerIPKDependencyClass

struct ListallerIPKDependencyClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_DEPENDENCY. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

enum ListallerDepComponentType

typedef enum {
	LISTALLER_DEP_COMPONENT_TYPE_SHARED_LIB,
	LISTALLER_DEP_COMPONENT_TYPE_BINARY,
	LISTALLER_DEP_COMPONENT_TYPE_PYTHON,
	LISTALLER_DEP_COMPONENT_TYPE_PYTHON_2,
	LISTALLER_DEP_COMPONENT_TYPE_FILE,
	LISTALLER_DEP_COMPONENT_TYPE_UNKNOWN
} ListallerDepComponentType;

Property Details

The "architecture" property

  "architecture"             gchar*                : Read / Write

architecture.

Default value: NULL


The "author" property

  "author"                   gchar*                : Read / Write

author.

Default value: NULL


The "description" property

  "description"              gchar*                : Read / Write

description.

Default value: NULL


The "environment" property

  "environment"              gchar*                : Read / Write

environment.

Default value: NULL


The "feed-url" property

  "feed-url"                 gchar*                : Read / Write

feed-url.

Default value: NULL


The "full-name" property

  "full-name"                gchar*                : Read / Write

full-name.

Default value: NULL


The "homepage" property

  "homepage"                 gchar*                : Read / Write

homepage.

Default value: NULL


The "idname" property

  "idname"                   gchar*                : Read / Write

idname.

Default value: NULL


The "install-time" property

  "install-time"             gint64                : Read / Write

install-time.

Default value: 0


The "is-standardlib" property

  "is-standardlib"           gboolean              : Read / Write

Whether this dependency is always satisfied (by default), set by distribution maintainers

Default value: FALSE


The "origin" property

  "origin"                   gchar*                : Read / Write

origin.

Default value: NULL


The "raw-complist" property

  "raw-complist"             GeeHashSet*           : Read

raw-complist.


The "satisfied" property

  "satisfied"                gboolean              : Read / Write

satisfied.

Default value: FALSE


The "summary" property

  "summary"                  gchar*                : Read / Write

summary.

Default value: NULL


The "version" property

  "version"                  gchar*                : Read / Write

version.

Default value: NULL

./Listaller-0.5.8/docs/api/html/re22.html0000664000175000017500000001034012176743563020145 0ustar matthiasmatthias lipa

lipa

lipa — Listaller command-line tool

Synopsis

lipa {COMMAND} [OPTIONS ...]

Description

This manual page documents briefly the lipa command.

lipa is a simple tool to control Listaller using a command-line interface. It allows modifying basic settings, installing new applications, removing applications, requesting information about Listaller's database state and performing other maintenance tasks.

Options

-i, --install IPKPACKAGE

Install a new application from a distro-independent IPK package.

-r, --remove APPIDENTIFIER

Remove an application which mathes the given name or application-id.

-l, --list-apps, --all

List applications installed using Listaller.

To include all other applications too, the --all flag can be appended.

--version

Display version number of lipa

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

runapp (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/more.html0000664000175000017500000027454512176743563020360 0ustar matthiasmatthias More Information

More Information

API Index

A

listaller_add_log_domain, function in logging
ListallerAppItem, struct in ListallerAppItem
ListallerAppItem:appid, object property in ListallerAppItem
ListallerAppItem:author, object property in ListallerAppItem
ListallerAppItem:categories, object property in ListallerAppItem
ListallerAppItem:dependencies-str, object property in ListallerAppItem
ListallerAppItem:description, object property in ListallerAppItem
ListallerAppItem:desktop-file, object property in ListallerAppItem
ListallerAppItem:full-name, object property in ListallerAppItem
ListallerAppItem:icon-name, object property in ListallerAppItem
ListallerAppItem:idname, object property in ListallerAppItem
ListallerAppItem:install-time, object property in ListallerAppItem
ListallerAppItem:license, object property in ListallerAppItem
ListallerAppItem:origin, object property in ListallerAppItem
ListallerAppItem:publisher, object property in ListallerAppItem
ListallerAppItem:replaces, object property in ListallerAppItem
ListallerAppItem:size-installed, object property in ListallerAppItem
ListallerAppItem:state, object property in ListallerAppItem
ListallerAppItem:summary, object property in ListallerAppItem
ListallerAppItem:version, object property in ListallerAppItem
ListallerAppItem:website, object property in ListallerAppItem
ListallerAppItemClass, struct in ListallerAppItem
ListallerAppLicense, struct in ListallerAppItem
ListallerAppState, enum in ListallerAppItem
listaller_app_item_build_pk_package_id, function in ListallerAppItem
listaller_app_item_compare_version_with, function in ListallerAppItem
listaller_app_item_fast_check, function in ListallerAppItem
listaller_app_item_get_appid, function in ListallerAppItem
listaller_app_item_get_author, function in ListallerAppItem
listaller_app_item_get_categories, function in ListallerAppItem
listaller_app_item_get_dependencies_str, function in ListallerAppItem
listaller_app_item_get_description, function in ListallerAppItem
listaller_app_item_get_desktop_file, function in ListallerAppItem
listaller_app_item_get_full_name, function in ListallerAppItem
listaller_app_item_get_icon_name, function in ListallerAppItem
listaller_app_item_get_idname, function in ListallerAppItem
listaller_app_item_get_install_time, function in ListallerAppItem
listaller_app_item_get_license, function in ListallerAppItem
listaller_app_item_get_origin, function in ListallerAppItem
listaller_app_item_get_publisher, function in ListallerAppItem
listaller_app_item_get_raw_cmd, function in ListallerAppItem
listaller_app_item_get_replaces, function in ListallerAppItem
listaller_app_item_get_size_installed, function in ListallerAppItem
listaller_app_item_get_state, function in ListallerAppItem
listaller_app_item_get_summary, function in ListallerAppItem
listaller_app_item_get_version, function in ListallerAppItem
listaller_app_item_get_website, function in ListallerAppItem
listaller_app_item_new, function in ListallerAppItem
listaller_app_item_new_blank, function in ListallerAppItem
listaller_app_item_new_from_desktopfile, function in ListallerAppItem
listaller_app_item_new_from_id, function in ListallerAppItem
listaller_app_item_set_author, function in ListallerAppItem
listaller_app_item_set_categories, function in ListallerAppItem
listaller_app_item_set_dependencies_str, function in ListallerAppItem
listaller_app_item_set_description, function in ListallerAppItem
listaller_app_item_set_desktop_file, function in ListallerAppItem
listaller_app_item_set_full_name, function in ListallerAppItem
listaller_app_item_set_icon_name, function in ListallerAppItem
listaller_app_item_set_install_time, function in ListallerAppItem
listaller_app_item_set_license, function in ListallerAppItem
listaller_app_item_set_license_from_doap_name, function in ListallerAppItem
listaller_app_item_set_license_name, function in ListallerAppItem
listaller_app_item_set_license_text, function in ListallerAppItem
listaller_app_item_set_origin, function in ListallerAppItem
listaller_app_item_set_origin_local, function in ListallerAppItem
listaller_app_item_set_publisher, function in ListallerAppItem
listaller_app_item_set_replaces, function in ListallerAppItem
listaller_app_item_set_size_installed, function in ListallerAppItem
listaller_app_item_set_state, function in ListallerAppItem
listaller_app_item_set_summary, function in ListallerAppItem
listaller_app_item_set_version, function in ListallerAppItem
listaller_app_item_set_website, function in ListallerAppItem
listaller_app_item_to_string, function in ListallerAppItem
listaller_app_item_update_with_appid, function in ListallerAppItem
listaller_app_item_update_with_desktop_file, function in ListallerAppItem
listaller_app_item_validate_appid, function in ListallerAppItem
listaller_app_license_copy, function in ListallerAppItem
listaller_app_license_destroy, function in ListallerAppItem
listaller_app_license_dup, function in ListallerAppItem
listaller_app_license_free, function in ListallerAppItem
listaller_app_state_is_all_set, function in ListallerAppItem
listaller_app_state_is_any_set, function in ListallerAppItem
listaller_app_state_set, function in ListallerAppItem
listaller_app_state_to_string, function in ListallerAppItem
listaller_app_state_unset, function in ListallerAppItem

C

listaller_compare_versions, function in version

D

ListallerDatabaseError, enum in database-internal
ListallerDatabaseStatus, enum in database-internal
listaller_database_status_to_string, function in database-internal
ListallerDepItemType, enum in components

E

ListallerErrorEnum, enum in ListallerErrorItem
ListallerErrorItem, struct in ListallerErrorItem
ListallerErrorItem:details, object property in ListallerErrorItem
ListallerErrorItem:error, object property in ListallerErrorItem
ListallerErrorItemClass, struct in ListallerErrorItem
listaller_error_enum_to_string, function in ListallerErrorItem
listaller_error_item_get_details, function in ListallerErrorItem
listaller_error_item_get_error, function in ListallerErrorItem
listaller_error_item_new, function in ListallerErrorItem
listaller_error_item_to_string, function in ListallerErrorItem

G

listaller_get_full_version_info_str, function in version
listaller_get_verbose_mode, function in logging
listaller_get_version_info_str, function in version

I

ListallerIPKChangelog, struct in ListallerIPKChangelog
ListallerIPKChangelogClass, struct in ListallerIPKChangelog
ListallerIPKControl, struct in ListallerIPKControl
ListallerIPKControl:user-accept-license, object property in ListallerIPKControl
ListallerIPKControlClass, struct in ListallerIPKControl
ListallerIPKControlDataError, enum in ListallerIPKControl
ListallerIPKControlDir, struct in ListallerIPKControl
ListallerIPKControlDirClass, struct in ListallerIPKControl
ListallerIPKInstallMode, enum in ListallerSetupSettings
ListallerIPKPackControl, struct in ListallerIPKControl
ListallerIPKPackControlClass, struct in ListallerIPKControl
ListallerIPKSecurityInfo, struct in ListallerIPKSecurityInfo
ListallerIPKSecurityInfo:key-fpr, object property in ListallerIPKSecurityInfo
ListallerIPKSecurityInfo:signature-status, object property in ListallerIPKSecurityInfo
ListallerIPKSecurityInfo:signature-trustlevel, object property in ListallerIPKSecurityInfo
ListallerIPKSecurityInfo:trust-reason, object property in ListallerIPKSecurityInfo
ListallerIPKSecurityInfo:user-names, object property in ListallerIPKSecurityInfo
ListallerIPKSecurityInfoClass, struct in ListallerIPKSecurityInfo
listaller_ipk_changelog_new, function in ListallerIPKChangelog
listaller_ipk_changelog_open, function in ListallerIPKChangelog
listaller_ipk_control_dir_auto_dependency_search, function in ListallerIPKControl
listaller_ipk_control_dir_get_doap_data, function in ListallerIPKControl
listaller_ipk_control_dir_get_files_rootdir, function in ListallerIPKControl
listaller_ipk_control_dir_new, function in ListallerIPKControl
listaller_ipk_control_dir_open_dir, function in ListallerIPKControl
listaller_ipk_control_dir_save_control, function in ListallerIPKControl
listaller_ipk_control_get_application, function in ListallerIPKControl
listaller_ipk_control_get_architectures, function in ListallerIPKControl
listaller_ipk_control_get_dependencies, function in ListallerIPKControl
listaller_ipk_control_get_install_modes, function in ListallerIPKControl
listaller_ipk_control_get_ipk_version, function in ListallerIPKControl
listaller_ipk_control_get_replaces, function in ListallerIPKControl
listaller_ipk_control_get_user_accept_license, function in ListallerIPKControl
listaller_ipk_control_open_doap, function in ListallerIPKControl
listaller_ipk_control_open_doap_file, function in ListallerIPKControl
listaller_ipk_control_open_packsetting, function in ListallerIPKControl
listaller_ipk_control_set_architectures, function in ListallerIPKControl
listaller_ipk_control_set_dependencies, function in ListallerIPKControl
listaller_ipk_control_set_install_modes, function in ListallerIPKControl
listaller_ipk_control_set_ipk_version, function in ListallerIPKControl
listaller_ipk_control_set_license_text, function in ListallerIPKControl
listaller_ipk_control_set_license_text_from_file, function in ListallerIPKControl
listaller_ipk_control_set_replaces, function in ListallerIPKControl
listaller_ipk_control_set_user_accept_license, function in ListallerIPKControl
listaller_ipk_install_mode_is_all_set, function in ListallerSetupSettings
listaller_ipk_install_mode_is_any_set, function in ListallerSetupSettings
listaller_ipk_install_mode_set, function in ListallerSetupSettings
listaller_ipk_install_mode_unset, function in ListallerSetupSettings
listaller_ipk_pack_control_create_new, function in ListallerIPKControl
listaller_ipk_pack_control_get_files, function in ListallerIPKControl
listaller_ipk_pack_control_is_delta_pkg, function in ListallerIPKControl
listaller_ipk_pack_control_new, function in ListallerIPKControl
listaller_ipk_pack_control_open_control, function in ListallerIPKControl
listaller_ipk_pack_control_save_to_dir, function in ListallerIPKControl
listaller_ipk_pack_control_update_installmode_data, function in ListallerIPKControl
listaller_ipk_security_info_get_key_fpr, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_level, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_level_as_sentence, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_level_as_string, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_signature_status, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_signature_trustlevel, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_trust_reason, function in ListallerIPKSecurityInfo
listaller_ipk_security_info_get_user_names, function in ListallerIPKSecurityInfo
LISTALLER_IPK_TYPE_CHANGELOG, macro in ListallerIPKChangelog
LISTALLER_IPK_TYPE_CONTROL, macro in ListallerIPKControl
LISTALLER_IPK_TYPE_CONTROL_DIR, macro in ListallerIPKControl
LISTALLER_IPK_TYPE_PACK_CONTROL, macro in ListallerIPKControl
LISTALLER_IPK_TYPE_SECURITY_INFO, macro in ListallerIPKSecurityInfo

K

ListallerKeyManager, struct in ListallerKeyManager
ListallerKeyManagerClass, struct in ListallerKeyManager
listaller_key_manager_get_key_info, function in ListallerKeyManager
listaller_key_manager_import_key, function in ListallerKeyManager
listaller_key_manager_new, function in ListallerKeyManager

M

ListallerManager, struct in ListallerManager
ListallerManager::application, object signal in ListallerManager
ListallerManager::status-changed, object signal in ListallerManager
ListallerManager:settings, object property in ListallerManager
ListallerManagerClass, struct in ListallerManager
listaller_manager_filter_applications, function in ListallerManager
listaller_manager_find_applications_by_values, function in ListallerManager
listaller_manager_get_applications_by_fullname, function in ListallerManager
listaller_manager_get_application_by_idname, function in ListallerManager
listaller_manager_get_application_filelist, function in ListallerManager
listaller_manager_get_app_ld_environment, function in ListallerManager
listaller_manager_get_settings, function in ListallerManager
listaller_manager_new, function in ListallerManager
listaller_manager_prepare_setup_for_app, function in ListallerManager
listaller_manager_refresh_appitem_data, function in ListallerManager
listaller_manager_refresh_repository_cache, function in ListallerManager
listaller_manager_remove_application, function in ListallerManager
ListallerMessageEnum, enum in ListallerErrorItem
ListallerMessageItem, struct in ListallerErrorItem
ListallerMessageItem:details, object property in ListallerErrorItem
ListallerMessageItem:mtype, object property in ListallerErrorItem
ListallerMessageItemClass, struct in ListallerErrorItem
ListallerMessageObject, struct in ListallerMessageObject
ListallerMessageObject::error-code, object signal in ListallerMessageObject
ListallerMessageObject::message, object signal in ListallerMessageObject
ListallerMessageObject::progress, object signal in ListallerMessageObject
ListallerMessageObjectClass, struct in ListallerMessageObject
listaller_message_enum_to_string, function in ListallerErrorItem
listaller_message_item_get_details, function in ListallerErrorItem
listaller_message_item_get_mtype, function in ListallerErrorItem
listaller_message_item_new, function in ListallerErrorItem
listaller_message_item_to_string, function in ListallerErrorItem
listaller_message_object_connect_with_object, function in ListallerMessageObject
listaller_message_object_connect_with_object_all, function in ListallerMessageObject
listaller_message_object_set_error_hint_str, function in ListallerMessageObject

O

ListallerObjConnectFlags, enum in ListallerMessageObject

P

ListallerProgressEnum, enum in ListallerErrorItem
ListallerProgressItem, struct in ListallerErrorItem
ListallerProgressItem:item-id, object property in ListallerErrorItem
ListallerProgressItem:prog-type, object property in ListallerErrorItem
ListallerProgressItem:value, object property in ListallerErrorItem
ListallerProgressItemClass, struct in ListallerErrorItem
listaller_progress_item_get_item_id, function in ListallerErrorItem
listaller_progress_item_get_prog_type, function in ListallerErrorItem
listaller_progress_item_get_value, function in ListallerErrorItem
listaller_progress_item_new, function in ListallerErrorItem

S

ListallerSecurityLevel, enum in ListallerIPKSecurityInfo
listaller_security_level_from_string, function in ListallerIPKSecurityInfo
listaller_security_level_to_string, function in ListallerIPKSecurityInfo
ListallerSetup, struct in ListallerSetup
ListallerSetup::status-changed, object signal in ListallerSetup
ListallerSetup:control, object property in ListallerSetup
ListallerSetup:fname, object property in ListallerSetup
ListallerSetup:settings, object property in ListallerSetup
ListallerSetupClass, struct in ListallerSetup
ListallerSetupSettings, struct in ListallerSetupSettings
ListallerSetupSettings:current-mode, object property in ListallerSetupSettings
ListallerSetupSettings:locked, object property in ListallerSetupSettings
ListallerSetupSettings:private-mode, object property in ListallerSetupSettings
ListallerSetupSettings:shared-mode, object property in ListallerSetupSettings
ListallerSetupSettings:test-mode, object property in ListallerSetupSettings
ListallerSetupSettingsClass, struct in ListallerSetupSettings
listaller_setup_get_control, function in ListallerSetup
listaller_setup_get_current_application, function in ListallerSetup
listaller_setup_get_fname, function in ListallerSetup
listaller_setup_get_install_mode, function in ListallerSetup
listaller_setup_get_replaced_native_packs, function in ListallerSetup
listaller_setup_get_security_info, function in ListallerSetup
listaller_setup_get_settings, function in ListallerSetup
listaller_setup_initialize, function in ListallerSetup
listaller_setup_kill_installation_process, function in ListallerSetup
listaller_setup_new, function in ListallerSetup
listaller_setup_run_installation, function in ListallerSetup
listaller_setup_settings_appdata_dir, function in ListallerSetupSettings
listaller_setup_settings_applications_dir, function in ListallerSetupSettings
listaller_setup_settings_appregister_dir, function in ListallerSetupSettings
listaller_setup_settings_database_file, function in ListallerSetupSettings
listaller_setup_settings_depdata_dir, function in ListallerSetupSettings
listaller_setup_settings_get_current_mode, function in ListallerSetupSettings
listaller_setup_settings_get_locked, function in ListallerSetupSettings
listaller_setup_settings_get_private_mode, function in ListallerSetupSettings
listaller_setup_settings_get_shared_mode, function in ListallerSetupSettings
listaller_setup_settings_get_test_mode, function in ListallerSetupSettings
listaller_setup_settings_icon_base_dir, function in ListallerSetupSettings
listaller_setup_settings_icon_size_dir, function in ListallerSetupSettings
listaller_setup_settings_lock, function in ListallerSetupSettings
listaller_setup_settings_unlock, function in ListallerSetupSettings
listaller_setup_set_install_mode, function in ListallerSetup
listaller_setup_supported_install_modes, function in ListallerSetup
listaller_set_clitool_mode, function in logging
listaller_set_console_mode, function in logging
listaller_set_verbose_mode, function in logging
ListallerSignStatus, enum in ListallerIPKSecurityInfo
ListallerSignTrust, enum in ListallerIPKSecurityInfo
listaller_sign_status_to_string, function in ListallerIPKSecurityInfo
listaller_sign_trust_to_string, function in ListallerIPKSecurityInfo
ListallerStatusEnum, enum in ListallerErrorItem
ListallerStatusItem, struct in ListallerErrorItem
ListallerStatusItem:info, object property in ListallerErrorItem
ListallerStatusItem:status, object property in ListallerErrorItem
ListallerStatusItemClass, struct in ListallerErrorItem
listaller_status_item_get_info, function in ListallerErrorItem
listaller_status_item_get_status, function in ListallerErrorItem
listaller_status_item_new, function in ListallerErrorItem

T

LISTALLER_TYPE_APP_ITEM, macro in ListallerAppItem
LISTALLER_TYPE_ERROR_ITEM, macro in ListallerErrorItem
LISTALLER_TYPE_KEY_MANAGER, macro in ListallerKeyManager
LISTALLER_TYPE_MANAGER, macro in ListallerManager
LISTALLER_TYPE_MESSAGE_ITEM, macro in ListallerErrorItem
LISTALLER_TYPE_MESSAGE_OBJECT, macro in ListallerMessageObject
LISTALLER_TYPE_PROGRESS_ITEM, macro in ListallerErrorItem
LISTALLER_TYPE_SETUP, macro in ListallerSetup
LISTALLER_TYPE_SETUP_SETTINGS, macro in ListallerSetupSettings
LISTALLER_TYPE_STATUS_ITEM, macro in ListallerErrorItem
LISTALLER_TYPE_UPDATER, macro in ListallerUpdater
LISTALLER_TYPE_UPDATE_ITEM, macro in ListallerErrorItem

U

ListallerUpdateItem, struct in ListallerErrorItem
ListallerUpdateItem:architecture, object property in ListallerErrorItem
ListallerUpdateItem:changelog, object property in ListallerErrorItem
ListallerUpdateItem:completed, object property in ListallerErrorItem
ListallerUpdateItem:sw-new, object property in ListallerErrorItem
ListallerUpdateItem:sw-old, object property in ListallerErrorItem
ListallerUpdateItem:sw-type, object property in ListallerErrorItem
ListallerUpdateItemClass, struct in ListallerErrorItem
ListallerUpdater, struct in ListallerUpdater
ListallerUpdater::update, object signal in ListallerUpdater
ListallerUpdater:available-updates, object property in ListallerUpdater
ListallerUpdater:settings, object property in ListallerUpdater
ListallerUpdaterClass, struct in ListallerUpdater
listaller_updater_apply_updates, function in ListallerUpdater
listaller_updater_apply_updates_all, function in ListallerUpdater
listaller_updater_find_updates, function in ListallerUpdater
listaller_updater_get_available_updates, function in ListallerUpdater
listaller_updater_get_settings, function in ListallerUpdater
listaller_updater_new, function in ListallerUpdater
listaller_updater_set_settings, function in ListallerUpdater
listaller_update_item_get_architecture, function in ListallerErrorItem
listaller_update_item_get_changelog, function in ListallerErrorItem
listaller_update_item_get_completed, function in ListallerErrorItem
listaller_update_item_get_sw_new, function in ListallerErrorItem
listaller_update_item_get_sw_old, function in ListallerErrorItem
listaller_update_item_get_sw_type, function in ListallerErrorItem
listaller_update_item_new, function in ListallerErrorItem
listaller_utils_build_filename, function in utils
listaller_utils_enable_translation, function in config-global

Index of deprecated API

Annotation Glossary

O

out

Parameter for returning results. Default is transfer full.

A

array

Parameter points to an array of items.

I

in

Parameter for input. Default is transfer none.

T

transfer full

Free data after the code is done.

E

error-domains

Typed errors. Similar to throws in Java.

T

transfer none

Don't free data after the code is done.

./Listaller-0.5.8/docs/api/html/ListallerIPKSecurityInfo.html0000664000175000017500000007612112176743563024247 0ustar matthiasmatthias ListallerIPKSecurityInfo

ListallerIPKSecurityInfo

ListallerIPKSecurityInfo — Package security information

Object Hierarchy

  GObject
   +----ListallerIPKSecurityInfo
  GEnum
   +----ListallerSecurityLevel
  GEnum
   +----ListallerSignStatus
  GEnum
   +----ListallerSignTrust

Properties

  "key-fpr"                  gchar*                : Read / Write
  "signature-status"         ListallerSignStatus   : Read / Write
  "signature-trustlevel"     ListallerSignTrust    : Read / Write
  "trust-reason"             gchar*                : Read / Write
  "user-names"               gchar*                : Read / Write

Description

This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature.

Details

LISTALLER_IPK_TYPE_SECURITY_INFO

#define LISTALLER_IPK_TYPE_SECURITY_INFO (listaller_ipk_security_info_get_type ())

The type for ListallerIPKSecurityInfo.


listaller_ipk_security_info_get_level ()

ListallerSecurityLevel listaller_ipk_security_info_get_level
                                                        (ListallerIPKSecurityInfo *self);

self :

the ListallerIPKSecurityInfo instance

Returns :

a human-readable general security level, which was determined for the associated package.

listaller_ipk_security_info_get_level_as_sentence ()

gchar *             listaller_ipk_security_info_get_level_as_sentence
                                                        (ListallerIPKSecurityInfo *self);

Get a sentence describing the security status of a package.

self :

the ListallerIPKSecurityInfo instance

listaller_ipk_security_info_get_level_as_string ()

gchar *             listaller_ipk_security_info_get_level_as_string
                                                        (ListallerIPKSecurityInfo *self);

Get a simple workd (such as "high" or "low") which describes the security status of a package.

self :

the ListallerIPKSecurityInfo instance

listaller_ipk_security_info_get_signature_status ()

ListallerSignStatus listaller_ipk_security_info_get_signature_status
                                                        (ListallerIPKSecurityInfo *self);

Get and return the current value of the "signature-status" property.

self :

the ListallerIPKSecurityInfo instance to query

Returns :

the value of the "signature-status" property

listaller_ipk_security_info_get_signature_trustlevel ()

ListallerSignTrust  listaller_ipk_security_info_get_signature_trustlevel
                                                        (ListallerIPKSecurityInfo *self);

Get and return the current value of the "signature-trustlevel" property.

self :

the ListallerIPKSecurityInfo instance to query

Returns :

the value of the "signature-trustlevel" property

listaller_ipk_security_info_get_user_names ()

const gchar *       listaller_ipk_security_info_get_user_names
                                                        (ListallerIPKSecurityInfo *self);

Get and return the current value of the "user-names" property.

self :

the ListallerIPKSecurityInfo instance to query

Returns :

the value of the "user-names" property

listaller_ipk_security_info_get_key_fpr ()

const gchar *       listaller_ipk_security_info_get_key_fpr
                                                        (ListallerIPKSecurityInfo *self);

Get and return the current value of the "key-fpr" property.

self :

the ListallerIPKSecurityInfo instance to query

Returns :

the value of the "key-fpr" property

listaller_ipk_security_info_get_trust_reason ()

const gchar *       listaller_ipk_security_info_get_trust_reason
                                                        (ListallerIPKSecurityInfo *self);

Get and return the current value of the "trust-reason" property.

self :

the ListallerIPKSecurityInfo instance to query

Returns :

the value of the "trust-reason" property

struct ListallerIPKSecurityInfo

struct ListallerIPKSecurityInfo;

Package security information

This class stores data which can be used to display meaningful information about the security level of a 3rd-party software package. It provides information about the state of the package signature.


struct ListallerIPKSecurityInfoClass

struct ListallerIPKSecurityInfoClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_SECURITY_INFO. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

listaller_security_level_to_string ()

gchar *             listaller_security_level_to_string  (ListallerSecurityLevel self);

self :

the ListallerSecurityLevel instance

listaller_security_level_from_string ()

ListallerSecurityLevel listaller_security_level_from_string
                                                        (const gchar *str);

str :

 

enum ListallerSecurityLevel

typedef enum {
	LISTALLER_SECURITY_LEVEL_DANGEROUS,
	LISTALLER_SECURITY_LEVEL_LOW,
	LISTALLER_SECURITY_LEVEL_MEDIUM,
	LISTALLER_SECURITY_LEVEL_HIGH
} ListallerSecurityLevel;

Simple indicator of package security


listaller_sign_status_to_string ()

gchar *             listaller_sign_status_to_string     (ListallerSignStatus self);

self :

the ListallerSignStatus instance

enum ListallerSignStatus

typedef enum {
	LISTALLER_SIGN_STATUS_UNKNOWN,
	LISTALLER_SIGN_STATUS_VALID,
	LISTALLER_SIGN_STATUS_KEY_EXPIRED,
	LISTALLER_SIGN_STATUS_KEY_MISSING,
	LISTALLER_SIGN_STATUS_CERT_REVOKED,
	LISTALLER_SIGN_STATUS_SIG_EXPIRED,
	LISTALLER_SIGN_STATUS_BAD,
	LISTALLER_SIGN_STATUS_NO_PUBKEY
} ListallerSignStatus;

Status of a package signature


listaller_sign_trust_to_string ()

gchar *             listaller_sign_trust_to_string      (ListallerSignTrust self);

self :

the ListallerSignTrust instance

enum ListallerSignTrust

typedef enum {
	LISTALLER_SIGN_TRUST_UNKNOWN,
	LISTALLER_SIGN_TRUST_BAD_VALUE,
	LISTALLER_SIGN_TRUST_UNDEFINED,
	LISTALLER_SIGN_TRUST_NEVER,
	LISTALLER_SIGN_TRUST_MARGINAL,
	LISTALLER_SIGN_TRUST_FULL,
	LISTALLER_SIGN_TRUST_ULTIMATE
} ListallerSignTrust;

Trust level of a signature

Property Details

The "key-fpr" property

  "key-fpr"                  gchar*                : Read / Write

key-fpr.

Default value: NULL


The "signature-status" property

  "signature-status"         ListallerSignStatus   : Read / Write

signature-status.

Default value: LISTALLER_SIGN_STATUS_UNKNOWN


The "signature-trustlevel" property

  "signature-trustlevel"     ListallerSignTrust    : Read / Write

signature-trustlevel.

Default value: LISTALLER_SIGN_TRUST_UNKNOWN


The "trust-reason" property

  "trust-reason"             gchar*                : Read / Write

trust-reason.

Default value: NULL


The "user-names" property

  "user-names"               gchar*                : Read / Write

user-names.

Default value: NULL

./Listaller-0.5.8/docs/api/html/ListallerSetupSettings.html0000664000175000017500000011656612176743563024111 0ustar matthiasmatthias ListallerSetupSettings

ListallerSetupSettings

ListallerSetupSettings — Class to store settings of a IPK setup.

Synopsis

#define             LISTALLER_TYPE_SETUP_SETTINGS
void                listaller_setup_settings_lock       (ListallerSetupSettings *self);
void                listaller_setup_settings_unlock     (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_database_file
                                                        (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_appregister_dir
                                                        (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_appdata_dir
                                                        (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_depdata_dir
                                                        (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_icon_base_dir
                                                        (ListallerSetupSettings *self);
gchar *             listaller_setup_settings_icon_size_dir
                                                        (ListallerSetupSettings *self,
                                                         gint size);
gchar *             listaller_setup_settings_applications_dir
                                                        (ListallerSetupSettings *self);
ListallerIPKInstallMode listaller_setup_settings_get_current_mode
                                                        (ListallerSetupSettings *self);
gboolean            listaller_setup_settings_get_locked (ListallerSetupSettings *self);
gboolean            listaller_setup_settings_get_shared_mode
                                                        (ListallerSetupSettings *self);
gboolean            listaller_setup_settings_get_private_mode
                                                        (ListallerSetupSettings *self);
gboolean            listaller_setup_settings_get_test_mode
                                                        (ListallerSetupSettings *self);
struct              ListallerSetupSettings;
struct              ListallerSetupSettingsClass;
gboolean            listaller_ipk_install_mode_is_all_set
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode flags);
gboolean            listaller_ipk_install_mode_is_any_set
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode flags);
ListallerIPKInstallMode listaller_ipk_install_mode_set  (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode mode);
ListallerIPKInstallMode listaller_ipk_install_mode_unset
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode mode);
enum                ListallerIPKInstallMode;

Object Hierarchy

  GObject
   +----ListallerSetupSettings
  GFlags
   +----ListallerIPKInstallMode

Properties

  "current-mode"             ListallerIPKInstallMode  : Read / Write
  "locked"                   gboolean              : Read
  "private-mode"             gboolean              : Read
  "shared-mode"              gboolean              : Read
  "test-mode"                gboolean              : Read

Description

Details

LISTALLER_TYPE_SETUP_SETTINGS

#define LISTALLER_TYPE_SETUP_SETTINGS (listaller_setup_settings_get_type ())

The type for ListallerSetupSettings.


listaller_setup_settings_lock ()

void                listaller_setup_settings_lock       (ListallerSetupSettings *self);

Lock the settings, so no changes can be made anymore

self :

the ListallerSetupSettings instance

listaller_setup_settings_unlock ()

void                listaller_setup_settings_unlock     (ListallerSetupSettings *self);

Allow changing the settings again

self :

the ListallerSetupSettings instance

listaller_setup_settings_database_file ()

gchar *             listaller_setup_settings_database_file
                                                        (ListallerSetupSettings *self);

self :

the ListallerSetupSettings instance

listaller_setup_settings_appregister_dir ()

gchar *             listaller_setup_settings_appregister_dir
                                                        (ListallerSetupSettings *self);

Get software registry directory

self :

the ListallerSetupSettings instance

listaller_setup_settings_appdata_dir ()

gchar *             listaller_setup_settings_appdata_dir
                                                        (ListallerSetupSettings *self);

self :

the ListallerSetupSettings instance

listaller_setup_settings_depdata_dir ()

gchar *             listaller_setup_settings_depdata_dir
                                                        (ListallerSetupSettings *self);

self :

the ListallerSetupSettings instance

listaller_setup_settings_icon_base_dir ()

gchar *             listaller_setup_settings_icon_base_dir
                                                        (ListallerSetupSettings *self);

self :

the ListallerSetupSettings instance

listaller_setup_settings_icon_size_dir ()

gchar *             listaller_setup_settings_icon_size_dir
                                                        (ListallerSetupSettings *self,
                                                         gint size);

self :

the ListallerSetupSettings instance

size :

 

listaller_setup_settings_applications_dir ()

gchar *             listaller_setup_settings_applications_dir
                                                        (ListallerSetupSettings *self);

self :

the ListallerSetupSettings instance

listaller_setup_settings_get_current_mode ()

ListallerIPKInstallMode listaller_setup_settings_get_current_mode
                                                        (ListallerSetupSettings *self);

Get and return the current value of the "current-mode" property.

self :

the ListallerSetupSettings instance to query

Returns :

the value of the "current-mode" property

listaller_setup_settings_get_locked ()

gboolean            listaller_setup_settings_get_locked (ListallerSetupSettings *self);

Get and return the current value of the "locked" property.

self :

the ListallerSetupSettings instance to query

Returns :

the value of the "locked" property

listaller_setup_settings_get_shared_mode ()

gboolean            listaller_setup_settings_get_shared_mode
                                                        (ListallerSetupSettings *self);

Get and return the current value of the "shared-mode" property.

self :

the ListallerSetupSettings instance to query

Returns :

the value of the "shared-mode" property

listaller_setup_settings_get_private_mode ()

gboolean            listaller_setup_settings_get_private_mode
                                                        (ListallerSetupSettings *self);

Get and return the current value of the "private-mode" property.

self :

the ListallerSetupSettings instance to query

Returns :

the value of the "private-mode" property

listaller_setup_settings_get_test_mode ()

gboolean            listaller_setup_settings_get_test_mode
                                                        (ListallerSetupSettings *self);

Get and return the current value of the "test-mode" property.

self :

the ListallerSetupSettings instance to query

Returns :

the value of the "test-mode" property

struct ListallerSetupSettings

struct ListallerSetupSettings;

Class to store settings of a IPK setup.


struct ListallerSetupSettingsClass

struct ListallerSetupSettingsClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_SETUP_SETTINGS. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

listaller_ipk_install_mode_is_all_set ()

gboolean            listaller_ipk_install_mode_is_all_set
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode flags);

self :

the ListallerIPKInstallMode instance

flags :

 

listaller_ipk_install_mode_is_any_set ()

gboolean            listaller_ipk_install_mode_is_any_set
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode flags);

self :

the ListallerIPKInstallMode instance

flags :

 

listaller_ipk_install_mode_set ()

ListallerIPKInstallMode listaller_ipk_install_mode_set  (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode mode);

self :

the ListallerIPKInstallMode instance

mode :

 

listaller_ipk_install_mode_unset ()

ListallerIPKInstallMode listaller_ipk_install_mode_unset
                                                        (ListallerIPKInstallMode self,
                                                         ListallerIPKInstallMode mode);

self :

the ListallerIPKInstallMode instance

mode :

 

enum ListallerIPKInstallMode

typedef enum {
	LISTALLER_IPK_INSTALL_MODE_NONE = 0,
	LISTALLER_IPK_INSTALL_MODE_SHARED = 1 << 0,
	LISTALLER_IPK_INSTALL_MODE_PRIVATE = 1 << 1,
	LISTALLER_IPK_INSTALL_MODE_TEST = 1 << 2
} ListallerIPKInstallMode;

Mode of a current installation.

This class is also used to indicate installation modes supported by an IPK package.

Property Details

The "current-mode" property

  "current-mode"             ListallerIPKInstallMode  : Read / Write

current-mode.


The "locked" property

  "locked"                   gboolean              : Read

locked.

Default value: FALSE


The "private-mode" property

  "private-mode"             gboolean              : Read

private-mode.

Default value: FALSE


The "shared-mode" property

  "shared-mode"              gboolean              : Read

shared-mode.

Default value: FALSE


The "test-mode" property

  "test-mode"                gboolean              : Read

test-mode.

Default value: FALSE

./Listaller-0.5.8/docs/api/html/manpages.html0000664000175000017500000000555412176743563021201 0ustar matthiasmatthias Listaller Tools Manual Pages

Listaller Tools Manual Pages

appcompile — Compile software automatically
depscan — Detect binary dependencies
lig++ — Wrapper around g++ to create more portable apps
ligcc — Wrapper around gcc to create more portable apps
likey — Manage Listaller's key database
lipa — Listaller command-line tool
lipkgen — Listaller package builder
relaytool — Generate a file that can be used instead of linking directly against a library
runapp — Run an application
./Listaller-0.5.8/docs/api/html/home.png0000644000175000017500000000110212176743562020134 0ustar matthiasmatthiasPNG  IHDRשPLTE  $$$(((,,,000888<<<@@@OOOPPP[[[___```lll{{{?*tRNS  $(,4@GKSghkotwa7IDATxڭ[WP̳ij2LK<`[4jg8b袋y/5F~QЈJT*N/ q]1zJ+zD=94bv«1;ÈP= ]j*P got ׻>&*B@ $n?q nAC&ޙc~a|ZL\!CVF@ڐ~IENDB`./Listaller-0.5.8/docs/api/html/re25.html0000664000175000017500000000620212176743563020152 0ustar matthiasmatthias runapp

runapp

runapp — Run an application

Synopsis

runapp {APPNAME}

Description

This manual page documents briefly the runapp command.

runapp runs applications installed using Listaller. It will set the application environment, initiate a sanbox and do everything else needed to run the application. runapp can also execute every other application found on the system, even those which were not installed using Listaller.

Options

--version

Display version number of runapp

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

lipa (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/re19.html0000664000175000017500000000574712176743563020172 0ustar matthiasmatthias lig++

lig++

lig++ — Wrapper around g++ to create more portable apps

Synopsis

lig++ [OPTION ...]

Description

This manual page documents briefly the lig++ command.

lig++ is a wrapper around ligcc. It allows you to create more portable executables, see the ligcc manual page for more information.

Options

See the manpage of g++(1) for more information about possible options.

There are also several environment variables available to modify lig++'s behavior check the documentation for more information.

See Also

libuild (1), ligcc(1), gcc(1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/index.html0000664000175000017500000001335112176743563020507 0ustar matthiasmatthias Listaller Reference Manual

for liblistaller-glib 0.5.x. The latest version of this documentation can be found on-line at http://listaller.tenstral.net/.


Listaller API Reference
ListallerAppItem — Application entry
ListallerErrorItem — Return type describing an error
ListallerUpdater — All necessary methods to keep installed applications up-to-date
ListallerManager — Allows managing Listaller applications
ListallerSetup — Performs the installation of an IPK package
ListallerSetupSettings — Class to store settings of a IPK setup.
ListallerKeyManager — Manage Listaller's GPG-Key database
ListallerIPKSecurityInfo — Package security information
ListallerIPKControl — Generic IPK package control data
components
ListallerIPKChangelog — Retrieve information from application changelogs
ListallerMessageObject — Class providing basic message handling
database-internal
logging
utils — Common utility functions used by Listaller
version
More Information
API Index
Index of deprecated API
Annotation Glossary
Listaller Tools Manual Pages
appcompile — Compile software automatically
depscan — Detect binary dependencies
lig++ — Wrapper around g++ to create more portable apps
ligcc — Wrapper around gcc to create more portable apps
likey — Manage Listaller's key database
lipa — Listaller command-line tool
lipkgen — Listaller package builder
relaytool — Generate a file that can be used instead of linking directly against a library
runapp — Run an application
./Listaller-0.5.8/docs/api/html/right.png0000644000175000017500000000057412176743562020335 0ustar matthiasmatthiasPNG  IHDRש{PLTE ###+++@@@WtRNS (48@GX[ytIDATxڅ0 PS@XZ -%e I<`eA٬Z9(1'n/"U!Dhw$4QX$ AlXR^>8Mzmt>k7 O$ٞ=mVQ.JO9  IENDB`./Listaller-0.5.8/docs/api/html/ListallerUpdater.html0000664000175000017500000004736112176743563022670 0ustar matthiasmatthias ListallerUpdater

ListallerUpdater

ListallerUpdater — All necessary methods to keep installed applications up-to-date

Object Hierarchy

  GObject
   +----ListallerMessageObject
         +----ListallerUpdater

Properties

  "available-updates"        GeeArrayList*         : Read
  "settings"                 ListallerSetupSettings*  : Read / Write

Signals

  "update"                                         : Run Last

Description

This class allows installing updates for installed applications.

Details

LISTALLER_TYPE_UPDATER

#define LISTALLER_TYPE_UPDATER (listaller_updater_get_type ())

The type for ListallerUpdater.


listaller_updater_find_updates ()

void                listaller_updater_find_updates      (ListallerUpdater *self);

Find updates available for installed applications.

self :

the ListallerUpdater instance

listaller_updater_apply_updates ()

gboolean            listaller_updater_apply_updates     (ListallerUpdater *self,
                                                         GeeArrayList *update_list);

Apply updates selected in update_list.

self :

the ListallerUpdater instance

update_list :

 . A list containing valid UpdateItems. [in]

listaller_updater_apply_updates_all ()

gboolean            listaller_updater_apply_updates_all (ListallerUpdater *self);

Apply all available updates

self :

the ListallerUpdater instance

listaller_updater_new ()

ListallerUpdater *  listaller_updater_new               (gboolean shared_mode);

Create a new Listaller update manager

shared_mode :

 . Whether we are in shared mode or not. [in]

listaller_updater_get_settings ()

ListallerSetupSettings * listaller_updater_get_settings (ListallerUpdater *self);

Get and return the current value of the "settings" property.

self :

the ListallerUpdater instance to query

Returns :

the value of the "settings" property

listaller_updater_set_settings ()

void                listaller_updater_set_settings      (ListallerUpdater *self,
                                                         ListallerSetupSettings *value);

Set the value of the "settings" property to value.

self :

the ListallerUpdater instance to modify

value :

the new value of the "settings" property

listaller_updater_get_available_updates ()

GeeArrayList *      listaller_updater_get_available_updates
                                                        (ListallerUpdater *self);

Get and return the current value of the "available-updates" property.

self :

the ListallerUpdater instance to query

Returns :

the value of the "available-updates" property

struct ListallerUpdater

struct ListallerUpdater;

All necessary methods to keep installed applications up-to-date

This class allows installing updates for installed applications.


struct ListallerUpdaterClass

struct ListallerUpdaterClass {
	ListallerMessageObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_UPDATER. All the fields in this structure are private and should never be accessed directly.

ListallerMessageObjectClass parent_class;

the parent class structure

Property Details

The "available-updates" property

  "available-updates"        GeeArrayList*         : Read

available-updates.


The "settings" property

  "settings"                 ListallerSetupSettings*  : Read / Write

settings.

Signal Details

The "update" signal

void                user_function                      (ListallerUpdater    *updater,
                                                        ListallerUpdateItem *update,
                                                        gpointer             user_data)      : Run Last

updater :

the ListallerUpdater instance that received the signal

update :

 

user_data :

user data set when the signal handler was connected.
./Listaller-0.5.8/docs/api/html/re27.html0000664000175000017500000000620312176743563020155 0ustar matthiasmatthias runapp

runapp

runapp — Run an application

Synopsis

runapp {APPNAME}

Description

This manual page documents briefly the runapp command.

runapp runs applications installed using Listaller. It will set the application environment, initiate a sanbox and do everything else needed to run the application. runapp can also execute every other application found on the system, even those which were not installed using Listaller.

Options

--version

Display version number of runapp

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

lipa (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/up.png0000644000175000017500000000044312176743562017637 0ustar matthiasmatthiasPNG  IHDRw=IDATx!0Ȋ $11Dppʉɉɉ D%@ o%/!eg*/iY`]1@Y ʃ ( &b(&b'"r>b/#r>b/#~@ɇ<)V!@)ExR>~4 tE RkdX~4%2 M {ۙ~:[d9t) IENDB`./Listaller-0.5.8/docs/api/html/ch01.html0000664000175000017500000001021712176743563020131 0ustar matthiasmatthias Listaller API Reference

Listaller API Reference

ListallerAppItem — Application entry
ListallerErrorItem — Return type describing an error
ListallerUpdater — All necessary methods to keep installed applications up-to-date
ListallerManager — Allows managing Listaller applications
ListallerSetup — Performs the installation of an IPK package
ListallerSetupSettings — Class to store settings of a IPK setup.
ListallerKeyManager — Manage Listaller's GPG-Key database
ListallerIPKSecurityInfo — Package security information
ListallerIPKControl — Generic IPK package control data
components
ListallerIPKChangelog — Retrieve information from application changelogs
ListallerMessageObject — Class providing basic message handling
database-internal
logging
utils — Common utility functions used by Listaller
version
./Listaller-0.5.8/docs/api/html/listaller-logging.html0000664000175000017500000001665612176743563023032 0ustar matthiasmatthias logging

logging

logging

Description

Details

listaller_set_verbose_mode ()

void                listaller_set_verbose_mode          (gboolean enabled);

self :

the (null) instance

enabled :

 

listaller_get_verbose_mode ()

gboolean            listaller_get_verbose_mode          (void);

self :

the (null) instance

listaller_set_console_mode ()

void                listaller_set_console_mode          (gboolean enabled);

self :

the (null) instance

enabled :

 

listaller_set_clitool_mode ()

void                listaller_set_clitool_mode          (gboolean enabled);

self :

the (null) instance

enabled :

 

listaller_add_log_domain ()

void                listaller_add_log_domain            (const gchar *log_domain);

self :

the (null) instance

log_domain :

 
./Listaller-0.5.8/docs/api/html/left.png0000644000175000017500000000056512176743562020152 0ustar matthiasmatthiasPNG  IHDRש~PLTE(((;;;@@@v:tRNS $04 version

version

version

Description

Details

listaller_get_version_info_str ()

gchar *             listaller_get_version_info_str      (void);

Get string describing Listaller's version number.

self :

the (null) instance

Returns :

Listaller version string

listaller_get_full_version_info_str ()

gchar *             listaller_get_full_version_info_str (void);

Get string describing Listaller's version number. This function will return a more detailed description of Listaller's version and the OS it's running on.

self :

the (null) instance

Returns :

detailed Listaller version string

listaller_compare_versions ()

gint                listaller_compare_versions          (const gchar *a,
                                                         const gchar *b);

compare alpha and numeric segments of two versions

self :

the (null) instance

a :

 

b :

 

Returns :

1: a is newer than b 0: a and b are the same version -1: b is newer than a
./Listaller-0.5.8/docs/api/html/listaller-database-internal.html0000664000175000017500000001226512176743563024752 0ustar matthiasmatthias database-internal

database-internal

database-internal

Object Hierarchy

  GEnum
   +----ListallerDatabaseStatus

Description

Details

listaller_database_status_to_string ()

gchar *             listaller_database_status_to_string (ListallerDatabaseStatus self);

self :

the ListallerDatabaseStatus instance

enum ListallerDatabaseStatus

typedef enum {
	LISTALLER_DATABASE_STATUS_OPENED,
	LISTALLER_DATABASE_STATUS_LOCKED,
	LISTALLER_DATABASE_STATUS_UNLOCKED,
	LISTALLER_DATABASE_STATUS_SUCCESS,
	LISTALLER_DATABASE_STATUS_FAILURE,
	LISTALLER_DATABASE_STATUS_CLOSED
} ListallerDatabaseStatus;

enum ListallerDatabaseError

typedef enum {
	LISTALLER_DATABASE_ERROR_ERROR,
	LISTALLER_DATABASE_ERROR_BACKING,
	LISTALLER_DATABASE_ERROR_MEMORY,
	LISTALLER_DATABASE_ERROR_ABORT,
	LISTALLER_DATABASE_ERROR_LIMITS,
	LISTALLER_DATABASE_ERROR_TYPESPEC,
	LISTALLER_DATABASE_ERROR_LOCKED
} ListallerDatabaseError;
./Listaller-0.5.8/docs/api/html/re24.html0000664000175000017500000001604212176743563020154 0ustar matthiasmatthias relaytool

relaytool

relaytool — Generate a file that can be used instead of linking directly against a library

Synopsis

relaytool [OPTION ...] [LINKER COMMAND ...]

Description

This manual page documents briefly the relaytool command.

relaytool is a program to provide a more convenient interface to dlopen/dlsym. It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime.

In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result. If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1.

Options

--relay LIB

If a matching -lLIB is found, generate a file that can be used instead of linking directly to LIB. The name of the file is echoed on stdout. Multiple --relay can be used together, a file will be generated for each matching ones.

--replace-all-libs

Generate a file for every -lLIB parameter.

--minimal-list OBJ_LIST

Will look in OBJ_LIST for undefined symbols, and generate a file creating only the needed symbols for each LIB.

--partial-map MAP_FILE

Generate a file creating only the symbols contained in MAP_FILE. Will apply to all further -lLIB parameters, so in general is not suitable to multiple libs in the same invocation of relaytool.

--no-replace

Echo -lLIB on stdout even if a --relay LIB is found, so it'll be linked in normally.

--multilink [SONAMES...]

If a library has different SONAMES on different Linux distributions you can specify the various SONAMES that it's known by here. Relaytool will attempt to load them (in the order provided) until one if found. This cannot be used with multiple --relay options. The first SONAME in the list will be used as the name in the _is_present variable and _symbol_is_present function.

--out-dir DIRECTORY

Write stub file to DIRECTORY instead of CWD.

Linker commands

-LPATH

Add PATH to the list of paths to search for LIBs.

-lLIB

If a matching --relay LIB is found (or if --replace-all-libs is specified), generate a file that can be used instead of linking directly to LIB. If there's no --relay LIB, echo -lLIB to stdout.

All other linker commands are passed as is to stdout.

Other commands

-h, --help

Show some help.

--version

Display version information of relaytool

See Also

lipkgen (1), ligcc(1), gcc(1).

Additional documentation can be found on http://listaller.tenstral.net/wiki/doku.php/relaytool.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/ListallerIPKChangelog.html0000664000175000017500000001650712176743563023515 0ustar matthiasmatthias ListallerIPKChangelog

ListallerIPKChangelog

ListallerIPKChangelog — Retrieve information from application changelogs

Object Hierarchy

  GObject
   +----ListallerIPKChangelog

Description

Details

LISTALLER_IPK_TYPE_CHANGELOG

#define LISTALLER_IPK_TYPE_CHANGELOG (listaller_ipk_changelog_get_type ())

The type for ListallerIPKChangelog.


listaller_ipk_changelog_open ()

gboolean            listaller_ipk_changelog_open        (ListallerIPKChangelog *self,
                                                         const gchar *fname);

self :

the ListallerIPKChangelog instance

fname :

 

listaller_ipk_changelog_new ()

ListallerIPKChangelog * listaller_ipk_changelog_new     (void);

struct ListallerIPKChangelog

struct ListallerIPKChangelog;

Retrieve information from application changelogs


struct ListallerIPKChangelogClass

struct ListallerIPKChangelogClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_IPK_TYPE_CHANGELOG. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure
./Listaller-0.5.8/docs/api/html/re21.html0000664000175000017500000000740112176743563020150 0ustar matthiasmatthias likey

likey

likey — Manage Listaller's key database

Synopsis

likey {COMMAND} [OPTIONS ...]

Description

This manual page documents briefly the likey command.

likey allows administrators to manage Listaller's database of trusted GPG keys.

Options

-l, --lookup PATTERN

Look for key matching PATTERN in the key database.

-i, --import FPR

Import public key with the given fingerprint from a public keyserver.

-v, --version

Display version number of likey

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

runapp (1), lipa (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/object-tree.html0000664000175000017500000001147112176743563021604 0ustar matthiasmatthias Object Hierarchy ./Listaller-0.5.8/docs/api/html/ListallerReport.html0000664000175000017500000006057012176743563022534 0ustar matthiasmatthias ListallerReport

ListallerReport

ListallerReport — Report generator

Object Hierarchy

  GObject
   +----ListallerReport
  GEnum
   +----ListallerReportMessageType

Description

Details

LISTALLER_TYPE_REPORT

#define LISTALLER_TYPE_REPORT (listaller_report_get_type ())

The type for ListallerReport.


listaller_report_contains_error ()

gboolean            listaller_report_contains_error     (ListallerReport *self);

self :

the ListallerReport instance

listaller_report_is_empty ()

gboolean            listaller_report_is_empty           (ListallerReport *self);

self :

the ListallerReport instance

listaller_report_add_message ()

void                listaller_report_add_message        (ListallerReport *self,
                                                         ListallerReportMessageType mtype,
                                                         const gchar *message);

self :

the ListallerReport instance

listaller_report_add_info ()

void                listaller_report_add_info           (ListallerReport *self,
                                                         const gchar *message);

self :

the ListallerReport instance

listaller_report_add_warning ()

void                listaller_report_add_warning        (ListallerReport *self,
                                                         const gchar *message);

self :

the ListallerReport instance

listaller_report_add_error ()

void                listaller_report_add_error          (ListallerReport *self,
                                                         const gchar *message);

self :

the ListallerReport instance

listaller_report_to_string ()

gchar *             listaller_report_to_string          (ListallerReport *self);

self :

the ListallerReport instance

listaller_report_clear ()

void                listaller_report_clear              (ListallerReport *self);

self :

the ListallerReport instance

listaller_report_set_print_fatal ()

void                listaller_report_set_print_fatal    (ListallerReport *self,
                                                         gboolean print_fatal_msg);

self :

the ListallerReport instance

listaller_report_new ()

ListallerReport *   listaller_report_new                (void);

listaller_report_get_instance ()

ListallerReport *   listaller_report_get_instance       (void);

listaller_report_delete ()

void                listaller_report_delete             (void);

listaller_report_log_message ()

void                listaller_report_log_message        (ListallerReportMessageType mtype,
                                                         const gchar *message);

listaller_report_log_info ()

void                listaller_report_log_info           (const gchar *message);

listaller_report_log_warning ()

void                listaller_report_log_warning        (const gchar *message);

listaller_report_log_error ()

void                listaller_report_log_error          (const gchar *message);

listaller_report_clear_current ()

void                listaller_report_clear_current      (void);

listaller_report_set_print_fatal_msg ()

void                listaller_report_set_print_fatal_msg
                                                        (gboolean print_fatal_msg);

struct ListallerReport

struct ListallerReport;

Report generator


struct ListallerReportClass

struct ListallerReportClass {
	GObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_REPORT. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

enum ListallerReportMessageType

typedef enum {
	LISTALLER_REPORT_MESSAGE_TYPE_INFO,
	LISTALLER_REPORT_MESSAGE_TYPE_SUGGESTION,
	LISTALLER_REPORT_MESSAGE_TYPE_WARNING,
	LISTALLER_REPORT_MESSAGE_TYPE_CRITICAL,
	LISTALLER_REPORT_MESSAGE_TYPE_ERROR
} ListallerReportMessageType;

Type of a message written to a Listaller Report

./Listaller-0.5.8/docs/api/html/ListallerMessageObject.html0000664000175000017500000004712412176743563023774 0ustar matthiasmatthias ListallerMessageObject

ListallerMessageObject

ListallerMessageObject — Class providing basic message handling

Object Hierarchy

  GObject
   +----ListallerMessageObject
         +----ListallerKeyManager
         +----ListallerManager
         +----ListallerSetup
         +----ListallerUpdater
  GEnum
   +----ListallerObjConnectFlags

Description

Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API)

Details

LISTALLER_TYPE_MESSAGE_OBJECT

#define LISTALLER_TYPE_MESSAGE_OBJECT (listaller_message_object_get_type ())

The type for ListallerMessageObject.


listaller_message_object_set_error_hint_str ()

void                listaller_message_object_set_error_hint_str
                                                        (ListallerMessageObject *self,
                                                         const gchar *str);

self :

the ListallerMessageObject instance

str :

 

listaller_message_object_connect_with_object ()

void                listaller_message_object_connect_with_object
                                                        (ListallerMessageObject *self,
                                                         ListallerMessageObject *other_obj,
                                                         ListallerObjConnectFlags flags);

self :

the ListallerMessageObject instance

other_obj :

 

flags :

 

listaller_message_object_connect_with_object_all ()

void                listaller_message_object_connect_with_object_all
                                                        (ListallerMessageObject *self,
                                                         ListallerMessageObject *other_obj);

self :

the ListallerMessageObject instance

other_obj :

 

struct ListallerMessageObject

struct ListallerMessageObject;

Class providing basic message handling

Base class for all Listaller classes which want to send messages to each other. (Used e.g. for GUI stuff and in the public API)


struct ListallerMessageObjectClass

struct ListallerMessageObjectClass {
	GObjectClass parent_class;
	void (*emit_message) (ListallerMessageObject* self, const gchar* msg);
	void (*emit_warning) (ListallerMessageObject* self, const gchar* msg);
	void (*emit_error) (ListallerMessageObject* self, ListallerErrorEnum id, const gchar* details);
	void (*change_progress) (ListallerMessageObject* self, gint prog_value);
	void (*change_item_progress) (ListallerMessageObject* self, const gchar* id, guint item_progress);
};

The class structure for LISTALLER_TYPE_MESSAGE_OBJECT. All the fields in this structure are private and should never be accessed directly.

GObjectClass parent_class;

the parent class structure

emit_message ()

emit_warning ()

emit_error ()

change_progress ()

change_item_progress ()


enum ListallerObjConnectFlags

typedef enum {
	LISTALLER_OBJ_CONNECT_FLAGS_NONE,
	LISTALLER_OBJ_CONNECT_FLAGS_PROGRESS_TO_SUBPROGRESS,
	LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_PROGRESS,
	LISTALLER_OBJ_CONNECT_FLAGS_IGNORE_ERROR_CODE
} ListallerObjConnectFlags;

Signal Details

The "error-code" signal

void                user_function                      (ListallerMessageObject *message_object,
                                                        ListallerErrorItem     *error,
                                                        gpointer                user_data)           : Run Last

message_object :

the ListallerMessageObject instance that received the signal

error :

 

user_data :

user data set when the signal handler was connected.

The "message" signal

void                user_function                      (ListallerMessageObject *message_object,
                                                        ListallerMessageItem   *message,
                                                        gpointer                user_data)           : Run Last

message_object :

the ListallerMessageObject instance that received the signal

message :

 

user_data :

user data set when the signal handler was connected.

The "progress" signal

void                user_function                      (ListallerMessageObject *message_object,
                                                        ListallerProgressItem  *prog,
                                                        gpointer                user_data)           : Run Last

message_object :

the ListallerMessageObject instance that received the signal

prog :

 

user_data :

user data set when the signal handler was connected.
./Listaller-0.5.8/docs/api/html/re18.html0000664000175000017500000000742312176743563020162 0ustar matthiasmatthias depscan

depscan

depscan — Detect binary dependencies

Synopsis

depscan [OPTION ...]

Description

This manual page documents briefly the depscan command.

depscan reads library dependencies of binary files in a directory and ouputs them in form of a list.

Options

-r, --recursive

Search for binaries in recursive mode.

--out-simpletext

Output simple, machine-readable text.

-c, --out-components

Output dependencies as Listaller components (versioned, if version could be determined).

--version

Display version number of depscan

-v, --verbose

Turn on verbose mode (useful for debugging purposes).

See Also

lipkgen (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/re23.html0000664000175000017500000001013712176743563020152 0ustar matthiasmatthias lipkgen

lipkgen

lipkgen — Listaller package builder

Synopsis

lipkgen {-b} [OPTION ...]

Description

This manual page documents briefly the lipkgen command.

lipkgen is a simple tool to build IPK application packages directly from software sources or binary files using a package recipe.

Options

-b, --build

Build IPK package using the IPK source files in the ipkinstall folder in current directory.

-s, --sourcedir=DIRECTORY

Set the IPK package source directory.

-o, --outdir=DIRECTORY

Set an output path were the resulting package should be saved.

--sign

Sign the resulting package with your GPG key.

--version

Display version number of lipkgen

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

runapp (1), lipa(1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/listaller-config-global.html0000664000175000017500000000625612176743563024102 0ustar matthiasmatthias config-global

config-global

config-global

Synopsis

void                listaller_utils_enable_translation  (void);

Description

Details

listaller_utils_enable_translation ()

void                listaller_utils_enable_translation  (void);

self :

the (null) instance
./Listaller-0.5.8/docs/api/html/re26.html0000664000175000017500000001603712176743563020162 0ustar matthiasmatthias relaytool

relaytool

relaytool — Generate a file that can be used instead of linking directly against a library

Synopsis

relaytool [OPTION ...] [LINKER COMMAND ...]

Description

This manual page documents briefly the relaytool command.

relaytool is a program to provide a more convenient interface to dlopen/dlsym. It lets you write the same style of code you would when using a normal hard link (-lwhatever), but the symbols are actually lazy-linked at runtime. You can use the symbols libwhatever_is_present and libwhatever_symbol_is_present() to find out what APIs are actually available at runtime.

In other words, the need to use function pointers and lots of manual calls to dlsym() is eliminated, and it becomes much simpler to soft link to things as a result. If a symbol is missing at runtime and you call it anyway, your application will abort and an error message is printed that states which function was called. If a variable is missing at runtime, the value is always -1.

Options

--relay LIB

If a matching -lLIB is found, generate a file that can be used instead of linking directly to LIB. The name of the file is echoed on stdout. Multiple --relay can be used together, a file will be generated for each matching ones.

--replace-all-libs

Generate a file for every -lLIB parameter.

--minimal-list OBJ_LIST

Will look in OBJ_LIST for undefined symbols, and generate a file creating only the needed symbols for each LIB.

--partial-map MAP_FILE

Generate a file creating only the symbols contained in MAP_FILE. Will apply to all further -lLIB parameters, so in general is not suitable to multiple libs in the same invocation of relaytool.

--no-replace

Echo -lLIB on stdout even if a --relay LIB is found, so it'll be linked in normally.

--multilink [SONAMES...]

If a library has different SONAMES on different Linux distributions you can specify the various SONAMES that it's known by here. Relaytool will attempt to load them (in the order provided) until one if found. This cannot be used with multiple --relay options. The first SONAME in the list will be used as the name in the _is_present variable and _symbol_is_present function.

--out-dir DIRECTORY

Write stub file to DIRECTORY instead of CWD.

Linker commands

-LPATH

Add PATH to the list of paths to search for LIBs.

-lLIB

If a matching --relay LIB is found (or if --replace-all-libs is specified), generate a file that can be used instead of linking directly to LIB. If there's no --relay LIB, echo -lLIB to stdout.

All other linker commands are passed as is to stdout.

Other commands

-h, --help

Show some help.

--version

Display version information of relaytool

See Also

lipkgen (1), ligcc(1), gcc(1).

Additional documentation can be found on http://listaller.tenstral.net/wiki/doku.php/relaytool.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/html/listaller-components.html0000664000175000017500000000654112176743563023561 0ustar matthiasmatthias components

components

components

Synopsis

enum                ListallerDepItemType;

Object Hierarchy

  GEnum
   +----ListallerDepItemType

Description

Details

enum ListallerDepItemType

typedef enum {
	LISTALLER_DEP_ITEM_TYPE_SHARED_LIB,
	LISTALLER_DEP_ITEM_TYPE_BINARY,
	LISTALLER_DEP_ITEM_TYPE_PYTHON,
	LISTALLER_DEP_ITEM_TYPE_PYTHON_2,
	LISTALLER_DEP_ITEM_TYPE_FILE,
	LISTALLER_DEP_ITEM_TYPE_UNKNOWN
} ListallerDepItemType;

Type of a component-item

Describes the type of an item which is part of a dependency (framework/module).

./Listaller-0.5.8/docs/api/html/ListallerSetup.html0000664000175000017500000007170512176743563022363 0ustar matthiasmatthias ListallerSetup

ListallerSetup

ListallerSetup — Performs the installation of an IPK package

Object Hierarchy

  GObject
   +----ListallerMessageObject
         +----ListallerSetup

Properties

  "control"                  ListallerIPKControl*  : Read
  "fname"                    gchar*                : Read
  "settings"                 ListallerSetupSettings*  : Read

Signals

  "status-changed"                                 : Run Last

Description

This class handles all stuff required to install an application. All methods are syncronous right now.

Details

LISTALLER_TYPE_SETUP

#define LISTALLER_TYPE_SETUP (listaller_setup_get_type ())

The type for ListallerSetup.


listaller_setup_supported_install_modes ()

ListallerIPKInstallMode listaller_setup_supported_install_modes
                                                        (ListallerSetup *self);

self :

the ListallerSetup instance

listaller_setup_set_install_mode ()

gboolean            listaller_setup_set_install_mode    (ListallerSetup *self,
                                                         ListallerIPKInstallMode mode);

self :

the ListallerSetup instance

mode :

 

listaller_setup_get_install_mode ()

ListallerIPKInstallMode listaller_setup_get_install_mode
                                                        (ListallerSetup *self);

self :

the ListallerSetup instance

listaller_setup_initialize ()

gboolean            listaller_setup_initialize          (ListallerSetup *self);

self :

the ListallerSetup instance

listaller_setup_get_current_application ()

ListallerAppItem *  listaller_setup_get_current_application
                                                        (ListallerSetup *self);

self :

the ListallerSetup instance

listaller_setup_kill_installation_process ()

void                listaller_setup_kill_installation_process
                                                        (ListallerSetup *self);

Forcibly kills a running installation process. You should never use this method, it might only be useful in command-line applications, where you can catch an interrupt signal and tell the running setup about it. It might be used on mobile devices if a setup is running and the device is running out of power. (but best way in that case would be to prevent an installation in the first place, if there is not enough energy left) This function does some emergency cleanup and tries to make sure that nothing gets corrupted.

self :

the ListallerSetup instance

listaller_setup_get_replaced_native_packs ()

gchar *             listaller_setup_get_replaced_native_packs
                                                        (ListallerSetup *self);

Check if there are native packages providing the same functionality

Software packages can declare a "replaces" element, showing which native componants become obsolete if their 3rd-party app gets installed. E.g. Firefox could declare a replacement of "/usr/bin/firefox", so the user gets hinted to maybe remove the native package. This feature is optional, and Listaller won't perform any removal actions! This function will fail if the user did not request a shared installation.

self :

the ListallerSetup instance

Returns :

List of replaces package-ids, separated by newlines or NULL if no replacement was declared.

listaller_setup_run_installation ()

gboolean            listaller_setup_run_installation    (ListallerSetup *self);

Execute software installation

self :

the ListallerSetup instance

Returns :

Success of the operation (if FALSE, an error was emitted)

listaller_setup_get_security_info ()

ListallerIPKSecurityInfo * listaller_setup_get_security_info
                                                        (ListallerSetup *self);

self :

the ListallerSetup instance

listaller_setup_new ()

ListallerSetup *    listaller_setup_new                 (const gchar *ipkfilename);

ipkfilename :

 

listaller_setup_get_fname ()

const gchar *       listaller_setup_get_fname           (ListallerSetup *self);

Get and return the current value of the "fname" property.

self :

the ListallerSetup instance to query

Returns :

the value of the "fname" property

listaller_setup_get_settings ()

ListallerSetupSettings * listaller_setup_get_settings   (ListallerSetup *self);

Get and return the current value of the "settings" property.

self :

the ListallerSetup instance to query

Returns :

the value of the "settings" property

listaller_setup_get_control ()

ListallerIPKControl * listaller_setup_get_control       (ListallerSetup *self);

Get and return the current value of the "control" property.

self :

the ListallerSetup instance to query

Returns :

the value of the "control" property

struct ListallerSetup

struct ListallerSetup;

Performs the installation of an IPK package

This class handles all stuff required to install an application. All methods are syncronous right now.


struct ListallerSetupClass

struct ListallerSetupClass {
	ListallerMessageObjectClass parent_class;
};

The class structure for LISTALLER_TYPE_SETUP. All the fields in this structure are private and should never be accessed directly.

ListallerMessageObjectClass parent_class;

the parent class structure

Property Details

The "control" property

  "control"                  ListallerIPKControl*  : Read

control.


The "fname" property

  "fname"                    gchar*                : Read

fname.

Default value: NULL


The "settings" property

  "settings"                 ListallerSetupSettings*  : Read

settings.

Signal Details

The "status-changed" signal

void                user_function                      (ListallerSetup      *setup,
                                                        ListallerStatusItem *status,
                                                        gpointer             user_data)      : Run Last

setup :

the ListallerSetup instance that received the signal

status :

 

user_data :

user data set when the signal handler was connected.
./Listaller-0.5.8/docs/api/html/re17.html0000664000175000017500000001006112176743563020151 0ustar matthiasmatthias appcompile

appcompile

appcompile — Compile software automatically

Synopsis

appcompile [OPTION ...]

Description

This manual page documents briefly the appcompile command.

appcompile automatically compiles applications from source code. It will detect the build system (cmake, automake, ...) and then perform the necessary steps to generate the binary. appcompile can be used together with libuild, the Listaller build tool, to compile applications easily.

Options

-s, --sourcedir=DIRECTORY

Path to source of the application which should be compiled.

-o, --target_dir=DIRECTORY

Path where the resulting binaries should be installed to.

--strip

Strip debug information from resulting binaries.

--version

Display version number of appcompile

--verbose

Turn on verbose mode (this can be used for debugging).

See Also

lipkgen (1), depscan (1).

Additional documentation can be found on http://listaller.tenstral.net.

AUTHOR

This manual page was written by Matthias Klumpp .

./Listaller-0.5.8/docs/api/listaller-sections.txt0000664000175000017500000003722012176743546022131 0ustar matthiasmatthias
application ListallerAppItem LISTALLER_TYPE_APP_ITEM listaller_app_item_set_origin_local listaller_app_item_to_string listaller_app_item_set_license_name listaller_app_item_set_license_text listaller_app_item_set_license_from_doap_name listaller_app_item_fast_check listaller_app_item_update_with_appid listaller_app_item_build_pk_package_id listaller_app_item_update_with_desktop_file listaller_app_item_get_raw_cmd listaller_app_item_compare_version_with listaller_app_item_new_blank listaller_app_item_new listaller_app_item_new_from_id listaller_app_item_new_from_desktopfile listaller_app_item_get_idname listaller_app_item_set_idname listaller_app_item_get_full_name listaller_app_item_set_full_name listaller_app_item_get_version listaller_app_item_set_version listaller_app_item_get_summary listaller_app_item_set_summary listaller_app_item_get_description listaller_app_item_set_description listaller_app_item_get_author listaller_app_item_set_author listaller_app_item_get_publisher listaller_app_item_set_publisher listaller_app_item_get_license listaller_app_item_set_license listaller_app_item_get_categories listaller_app_item_set_categories listaller_app_item_get_size_installed listaller_app_item_set_size_installed listaller_app_item_get_desktop_file listaller_app_item_set_desktop_file listaller_app_item_get_state listaller_app_item_set_state listaller_app_item_get_icon_name listaller_app_item_set_icon_name listaller_app_item_get_website listaller_app_item_set_website listaller_app_item_get_install_time listaller_app_item_set_install_time listaller_app_item_get_replaces listaller_app_item_set_replaces listaller_app_item_get_origin listaller_app_item_set_origin listaller_app_item_get_dependencies_str listaller_app_item_set_dependencies_str listaller_app_item_get_appid listaller_app_item_validate_appid ListallerAppItem ListallerAppItemClass listaller_app_state_to_string listaller_app_state_is_all_set listaller_app_state_is_any_set listaller_app_state_set listaller_app_state_unset ListallerAppState ListallerAppLicense listaller_app_license_dup listaller_app_license_free listaller_app_license_copy listaller_app_license_destroy LISTALLER_IS_APP_ITEM LISTALLER_IS_APP_ITEM_CLASS LISTALLER_APP_ITEM LISTALLER_APP_ITEM_CLASS LISTALLER_APP_ITEM_GET_CLASS listaller_app_item_get_type LISTALLER_TYPE_APP_STATE listaller_app_state_get_type LISTALLER_TYPE_APP_LICENSE listaller_app_license_get_type listaller_app_item_construct_blank listaller_app_item_construct_from_id listaller_app_item_construct_from_desktopfile ListallerAppItemPrivate listaller_app_item_construct
updater ListallerUpdater LISTALLER_TYPE_UPDATER listaller_updater_find_updates listaller_updater_apply_updates listaller_updater_apply_updates_all listaller_updater_new listaller_updater_get_settings listaller_updater_set_settings listaller_updater_get_available_updates ListallerUpdater ListallerUpdaterClass LISTALLER_IS_UPDATER LISTALLER_IS_UPDATER_CLASS LISTALLER_UPDATER LISTALLER_UPDATER_CLASS LISTALLER_UPDATER_GET_CLASS listaller_updater_get_type ListallerUpdaterPrivate listaller_updater_construct
utils utils listaller_utils_build_filename
manager ListallerManager LISTALLER_TYPE_MANAGER listaller_manager_filter_applications listaller_manager_find_applications_by_values listaller_manager_get_applications_by_fullname listaller_manager_get_application_by_idname listaller_manager_remove_application listaller_manager_refresh_appitem_data listaller_manager_get_application_filelist listaller_manager_get_app_ld_environment listaller_manager_refresh_repository_cache listaller_manager_prepare_setup_for_app listaller_manager_new listaller_manager_get_settings listaller_manager_set_settings ListallerManager ListallerManagerClass LISTALLER_IS_MANAGER LISTALLER_IS_MANAGER_CLASS LISTALLER_MANAGER LISTALLER_MANAGER_CLASS LISTALLER_MANAGER_GET_CLASS listaller_manager_get_type ListallerManagerPrivate listaller_manager_construct
components ListallerDepItemType LISTALLER_DEP_TYPE_ITEM_TYPE listaller_dep_item_type_get_type
status ListallerErrorItem LISTALLER_TYPE_ERROR_ITEM listaller_error_item_to_string listaller_error_item_new listaller_error_item_get_error listaller_error_item_set_error listaller_error_item_get_details listaller_error_item_set_details ListallerErrorItem ListallerErrorItemClass LISTALLER_TYPE_MESSAGE_ITEM listaller_message_item_to_string listaller_message_item_new listaller_message_item_get_mtype listaller_message_item_set_mtype listaller_message_item_get_details listaller_message_item_set_details ListallerMessageItem ListallerMessageItemClass LISTALLER_TYPE_STATUS_ITEM listaller_status_item_new listaller_status_item_get_status listaller_status_item_set_status listaller_status_item_get_info listaller_status_item_set_info ListallerStatusItem ListallerStatusItemClass LISTALLER_TYPE_PROGRESS_ITEM listaller_progress_item_new listaller_progress_item_get_prog_type listaller_progress_item_set_prog_type listaller_progress_item_get_item_id listaller_progress_item_set_item_id listaller_progress_item_get_value listaller_progress_item_set_value ListallerProgressItem ListallerProgressItemClass LISTALLER_TYPE_UPDATE_ITEM listaller_update_item_new listaller_update_item_get_sw_type listaller_update_item_set_sw_type listaller_update_item_get_sw_old listaller_update_item_set_sw_old listaller_update_item_get_sw_new listaller_update_item_set_sw_new listaller_update_item_get_architecture listaller_update_item_set_architecture listaller_update_item_get_changelog listaller_update_item_set_changelog listaller_update_item_get_completed listaller_update_item_set_completed ListallerUpdateItem ListallerUpdateItemClass listaller_error_enum_to_string ListallerErrorEnum ListallerStatusEnum listaller_message_enum_to_string ListallerMessageEnum ListallerProgressEnum LISTALLER_IS_ERROR_ITEM LISTALLER_IS_ERROR_ITEM_CLASS LISTALLER_ERROR_ITEM LISTALLER_ERROR_ITEM_CLASS LISTALLER_ERROR_ITEM_GET_CLASS listaller_error_item_get_type LISTALLER_IS_MESSAGE_ITEM LISTALLER_IS_MESSAGE_ITEM_CLASS LISTALLER_MESSAGE_ITEM LISTALLER_MESSAGE_ITEM_CLASS LISTALLER_MESSAGE_ITEM_GET_CLASS listaller_message_item_get_type LISTALLER_IS_STATUS_ITEM LISTALLER_IS_STATUS_ITEM_CLASS LISTALLER_STATUS_ITEM LISTALLER_STATUS_ITEM_CLASS LISTALLER_STATUS_ITEM_GET_CLASS listaller_status_item_get_type LISTALLER_IS_PROGRESS_ITEM LISTALLER_IS_PROGRESS_ITEM_CLASS LISTALLER_PROGRESS_ITEM LISTALLER_PROGRESS_ITEM_CLASS LISTALLER_PROGRESS_ITEM_GET_CLASS listaller_progress_item_get_type LISTALLER_IS_UPDATE_ITEM LISTALLER_IS_UPDATE_ITEM_CLASS LISTALLER_UPDATE_ITEM LISTALLER_UPDATE_ITEM_CLASS LISTALLER_UPDATE_ITEM_GET_CLASS listaller_update_item_get_type LISTALLER_TYPE_ERROR_ENUM listaller_error_enum_get_type LISTALLER_TYPE_STATUS_ENUM listaller_status_enum_get_type LISTALLER_TYPE_MESSAGE_ENUM listaller_message_enum_get_type LISTALLER_TYPE_PROGRESS_ENUM listaller_progress_enum_get_type ListallerErrorItemPrivate listaller_error_item_construct ListallerMessageItemPrivate listaller_message_item_construct ListallerStatusItemPrivate listaller_status_item_construct ListallerProgressItemPrivate listaller_progress_item_construct ListallerUpdateItemPrivate listaller_update_item_construct
installer ListallerSetup LISTALLER_TYPE_SETUP listaller_setup_supported_install_modes listaller_setup_set_install_mode listaller_setup_get_install_mode listaller_setup_initialize listaller_setup_get_current_application listaller_setup_kill_installation_process listaller_setup_get_replaced_native_packs listaller_setup_run_installation listaller_setup_get_security_info listaller_setup_new listaller_setup_get_fname listaller_setup_get_settings listaller_setup_get_control ListallerSetup ListallerSetupClass LISTALLER_IS_SETUP LISTALLER_IS_SETUP_CLASS LISTALLER_SETUP LISTALLER_SETUP_CLASS LISTALLER_SETUP_GET_CLASS listaller_setup_get_type ListallerSetupPrivate listaller_setup_construct
security-info ListallerIPKSecurityInfo LISTALLER_IPK_TYPE_SECURITY_INFO listaller_ipk_security_info_get_level listaller_ipk_security_info_get_level_as_sentence listaller_ipk_security_info_get_level_as_string listaller_ipk_security_info_get_signature_status listaller_ipk_security_info_set_signature_status listaller_ipk_security_info_get_signature_trustlevel listaller_ipk_security_info_set_signature_trustlevel listaller_ipk_security_info_get_user_names listaller_ipk_security_info_set_user_names listaller_ipk_security_info_get_key_fpr listaller_ipk_security_info_set_key_fpr listaller_ipk_security_info_get_trust_reason listaller_ipk_security_info_set_trust_reason ListallerIPKSecurityInfo ListallerIPKSecurityInfoClass listaller_security_level_to_string listaller_security_level_from_string ListallerSecurityLevel listaller_sign_status_to_string ListallerSignStatus listaller_sign_trust_to_string ListallerSignTrust LISTALLER_IPK_IS_SECURITY_INFO LISTALLER_IPK_IS_SECURITY_INFO_CLASS LISTALLER_IPK_SECURITY_INFO LISTALLER_IPK_SECURITY_INFO_CLASS LISTALLER_IPK_SECURITY_INFO_GET_CLASS listaller_ipk_security_info_get_type LISTALLER_TYPE_SECURITY_LEVEL listaller_security_level_get_type LISTALLER_TYPE_SIGN_STATUS listaller_sign_status_get_type LISTALLER_TYPE_SIGN_TRUST listaller_sign_trust_get_type ListallerIPKSecurityInfoPrivate ipk_security_info_construct
setup-settings ListallerSetupSettings LISTALLER_TYPE_SETUP_SETTINGS listaller_setup_settings_lock listaller_setup_settings_unlock listaller_setup_settings_database_file listaller_setup_settings_appregister_dir listaller_setup_settings_appdata_dir listaller_setup_settings_depdata_dir listaller_setup_settings_icon_base_dir listaller_setup_settings_icon_size_dir listaller_setup_settings_applications_dir listaller_setup_settings_get_current_mode listaller_setup_settings_set_current_mode listaller_setup_settings_get_locked listaller_setup_settings_get_shared_mode listaller_setup_settings_get_private_mode listaller_setup_settings_get_test_mode ListallerSetupSettings ListallerSetupSettingsClass listaller_ipk_install_mode_is_all_set listaller_ipk_install_mode_is_any_set listaller_ipk_install_mode_set listaller_ipk_install_mode_unset ListallerIPKInstallMode LISTALLER_IS_SETUP_SETTINGS LISTALLER_IS_SETUP_SETTINGS_CLASS LISTALLER_SETUP_SETTINGS LISTALLER_SETUP_SETTINGS_CLASS LISTALLER_SETUP_SETTINGS_GET_CLASS listaller_setup_settings_get_type LISTALLER_IPK_TYPE_INSTALL_MODE listaller_ipk_install_mode_get_type ListallerSetupSettingsPrivate listaller_setup_settings_construct
message-object ListallerMessageObject LISTALLER_TYPE_MESSAGE_OBJECT listaller_message_object_set_error_hint_str listaller_message_object_connect_with_object listaller_message_object_connect_with_object_all ListallerMessageObject ListallerMessageObjectClass ListallerObjConnectFlags LISTALLER_IS_MESSAGE_OBJECT LISTALLER_IS_MESSAGE_OBJECT_CLASS LISTALLER_MESSAGE_OBJECT LISTALLER_MESSAGE_OBJECT_CLASS LISTALLER_MESSAGE_OBJECT_GET_CLASS listaller_message_object_get_type LISTALLER_TYPE_OBJ_CONNECT_FLAGS listaller_obj_connect_flags_get_type ListallerMessageObjectPrivate listaller_message_object_construct
key-manager ListallerKeyManager LISTALLER_TYPE_KEY_MANAGER listaller_key_manager_import_key listaller_key_manager_get_key_info listaller_key_manager_new ListallerKeyManager ListallerKeyManagerClass LISTALLER_IS_KEY_MANAGER LISTALLER_IS_KEY_MANAGER_CLASS LISTALLER_KEY_MANAGER LISTALLER_KEY_MANAGER_CLASS LISTALLER_KEY_MANAGER_GET_CLASS listaller_key_manager_get_type ListallerKeyManagerPrivate listaller_key_manager_construct
logging listaller_set_verbose_mode listaller_get_verbose_mode listaller_set_console_mode listaller_set_clitool_mode listaller_add_log_domain
ipk-changelog ListallerIPKChangelog LISTALLER_IPK_TYPE_CHANGELOG listaller_ipk_changelog_open listaller_ipk_changelog_new ListallerIPKChangelog ListallerIPKChangelogClass LISTALLER_IPK_IS_CHANGELOG LISTALLER_IPK_IS_CHANGELOG_CLASS LISTALLER_IPK_CHANGELOG LISTALLER_IPK_CHANGELOG_CLASS LISTALLER_IPK_CHANGELOG_GET_CLASS listaller_ipk_changelog_get_type ListallerIPKChangelogPrivate ipk_changelog_construct
database-internal listaller_database_status_to_string ListallerDatabaseStatus ListallerDatabaseError LISTALLER_TYPE_DATABASE_STATUS listaller_database_status_get_type listaller_database_error_quark LISTALLER_DATABASE_ERROR
gpgex gpgex
ipk-control ListallerIPKControl LISTALLER_IPK_TYPE_CONTROL listaller_ipk_control_open_doap listaller_ipk_control_open_doap_file listaller_ipk_control_open_packsetting listaller_ipk_control_get_ipk_version listaller_ipk_control_set_ipk_version listaller_ipk_control_get_architectures listaller_ipk_control_set_architectures listaller_ipk_control_get_replaces listaller_ipk_control_set_replaces listaller_ipk_control_set_install_modes listaller_ipk_control_get_install_modes listaller_ipk_control_get_application listaller_ipk_control_set_dependencies listaller_ipk_control_get_dependencies listaller_ipk_control_set_license_text_from_file listaller_ipk_control_set_license_text listaller_ipk_control_get_user_accept_license listaller_ipk_control_set_user_accept_license ListallerIPKControl ListallerIPKControlClass LISTALLER_IPK_TYPE_PACK_CONTROL listaller_ipk_pack_control_open_control listaller_ipk_pack_control_create_new listaller_ipk_pack_control_is_delta_pkg listaller_ipk_pack_control_save_to_dir listaller_ipk_pack_control_get_files listaller_ipk_pack_control_update_installmode_data listaller_ipk_pack_control_new ListallerIPKPackControl ListallerIPKPackControlClass LISTALLER_IPK_TYPE_CONTROL_DIR listaller_ipk_control_dir_open_dir listaller_ipk_control_dir_get_files_rootdir listaller_ipk_control_dir_auto_dependency_search listaller_ipk_control_dir_get_doap_data listaller_ipk_control_dir_save_control listaller_ipk_control_dir_new ListallerIPKControlDir ListallerIPKControlDirClass ListallerIPKControlDataError LISTALLER_IPK_IS_CONTROL LISTALLER_IPK_IS_CONTROL_CLASS LISTALLER_IPK_CONTROL LISTALLER_IPK_CONTROL_CLASS LISTALLER_IPK_CONTROL_GET_CLASS listaller_ipk_control_get_type LISTALLER_IPK_IS_PACK_CONTROL LISTALLER_IPK_IS_PACK_CONTROL_CLASS LISTALLER_IPK_PACK_CONTROL LISTALLER_IPK_PACK_CONTROL_CLASS LISTALLER_IPK_PACK_CONTROL_GET_CLASS listaller_ipk_pack_control_get_type LISTALLER_IPK_IS_CONTROL_DIR LISTALLER_IPK_IS_CONTROL_DIR_CLASS LISTALLER_IPK_CONTROL_DIR LISTALLER_IPK_CONTROL_DIR_CLASS LISTALLER_IPK_CONTROL_DIR_GET_CLASS listaller_ipk_control_dir_get_type listaller_ipk_control_data_error_quark LISTALLER_IPK_CONTROL_DATA_ERROR ListallerIPKControlPrivate ipk_control_construct ListallerIPKPackControlPrivate ipk_pack_control_construct ListallerIPKControlDirPrivate ipk_control_dir_construct
version listaller_get_version_info_str listaller_get_full_version_info_str listaller_compare_versions
config-global listaller_utils_enable_translation
./Listaller-0.5.8/docs/api/listaller-unused.txt0000664000175000017500000000175212176742606021602 0ustar matthiasmatthiasLISTALLER_DOAP_DATA LISTALLER_DOAP_DATA_CLASS LISTALLER_DOAP_DATA_GET_CLASS LISTALLER_IPK_IS_META_FILE LISTALLER_IPK_IS_META_FILE_CLASS LISTALLER_IPK_META_FILE LISTALLER_IPK_META_FILE_CLASS LISTALLER_IPK_META_FILE_GET_CLASS LISTALLER_IPK_TYPE_META_FILE LISTALLER_IS_DOAP_DATA LISTALLER_IS_DOAP_DATA_CLASS LISTALLER_TYPE_DOAP_DATA ListallerDoapData ListallerDoapDataClass ListallerIPKMetaFile ListallerIPKMetaFileClass listaller_doap_data_get_type listaller_ipk_changelog_construct listaller_ipk_control_dir_construct listaller_ipk_meta_file_get_type listaller_ipk_pack_control_construct listaller_add_log_domain(self) listaller_compare_versions(self) listaller_get_full_version_info_str(self) listaller_get_verbose_mode(self) listaller_get_version_info_str(self) listaller_manager_find_applications_by_values(values_length1) listaller_set_clitool_mode(self) listaller_set_console_mode(self) listaller_set_verbose_mode(self) listaller_utils_build_filename(self) listaller_utils_enable_translation(self) ./Listaller-0.5.8/docs/api/listaller-undeclared.txt0000664000175000017500000000152012150512751022362 0ustar matthiasmatthiaslistaller_app_item_set_idname listaller_error_item_set_details listaller_error_item_set_error listaller_ipk_security_info_set_key_fpr listaller_ipk_security_info_set_signature_status listaller_ipk_security_info_set_signature_trustlevel listaller_ipk_security_info_set_trust_reason listaller_ipk_security_info_set_user_names listaller_manager_set_settings listaller_message_item_set_details listaller_message_item_set_mtype listaller_progress_item_set_item_id listaller_progress_item_set_prog_type listaller_progress_item_set_value listaller_setup_settings_set_current_mode listaller_status_item_set_info listaller_status_item_set_status listaller_update_item_set_architecture listaller_update_item_set_changelog listaller_update_item_set_completed listaller_update_item_set_sw_new listaller_update_item_set_sw_old listaller_update_item_set_sw_type ./Listaller-0.5.8/data/0000775000175000017500000000000012176743563014753 5ustar matthiasmatthias./Listaller-0.5.8/data/etc/0000775000175000017500000000000012176743563015526 5ustar matthiasmatthias./Listaller-0.5.8/data/etc/blacklist0000664000175000017500000000244612176743563017427 0ustar matthiasmatthiasListaller - Blacklisted Applications: Konqueror Dolphin Nautilus KSnapshot KRDC KPPP Akonaditray Akonadi Console KNetAttach KSystemLog KUser Krfb Konsole Terminal System Monitor System Log KwikDisk KDiskFree Adept Manager Synaptic Add/Remove... Passwords and Encryption Keys Search and Indexing Tracker Search Tool Character Map Voulme Monitor GNOME Configuration Editor GNOME Obex Server Recording Level Monitor GNOME Character Map GNOME Pilot GNOME System Monitor PulseAudio Manager GNOME Terminal X Clipboard PulseAudio Device Chooser X Refresh PulseAudio Volume Control Install Software SaX2 PulseAudio Volume Meter (Playback) PulseAudio Volume Meter (Capture) X Kill Software Installer kjscmd kbluemon kbtobexclient Package Stats Configure Your Computer Virtual Network Connection NetApplet KJobViewer Software Log Viewer KDE Groupware Wizard Sun Java 6 Web Start Manage Print Jobs Install & Remove Software X Magnifier X Load XTerm Manage Printing System Settings KColorChooser KMouseTool KFloppy KMouth KTimer KAlarm Sweeper KMag kttsmgr KCharSelect KRuler KPackageKit simond ksimond KWrite Screens and Graphics Text Editor About This Computer SELinux Troubleshooter Take Screenshot Disk Management SELinux Management Kvkbd Kdebluetooth4 XScreenSaver Setup Wireshark (as root) Kate Automatic Bug Reporting Tool ./Listaller-0.5.8/data/etc/depscan-ignore.list0000664000175000017500000000022512176743563021320 0ustar matthiasmatthias# Dependencies which should be ignored by depscan Libraries: # OpenGL vendor stuff libnvidia-tls.so.* libnvidia-glcore.so.* Binaries: sh bash ./Listaller-0.5.8/data/etc/Listaller.conf0000664000175000017500000000166312176743563020336 0ustar matthiasmatthias# Only the system administrator should modify this file, ordinary users # should not have to change anything. [General] # The 3rd-party application install-root dir. # Defines the directory where Listaller installs all # shared 3rd-party applications. # # default=/opt UseInstallRoot=/opt [Installer] # Set the minimum trust level required to install an # application. # Possible values: high, medium, low, dangerous # # default=low MinimumTrustLevel=low # Set true if users are allowed to install stuff into # their home directories. # (setting this to 'false' will not prevent manual installations!) # # default=false AllowPrivateInstall=false # Set which resolvers should be active, meaning that # they are used for resolving dependencies. # # The resolver list is comma-separated, the value "All" # enables all solvers. # Available resolvers are: Native,Python,Ruby,Feeds # # default=All UseResolvers=Native,Python,Ruby,Feeds [Manager] ./Listaller-0.5.8/data/etc/CMakeLists.txt0000664000175000017500000000026612176743563020272 0ustar matthiasmatthias# Install standard configuration # changeable config files install(FILES Listaller.conf depscan-ignore.list DESTINATION ${SYSCONF_INSTALL_DIR}/listaller COMPONENT config ) ./Listaller-0.5.8/data/cmake/0000775000175000017500000000000012176743563016033 5ustar matthiasmatthias./Listaller-0.5.8/data/cmake/MacroEnsureVersion.cmake0000664000175000017500000001173512176743563022635 0ustar matthiasmatthias# This file defines the following macros for developers to use in ensuring # that installed software is of the right version: # # MACRO_ENSURE_VERSION - test that a version number is greater than # or equal to some minimum # MACRO_ENSURE_VERSION_RANGE - test that a version number is greater than # or equal to some minimum and less than some # maximum # MACRO_ENSURE_VERSION2 - deprecated, do not use in new code # # MACRO_ENSURE_VERSION # This macro compares version numbers of the form "x.y.z" or "x.y" # MACRO_ENSURE_VERSION( FOO_MIN_VERSION FOO_VERSION_FOUND FOO_VERSION_OK) # will set FOO_VERSION_OK to true if FOO_VERSION_FOUND >= FOO_MIN_VERSION # Leading and trailing text is ok, e.g. # MACRO_ENSURE_VERSION( "2.5.31" "flex 2.5.4a" VERSION_OK) # which means 2.5.31 is required and "flex 2.5.4a" is what was found on the system # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # MACRO_ENSURE_VERSION_RANGE # This macro ensures that a version number of the form # "x.y.z" or "x.y" falls within a range defined by # min_version <= found_version < max_version. # If this expression holds, FOO_VERSION_OK will be set TRUE # # Example: MACRO_ENSURE_VERSION_RANGE3( "0.1.0" ${FOOCODE_VERSION} "0.7.0" FOO_VERSION_OK ) # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # NORMALIZE_VERSION # Helper macro to convert version numbers of the form "x.y.z" # to an integer equal to 10^4 * x + 10^2 * y + z # # This macro will break silently if any of x,y,z are greater than 100. # # Copyright (c) 2006, David Faure, # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. # CHECK_RANGE_INCLUSIVE_LOWER # Helper macro to check whether x <= y < z # # Copyright (c) 2007, Will Stephenson # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. MACRO(NORMALIZE_VERSION _requested_version _normalized_version) STRING(REGEX MATCH "[^0-9]*[0-9]+\\.[0-9]+\\.[0-9]+.*" _threePartMatch "${_requested_version}") if (_threePartMatch) # parse the parts of the version string STRING(REGEX REPLACE "[^0-9]*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" _minor_vers "${_requested_version}") STRING(REGEX REPLACE "[^0-9]*[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" _patch_vers "${_requested_version}") else (_threePartMatch) STRING(REGEX REPLACE "([0-9]+)\\.[0-9]+" "\\1" _major_vers "${_requested_version}") STRING(REGEX REPLACE "[0-9]+\\.([0-9]+)" "\\1" _minor_vers "${_requested_version}") set(_patch_vers "0") endif (_threePartMatch) # compute an overall version number which can be compared at once MATH(EXPR ${_normalized_version} "${_major_vers}*10000 + ${_minor_vers}*100 + ${_patch_vers}") ENDMACRO(NORMALIZE_VERSION) MACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER _lower_limit _value _upper_limit _ok) if (${_value} LESS ${_lower_limit}) set( ${_ok} FALSE ) elseif (${_value} EQUAL ${_lower_limit}) set( ${_ok} TRUE ) elseif (${_value} EQUAL ${_upper_limit}) set( ${_ok} FALSE ) elseif (${_value} GREATER ${_upper_limit}) set( ${_ok} FALSE ) else (${_value} LESS ${_lower_limit}) set( ${_ok} TRUE ) endif (${_value} LESS ${_lower_limit}) ENDMACRO(MACRO_CHECK_RANGE_INCLUSIVE_LOWER) MACRO(MACRO_ENSURE_VERSION requested_version found_version var_too_old) NORMALIZE_VERSION( ${requested_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) if (found_vers_num LESS req_vers_num) set( ${var_too_old} FALSE ) else (found_vers_num LESS req_vers_num) set( ${var_too_old} TRUE ) endif (found_vers_num LESS req_vers_num) ENDMACRO(MACRO_ENSURE_VERSION) MACRO(MACRO_ENSURE_VERSION2 requested_version2 found_version2 var_too_old2) MACRO_ENSURE_VERSION( ${requested_version2} ${found_version2} ${var_too_old2}) ENDMACRO(MACRO_ENSURE_VERSION2) MACRO(MACRO_ENSURE_VERSION_RANGE min_version found_version max_version var_ok) NORMALIZE_VERSION( ${min_version} req_vers_num ) NORMALIZE_VERSION( ${found_version} found_vers_num ) NORMALIZE_VERSION( ${max_version} max_vers_num ) MACRO_CHECK_RANGE_INCLUSIVE_LOWER( ${req_vers_num} ${found_vers_num} ${max_vers_num} ${var_ok}) ENDMACRO(MACRO_ENSURE_VERSION_RANGE) ./Listaller-0.5.8/data/cmake/documentation.cmake0000664000175000017500000000764312176743563021720 0ustar matthiasmatthias# Copyright (C) 2009 Julian Andres Klode . # Licensed under GPLv3 or later. macro(add_debiandoc target sourcefiles installdest) foreach(file ${sourcefiles}) get_filename_component(relfile ${file} NAME) string(REPLACE ".sgml" "" manual ${relfile}) get_filename_component(absolute ${file} ABSOLUTE) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${manual}.html COMMAND debiandoc2html ${absolute} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${file} ) set(commands ${commands} ${CMAKE_CURRENT_BINARY_DIR}/${manual}.html) if (NOT ${installdest} EQUAL "" ) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${manual}.html DESTINATION ${installdest}) endif (NOT ${installdest} EQUAL "" ) endforeach(file ${sourcefiles}) add_custom_target(${target} ALL DEPENDS ${commands}) endmacro(add_debiandoc target sourcefiles installdest) macro(add_po4a type master po target deps) add_custom_command(OUTPUT ${target} COMMAND po4a-translate --keep 0 -f ${type} -m ${master} -p ${po} -l ${target} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${deps} ${master} ${po}) endmacro(add_po4a type master po target deps) # Macro for XML man pages. macro(add_xml_manpages target manpages translations entities) foreach(manpage ${manpages}) string(LENGTH ${manpage} manpage_length) math(EXPR manpage_length ${manpage_length}-1) string(SUBSTRING ${manpage} ${manpage_length} 1 section) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${manpage} COMMAND xmlto man ${CMAKE_CURRENT_SOURCE_DIR}/${manpage}.xml WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${manpage}.xml ) set(commands ${commands} ${CMAKE_CURRENT_BINARY_DIR}/${manpage}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${manpage} DESTINATION share/man/man${section}) # Add the translations for the manpage. foreach(translation ${translations}) set(entities) # transdir = shortcut to the output directory for translations. set(transdir ${CMAKE_CURRENT_BINARY_DIR}/${translation}) foreach(entity ${entities}) add_custom_command(OUTPUT ${transdir}/${entity} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND ${CMAKE_COMMAND} -E make_directory ${transdir} COMMAND ${CMAKE_COMMAND} -E copy ${entity} ${transdir}) set(ent_cmds ${ent_cmds} ${transdir}/${entity}) endforeach(entity ${entities}) add_po4a(docbook ${manpage}.xml po/${translation}.po ${transdir}/${manpage}.xml "${ent_cmds}") add_custom_command(OUTPUT ${transdir}/${manpage} COMMAND xmlto -o ${transdir} man ${transdir}/${manpage}.xml WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${transdir}/${manpage}.xml) set(nls-cmd ${nls-cmd} ${transdir}/${manpage}) install(FILES ${transdir}/${manpage} DESTINATION share/man/${translation}/man${section}) endforeach(translation ${translations}) endforeach(manpage ${manpages}) add_custom_target(${target} ALL DEPENDS ${commands}) # Sort the list of the translations. #list(SORT nls-cmd) add_custom_target(nls-${target} ALL DEPENDS ${nls-cmd}) endmacro(add_xml_manpages manpages) macro(add_manpages target manpages translations) foreach(man ${manpages}) string(LENGTH ${man} manpage_length) math(EXPR manpage_length ${manpage_length}-1) string(SUBSTRING ${man} ${manpage_length} 1 section) install(FILES ${man} DESTINATION share/man/man${section}) if (USE_NLS) foreach(translation ${translations}) set(transdir ${CMAKE_CURRENT_BINARY_DIR}/${translation}) add_po4a(man ${man} po/${translation}.po ${transdir}/${man} "") install(FILES ${transdir}/${man} DESTINATION share/man/${translation}/man${section}) set(files ${files} ${transdir}/${man}) endforeach(translation ${translations}) endif(USE_NLS) endforeach(man ${manpages}) add_custom_target(${target} ALL DEPENDS ${files}) endmacro(add_manpages target manpages translations) ./Listaller-0.5.8/data/cmake/FindPolKit.cmake0000664000175000017500000000533612176743563021047 0ustar matthiasmatthias# - Try to find Polkit # Once done this will define # # POLKIT_FOUND - system has Polkit # POLKIT_INCLUDE_DIRS - Polkit's include directories # POLKIT_AGENT_INCLUDE_DIRS - Polkit-agent's include directories # POLKIT_LIBRARIES - Link this to use polkit's gobject library # POLKIT_AGENT_LIBRARY - Link this to use the agent wrapper in polkit # POLKIT_DEFINITIONS - Compiler switches required for using Polkit # Copyright (c) 2009, Dario Freddi, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. #NOTE: Polkit agent library is disabled! if (POLKIT_INCLUDE_DIR AND POLKIT_LIB) set(POLKIT_FIND_QUIETLY TRUE) endif (POLKIT_INCLUDE_DIR AND POLKIT_LIB) if (NOT WIN32) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls find_package(PkgConfig) pkg_check_modules(PC_POLKIT polkit-gobject-1) #pkg_check_modules(PC_POLKIT_AGENT polkit-agent-1) set(POLKIT_DEFINITIONS ${PC_POLKIT_CFLAGS_OTHER}) endif (NOT WIN32) # We must include glib paths too... which sucks balls find_package(GLIB2) find_path( GLIB_CONFIG_INCLUDE_DIR NAMES glibconfig.h PATH_SUFFIXES glib-2.0/include HINTS ${PC_POLKIT_INCLUDE_DIRS} ) find_path( POLKIT_INCLUDE_DIR NAMES polkit/polkit.h PATH_SUFFIXES polkit-1 HINTS ${PC_POLKIT_INCLUDE_DIRS} ) #find_path( POLKIT_AGENT_INCLUDE_DIR # NAMES polkitagent/polkitagent.h # PATH_SUFFIXES polkit-1 # HINTS ${PC_POLKIT_AGENT_INCLUDE_DIRS} #) #set(POLKIT_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR} ${_POLKIT_INCLUDE_DIR}) #set(POLKIT_AGENT_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR} ${_POLKIT_AGENT_INCLUDE_DIR}) find_library( POLKIT_LIBRARIES NAMES polkit-gobject-1 HINTS ${PC_POLKIT_LIBDIR} ) #find_library( POLKIT_AGENT_LIBRARY # NAMES polkit-agent-1 # HINTS ${PC_POLKIT_AGENT_LIBDIR} #) #set(POLKIT_LIBRARIES ${_POLKIT_LIBRARIES} ${GLIB2_LIBRARIES}) #set(POLKIT_AGENT_LIBRARY ${_POLKIT_AGENT_LIBRARY} ${GLIB2_LIBRARIES}) include(FindPackageHandleStandardArgs) # handle the QUIETLY and REQUIRED arguments and set POLKIT_FOUND to TRUE if # all listed variables are TRUE #find_package_handle_standard_args(Polkit DEFAULT_MSG POLKIT_LIBRARIES POLKIT_AGENT_LIBRARY # POLKIT_INCLUDE_DIR POLKIT_AGENT_INCLUDE_DIR GLIB2_FOUND) find_package_handle_standard_args(Polkit DEFAULT_MSG POLKIT_LIBRARIES POLKIT_INCLUDE_DIR GLIB2_FOUND) mark_as_advanced(POLKIT_INCLUDE_DIRS POLKIT_AGENT_INCLUDE_DIRS POLKIT_LIBRARIES POLKIT_AGENT_LIBRARY GLIB_INCLUDE_DIR) set(POLKIT_POLICY_FILES_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/share/polkit-1/actions) ./Listaller-0.5.8/data/cmake/FindGPGMe.cmake0000664000175000017500000003343212176743563020542 0ustar matthiasmatthias# - Try to find the gpgme library # # Algorithm: # - Windows: # On Windows, there's three gpgme variants: gpgme{,-glib,-qt}. # - The variant used determines the event loop integration possible: # - gpgme: no event loop integration possible, only synchronous operations supported # - gpgme-glib: glib event loop integration possible, only asynchronous operations supported # - gpgme-qt: qt event loop integration possible, only asynchronous operations supported # - GPGME_{VANILLA,GLIB,QT}_{FOUND,LIBRARIES} will be set for each of the above # - GPGME_INCLUDES is the same for all of the above # - GPGME_FOUND is set if any of the above was found # - *nix: # There's also three variants: gpgme{,-pthread,-pth}. # - The variant used determines the multithreaded use possible: # - gpgme: no multithreading support available # - gpgme-pthread: multithreading available using POSIX threads # - gpgme-pth: multithreading available using GNU PTH (cooperative multithreading) # - GPGME_{VANILLA,PTH,PTHREAD}_{FOUND,LIBRARIES} will be set for each of the above # - GPGME_INCLUDES is the same for all of the above # - GPGME_FOUND is set if any of the above was found # # GPGME_LIBRARY_DIR - the directory where the libraries are located # # THIS IS ALMOST A 1:1 COPY OF FindAssuan.cmake in kdepim. # Any changes here likely apply there, too. # # do away with crappy condition repetition on else/endfoo set( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS_gpgme_saved ${CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS} ) set( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true ) #if this is built-in, please replace, if it isn't, export into a MacroToBool.cmake of it's own macro( macro_bool_to_bool FOUND_VAR ) foreach( _current_VAR ${ARGN} ) if ( ${FOUND_VAR} ) set( ${_current_VAR} TRUE ) else() set( ${_current_VAR} FALSE ) endif() endforeach() endmacro() include (MacroEnsureVersion) MACRO(MACRO_BOOL_TO_01 FOUND_VAR ) FOREACH (_current_VAR ${ARGN}) IF(${FOUND_VAR}) SET(${_current_VAR} 1) ELSE(${FOUND_VAR}) SET(${_current_VAR} 0) ENDIF(${FOUND_VAR}) ENDFOREACH(_current_VAR) ENDMACRO(MACRO_BOOL_TO_01) if ( WIN32 ) # On Windows, we don't have a gpgme-config script, so we need to # look for the stuff ourselves: # in cmake, AND and OR have the same precedence, there's no # subexpressions, and expressions are evaluated short-circuit'ed # IOW: CMake if() suxx. # Starting with CMake 2.6.3 you can group if expressions with (), but we # don't require 2.6.3 but 2.6.2, we can't use it. Alex set( _seem_to_have_cached_gpgme false ) if ( GPGME_INCLUDES ) if ( GPGME_VANILLA_LIBRARIES OR GPGME_QT_LIBRARIES OR GPGME_GLIB_LIBRARIES ) set( _seem_to_have_cached_gpgme true ) endif() endif() if ( _seem_to_have_cached_gpgme ) macro_bool_to_bool( GPGME_VANILLA_LIBRARIES GPGME_VANILLA_FOUND ) macro_bool_to_bool( GPGME_GLIB_LIBRARIES GPGME_GLIB_FOUND ) macro_bool_to_bool( GPGME_QT_LIBRARIES GPGME_QT_FOUND ) # this would have been preferred: #set( GPGME_*_FOUND macro_bool_to_bool(GPGME_*_LIBRARIES) ) if ( GPGME_VANILLA_FOUND OR GPGME_GLIB_FOUND OR GPGME_QT_FOUND ) set( GPGME_FOUND true ) else() set( GPGME_FOUND false ) endif() else() # is this needed, of just unreflected cut'n'paste? # this isn't a KDE library, after all! if( NOT KDEWIN_FOUND ) find_package( KDEWIN REQUIRED ) endif() set( GPGME_FOUND false ) set( GPGME_VANILLA_FOUND false ) set( GPGME_GLIB_FOUND false ) set( GPGME_QT_FOUND false ) find_path( GPGME_INCLUDES gpgme.h ${CMAKE_INCLUDE_PATH} ${CMAKE_INSTALL_PREFIX}/include ) if (NOT WINCE) find_library( _gpgme_vanilla_library NAMES gpgme libgpgme gpgme-11 libgpgme-11 PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/lib ) else (NOT WINCE) find_library( _gpgme_vanilla_library NAMES libgpgme-11-msc PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/lib ) endif (NOT WINCE) find_library( _gpgme_glib_library NAMES gpgme-glib libgpgme-glib gpgme-glib-11 libgpgme-glib-11 PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/lib ) find_library( _gpgme_qt_library NAMES gpgme-qt libgpgme-qt gpgme-qt-11 libgpgme-qt-11 PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/lib ) if ( WINCE ) set( _gpg_error_library ) else() find_library( _gpg_error_library NAMES gpg-error libgpg-error gpg-error-0 libgpg-error-0 PATHS ${CMAKE_LIBRARY_PATH} ${CMAKE_INSTALL_PREFIX}/lib ) endif() set( GPGME_INCLUDES ${GPGME_INCLUDES} ) if ( _gpgme_vanilla_library AND ( _gpg_error_library OR WINCE ) ) set( GPGME_VANILLA_LIBRARIES ${_gpgme_vanilla_library} ${_gpg_error_library} ) set( GPGME_VANILLA_FOUND true ) set( GPGME_FOUND true ) endif() if ( _gpgme_glib_library AND ( _gpg_error_library OR WINCE ) ) set( GPGME_GLIB_LIBRARIES ${_gpgme_glib_library} ${_gpg_error_library} ) set( GPGME_GLIB_FOUND true ) set( GPGME_FOUND true ) endif() if ( _gpgme_qt_library AND ( _gpg_error_library OR WINCE ) ) set( GPGME_QT_LIBRARIES ${_gpgme_qt_library} ${_gpg_error_library} ) set( GPGME_QT_FOUND true ) set( GPGME_FOUND true ) endif() endif() # these are Unix-only: set( GPGME_PTHREAD_FOUND false ) set( GPGME_PTH_FOUND false ) set( HAVE_GPGME_PTHREAD 0 ) set( HAVE_GPGME_PTH 0 ) macro_bool_to_01( GPGME_FOUND HAVE_GPGME ) macro_bool_to_01( GPGME_VANILLA_FOUND HAVE_GPGME_VANILLA ) macro_bool_to_01( GPGME_GLIB_FOUND HAVE_GPGME_GLIB ) macro_bool_to_01( GPGME_QT_FOUND HAVE_GPGME_QT ) else() # not WIN32 # On *nix, we have the gpgme-config script which can tell us all we # need to know: # see WIN32 case for an explanation of what this does: set( _seem_to_have_cached_gpgme false ) if ( GPGME_INCLUDES ) if ( GPGME_VANILLA_LIBRARIES OR GPGME_PTHREAD_LIBRARIES OR GPGME_PTH_LIBRARIES ) set( _seem_to_have_cached_gpgme true ) endif() endif() if ( _seem_to_have_cached_gpgme ) macro_bool_to_bool( GPGME_VANILLA_LIBRARIES GPGME_VANILLA_FOUND ) macro_bool_to_bool( GPGME_PTHREAD_LIBRARIES GPGME_PTHREAD_FOUND ) macro_bool_to_bool( GPGME_PTH_LIBRARIES GPGME_PTH_FOUND ) if ( GPGME_VANILLA_FOUND OR GPGME_PTHREAD_FOUND OR GPGME_PTH_FOUND ) set( GPGME_FOUND true ) else() set( GPGME_FOUND false ) endif() else() set( GPGME_FOUND false ) set( GPGME_VANILLA_FOUND false ) set( GPGME_PTHREAD_FOUND false ) set( GPGME_PTH_FOUND false ) find_program( _GPGMECONFIG_EXECUTABLE NAMES gpgme-config ) # if gpgme-config has been found if ( _GPGMECONFIG_EXECUTABLE ) message( STATUS "Found gpgme-config at ${_GPGMECONFIG_EXECUTABLE}" ) exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --version OUTPUT_VARIABLE GPGME_VERSION ) set( _GPGME_MIN_VERSION "1.1.7" ) macro_ensure_version( ${_GPGME_MIN_VERSION} ${GPGME_VERSION} _GPGME_INSTALLED_VERSION_OK ) if ( NOT _GPGME_INSTALLED_VERSION_OK ) message( STATUS "The installed version of gpgme is too old: ${GPGME_VERSION} (required: >= ${_GPGME_MIN_VERSION})" ) else() message( STATUS "Found gpgme v${GPGME_VERSION}, checking for flavours..." ) exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE _gpgme_config_vanilla_libs RETURN_VALUE _ret ) if ( _ret ) set( _gpgme_config_vanilla_libs ) endif() exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --thread=pthread --libs OUTPUT_VARIABLE _gpgme_config_pthread_libs RETURN_VALUE _ret ) if ( _ret ) set( _gpgme_config_pthread_libs ) endif() exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --thread=pth --libs OUTPUT_VARIABLE _gpgme_config_pth_libs RETURN_VALUE _ret ) if ( _ret ) set( _gpgme_config_pth_libs ) endif() # append -lgpg-error to the list of libraries, if necessary foreach ( _flavour vanilla pthread pth ) if ( _gpgme_config_${_flavour}_libs AND NOT _gpgme_config_${_flavour}_libs MATCHES "lgpg-error" ) set( _gpgme_config_${_flavour}_libs "${_gpgme_config_${_flavour}_libs} -lgpg-error" ) endif() endforeach() if ( _gpgme_config_vanilla_libs OR _gpgme_config_pthread_libs OR _gpgme_config_pth_libs ) exec_program( ${_GPGMECONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE _GPGME_CFLAGS ) if ( _GPGME_CFLAGS ) string( REGEX REPLACE "(\r?\n)+$" " " _GPGME_CFLAGS "${_GPGME_CFLAGS}" ) string( REGEX REPLACE " *-I" ";" GPGME_INCLUDES "${_GPGME_CFLAGS}" ) endif() foreach ( _flavour vanilla pthread pth ) if ( _gpgme_config_${_flavour}_libs ) set( _gpgme_library_dirs ) set( _gpgme_library_names ) string( TOUPPER "${_flavour}" _FLAVOUR ) string( REGEX REPLACE " +" ";" _gpgme_config_${_flavour}_libs "${_gpgme_config_${_flavour}_libs}" ) foreach( _flag ${_gpgme_config_${_flavour}_libs} ) if ( "${_flag}" MATCHES "^-L" ) string( REGEX REPLACE "^-L" "" _dir "${_flag}" ) file( TO_CMAKE_PATH "${_dir}" _dir ) set( _gpgme_library_dirs ${_gpgme_library_dirs} "${_dir}" ) elseif( "${_flag}" MATCHES "^-l" ) string( REGEX REPLACE "^-l" "" _name "${_flag}" ) set( _gpgme_library_names ${_gpgme_library_names} "${_name}" ) endif() endforeach() set( GPGME_${_FLAVOUR}_FOUND true ) foreach( _name ${_gpgme_library_names} ) set( _gpgme_${_name}_lib ) # if -L options were given, look only there if ( _gpgme_library_dirs ) find_library( _gpgme_${_name}_lib NAMES ${_name} PATHS ${_gpgme_library_dirs} NO_DEFAULT_PATH ) endif() # if not found there, look in system directories if ( NOT _gpgme_${_name}_lib ) find_library( _gpgme_${_name}_lib NAMES ${_name} ) endif() # if still not found, then the whole flavour isn't found if ( NOT _gpgme_${_name}_lib ) if ( GPGME_${_FLAVOUR}_FOUND ) set( GPGME_${_FLAVOUR}_FOUND false ) set( _not_found_reason "dependant library ${_name} wasn't found" ) endif() endif() set( GPGME_${_FLAVOUR}_LIBRARIES ${GPGME_${_FLAVOUR}_LIBRARIES} "${_gpgme_${_name}_lib}" ) endforeach() #check_c_library_exists_explicit( gpgme gpgme_check_version "${_GPGME_CFLAGS}" "${GPGME_LIBRARIES}" GPGME_FOUND ) if ( GPGME_${_FLAVOUR}_FOUND ) message( STATUS " Found flavour '${_flavour}', checking whether it's usable...yes" ) else() message( STATUS " Found flavour '${_flavour}', checking whether it's usable...no" ) message( STATUS " (${_not_found_reason})" ) endif() endif() endforeach( _flavour ) # ensure that they are cached # This comment above doesn't make sense, the four following lines seem to do nothing. Alex set( GPGME_INCLUDES ${GPGME_INCLUDES} ) set( GPGME_VANILLA_LIBRARIES ${GPGME_VANILLA_LIBRARIES} ) set( GPGME_PTHREAD_LIBRARIES ${GPGME_PTHREAD_LIBRARIES} ) set( GPGME_PTH_LIBRARIES ${GPGME_PTH_LIBRARIES} ) if ( GPGME_VANILLA_FOUND OR GPGME_PTHREAD_FOUND OR GPGME_PTH_FOUND ) set( GPGME_FOUND true ) else() set( GPGME_FOUND false ) endif() endif() endif() endif() endif() # these are Windows-only: set( GPGME_GLIB_FOUND false ) set( GPGME_QT_FOUND false ) set( HAVE_GPGME_GLIB 0 ) set( HAVE_GPGME_QT 0 ) macro_bool_to_01( GPGME_FOUND HAVE_GPGME ) macro_bool_to_01( GPGME_VANILLA_FOUND HAVE_GPGME_VANILLA ) macro_bool_to_01( GPGME_PTHREAD_FOUND HAVE_GPGME_PTHREAD ) macro_bool_to_01( GPGME_PTH_FOUND HAVE_GPGME_PTH ) endif() # WIN32 | Unix set( _gpgme_flavours "" ) if ( GPGME_VANILLA_FOUND ) set( _gpgme_flavours "${_gpgme_flavours} vanilla" ) endif() if ( GPGME_GLIB_FOUND ) set( _gpgme_flavours "${_gpgme_flavours} Glib" ) endif() if ( GPGME_QT_FOUND ) set( _gpgme_flavours "${_gpgme_flavours} Qt" ) endif() if ( GPGME_PTHREAD_FOUND ) set( _gpgme_flavours "${_gpgme_flavours} pthread" ) endif() if ( GPGME_PTH_FOUND ) set( _gpgme_flavours "${_gpgme_flavours} pth" ) endif() # determine the library in one of the found flavours, can be reused e.g. by FindQgpgme.cmake, Alex foreach(_currentFlavour vanilla glib qt pth pthread) if(NOT GPGME_LIBRARY_DIR) get_filename_component(GPGME_LIBRARY_DIR "${_gpgme_${_currentFlavour}_lib}" PATH) endif() endforeach() if ( NOT Gpgme_FIND_QUIETLY ) if ( GPGME_FOUND ) message( STATUS "Usable gpgme flavours found: ${_gpgme_flavours}" ) else() message( STATUS "No usable gpgme flavours found." ) endif() macro_bool_to_bool( Gpgme_FIND_REQUIRED _req ) if ( WIN32 ) set( _gpgme_homepage "http://www.gpg4win.org" ) else() set( _gpgme_homepage "http://www.gnupg.org/related_software/gpgme" ) endif() else() if ( Gpgme_FIND_REQUIRED AND NOT GPGME_FOUND ) message( FATAL_ERROR "Did not find GPGME" ) endif() endif() set( CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS_gpgme_saved ) ./Listaller-0.5.8/data/cmake/FindSQLite3.cmake0000664000175000017500000000255112176743563021065 0ustar matthiasmatthias# - Try to find Sqlite # Once done this will define # # SQLITE_FOUND - system has Sqlite # SQLITE_INCLUDE_DIR - the Sqlite include directory # SQLITE_LIBRARIES - Link these to use Sqlite # SQLITE_DEFINITIONS - Compiler switches required for using Sqlite # # Copyright (c) 2008, Gilles Caulier, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if ( SQLITE_INCLUDE_DIR AND SQLITE_LIBRARIES ) # in cache already SET(Sqlite_FIND_QUIETLY TRUE) endif ( SQLITE_INCLUDE_DIR AND SQLITE_LIBRARIES ) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls if( NOT WIN32 ) find_package(PkgConfig) pkg_check_modules(PC_SQLITE QUIET sqlite3) set(SQLITE_DEFINITIONS ${PC_SQLITE_CFLAGS_OTHER}) endif( NOT WIN32 ) FIND_PATH(SQLITE_INCLUDE_DIR NAMES sqlite3.h PATHS ${PC_SQLITE_INCLUDEDIR} ${PC_SQLITE_INCLUDE_DIRS} ) FIND_LIBRARY(SQLITE_LIBRARIES NAMES sqlite3 PATHS ${PC_SQLITE_LIBDIR} ${PC_SQLITE_LIBRARY_DIRS} ) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Sqlite DEFAULT_MSG SQLITE_INCLUDE_DIR SQLITE_LIBRARIES ) # show the SQLITE_INCLUDE_DIR and SQLITE_LIBRARIES variables only in the advanced view MARK_AS_ADVANCED(SQLITE_INCLUDE_DIR SQLITE_LIBRARIES ) ./Listaller-0.5.8/data/cmake/FindDBus.cmake0000664000175000017500000000420312176743563020472 0ustar matthiasmatthias# - Try to find the low-level D-Bus library # Once done this will define # # DBUS_FOUND - system has D-Bus # DBUS_INCLUDE_DIR - the D-Bus include directory # DBUS_ARCH_INCLUDE_DIR - the D-Bus architecture-specific include directory # DBUS_LIBRARIES - the libraries needed to use D-Bus # Copyright (c) 2008, Kevin Kofler, # modeled after FindLibArt.cmake: # Copyright (c) 2006, Alexander Neundorf, # # Redistribution and use is allowed according to the terms of the BSD license. # For details see the accompanying COPYING-CMAKE-SCRIPTS file. if (DBUS_INCLUDE_DIR AND DBUS_ARCH_INCLUDE_DIR AND DBUS_LIBRARIES) # in cache already SET(DBUS_FOUND TRUE) else (DBUS_INCLUDE_DIR AND DBUS_ARCH_INCLUDE_DIR AND DBUS_LIBRARIES) IF (NOT WIN32) FIND_PACKAGE(PkgConfig) IF (PKG_CONFIG_FOUND) # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls pkg_check_modules(_DBUS_PC QUIET dbus-1) ENDIF (PKG_CONFIG_FOUND) ENDIF (NOT WIN32) FIND_PATH(DBUS_INCLUDE_DIR dbus/dbus.h ${_DBUS_PC_INCLUDE_DIRS} /usr/include /usr/include/dbus-1.0 /usr/local/include ) FIND_PATH(DBUS_ARCH_INCLUDE_DIR dbus/dbus-arch-deps.h ${_DBUS_PC_INCLUDE_DIRS} /usr/lib${LIB_SUFFIX}/include /usr/lib${LIB_SUFFIX}/dbus-1.0/include /usr/lib64/include /usr/lib64/dbus-1.0/include /usr/lib/include /usr/lib/dbus-1.0/include ) FIND_LIBRARY(DBUS_LIBRARIES NAMES dbus-1 dbus PATHS ${_DBUS_PC_LIBDIR} ) if (DBUS_INCLUDE_DIR AND DBUS_ARCH_INCLUDE_DIR AND DBUS_LIBRARIES) set(DBUS_FOUND TRUE) endif (DBUS_INCLUDE_DIR AND DBUS_ARCH_INCLUDE_DIR AND DBUS_LIBRARIES) if (DBUS_FOUND) if (NOT DBus_FIND_QUIETLY) message(STATUS "Found D-Bus: ${DBUS_LIBRARIES}") endif (NOT DBus_FIND_QUIETLY) else (DBUS_FOUND) if (DBus_FIND_REQUIRED) message(FATAL_ERROR "Could NOT find D-Bus") endif (DBus_FIND_REQUIRED) endif (DBUS_FOUND) MARK_AS_ADVANCED(DBUS_INCLUDE_DIR DBUS_ARCH_INCLUDE_DIR DBUS_LIBRARIES) endif (DBUS_INCLUDE_DIR AND DBUS_ARCH_INCLUDE_DIR AND DBUS_LIBRARIES) ./Listaller-0.5.8/data/cmake/vala/0000775000175000017500000000000012176743563016756 5ustar matthiasmatthias./Listaller-0.5.8/data/cmake/vala/ParseArguments.cmake0000664000175000017500000000232012176743563022715 0ustar matthiasmatthias## # This is a helper Macro to parse optional arguments in Macros/Functions # It has been taken from the public CMake wiki. # See http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and # licensing. ## macro(parse_arguments prefix arg_names option_names) set(DEFAULT_ARGS) foreach(arg_name ${arg_names}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${option_names}) set(${prefix}_${option} FALSE) endforeach(option) set(current_arg_name DEFAULT_ARGS) set(current_arg_list) foreach(arg ${ARGN}) set(larg_names ${arg_names}) list(FIND larg_names "${arg}" is_arg_name) if(is_arg_name GREATER -1) set(${prefix}_${current_arg_name} ${current_arg_list}) set(current_arg_name ${arg}) set(current_arg_list) else(is_arg_name GREATER -1) set(loption_names ${option_names}) list(FIND loption_names "${arg}" is_option) if(is_option GREATER -1) set(${prefix}_${arg} TRUE) else(is_option GREATER -1) set(current_arg_list ${current_arg_list} ${arg}) endif(is_option GREATER -1) endif(is_arg_name GREATER -1) endforeach(arg) set(${prefix}_${current_arg_name} ${current_arg_list}) endmacro(parse_arguments) ./Listaller-0.5.8/data/cmake/vala/UseVala.cmake0000664000175000017500000004232712176743563021330 0ustar matthiasmatthias#- Use module for Vala # Provides functions to compile Vala and Genie sources. It is assumed that # FindVala.cmake has already been loaded. Refer to FindVala.cmake for # information on how to use Vala in your CMake project. #============================================================================= # Copyright 2009-2010 Michael Wild, Kitware Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) include(ParseArguments) macro(ensure_vala_version version) parse_arguments(ARGS "" "MINIMUM;MAXIMUM;EXACT" ${ARGN}) set(compare_message "") set(error_message "") if(ARGS_MINIMUM) set(compare_message "a minimum ") set(error_message "or greater ") elseif(ARGS_MAXIMUM) set(compare_message "a maximum ") set(error_message "or less ") endif(ARGS_MINIMUM) message(STATUS "checking for ${compare_message}Vala version of ${version}" ) unset(version_accepted) # MINIMUM is the default if no option is specified if(ARGS_EXACT) if(${VALA_VERSION} VERSION_EQUAL ${version} ) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_EQUAL ${version}) elseif(ARGS_MAXIMUM) if(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_LESS ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) else(ARGS_MAXIMUM) if(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) set(version_accepted TRUE) endif(${VALA_VERSION} VERSION_GREATER ${version} OR ${VALA_VERSION} VERSION_EQUAL ${version}) endif(ARGS_EXACT) if (NOT version_accepted) message(FATAL_ERROR "Vala version ${version} ${error_message}is required." ) endif(NOT version_accepted) endmacro(ensure_vala_version) # target properties define_property(TARGET PROPERTY PUBLIC_VAPI_FILE BRIEF_DOCS ".vapi file generated by either GENERATE_VAPI or LIBRARY option." FULL_DOCS "If a Vala target is created with GENERATE_VAPI or the LIBRARY " "option, the location of the generated public .vapi file is stored in this " "property.") define_property(TARGET PROPERTY INTERNAL_VAPI_FILE BRIEF_DOCS ".vapi file generated by the GENERATE_INTERNAL_VAPI option." FULL_DOCS "If a Vala target is created with GENERATE_INTERNAL_VAPI option, " "the location of the generated internal .vapi file is stored in this " "property.") define_property(TARGET PROPERTY VAPI_FILES BRIEF_DOCS ".vapi files required to link against this library." FULL_DOCS "Names the .vapi file describing the C GLib/GObject interface " "defined by a Vala library in the Vala language such that it can be used " "by other Vala code and all other .vapi files this library depends on.") define_property(TARGET PROPERTY VALA_PACKAGE_DEPENDENCIES BRIEF_DOCS "Dependencies from Vala targets used with PACKAGES" FULL_DOCS "Target names of Vala libraries that have been passed using the " "PACKAGES option of vala_precompile, vala_add_executable or " "vala_add_library on which this target depends. This property is " "inherited by other targets that list this target in their " "PACKAGES option.") define_property(TARGET PROPERTY VALA_C_SOURCES BRIEF_DOCS "The generated C-sources" FULL_DOCS "The functions vala_add_executable and vala_add_library store in " "this property the paths of the generated C-sources as returned by " "vala_precompile.") # include directories include_directories(${VALA_INCLUDE_DIRS}) # compiler flags set(VALA_COMPILE_FLAGS "" CACHE STRING "Flags used by the Vala compiler") set(VALA_COMPILE_FLAGS_DEBUG "-g" CACHE STRING "Flags used by the Vala compiler during debug builds") set(VALA_COMPILE_FLAGS_MINSIZEREL "" CACHE STRING "Flags used by the Vala compiler during release minsize builds") set(VALA_COMPILE_FLAGS_RELEASE "" CACHE STRING "Flags used by the Vala compiler during release builds") set(VALA_COMPILE_FLAGS_RELWITHDEBINFO "-g" CACHE STRING "Flags used by the Vala compiler during release with Debug Info builds") mark_as_advanced(VALA_COMPILE_FLAGS VALA_COMPILE_FLAGS_DEBUG VALA_COMPILE_FLAGS_MINSIZEREL VALA_COMPILE_FLAGS_RELEASE VALA_COMPILE_FLAGS_RELWITHDEBINFO) function(vala_precompile target outvar) set(in_files) set(out_files) set(result) set(vala_pkg_opts) set(depends) set(depends_vapis) set(vapi_arguments) set(header_arguments) set(valid_args PACKAGES LIBRARY COMPILE_FLAGS VAPI_DIRS GENERATE_HEADER GENERATE_INTERNAL_HEADER GENERATE_VAPI GENERATE_INTERNAL_VAPI CUSTOM_VAPIS BASE_DIR OUTPUT_DIR COMMENT ) _vala_parse_arguments(ARGS "${valid_args}" "" ${ARGN}) # deal with PACKAGES foreach(pkg ${ARGS_PACKAGES}) # if it is a target, the user wants us to do things automagically if(TARGET "${pkg}") # add the target and its own dependencies to the list depends list(APPEND depends ${pkg}) get_target_property(pkg_depends ${pkg} VALA_PACKAGE_DEPENDENCIES) if(pkg_depends) list(APPEND depends ${pkg_depends}) endif() else() # otherwise just put --pkg list(APPEND vala_pkg_opts "--pkg=${pkg}") endif() endforeach() # get the vapis of the dependencies foreach(d ${depends}) get_target_property(vapi_file ${d} VAPI_FILES) if(vapi_file) list(APPEND depends_vapis "${vapi_file}") endif() endforeach() # deal with OUTPUT_DIR (make it absolute if its not) and ensure it exists if(NOT ARGS_OUTPUT_DIR) set(${ARGS_OUTPUT_DIR} "${CMAKE_CURRENT_BINARY_DIR}") endif() if(NOT IS_ABSOLUTE "${ARGS_OUTPUT_DIR}") set(ARGS_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARGS_OUTPUT_DIR}") endif() if(NOT IS_DIRECTORY "${ARGS_OUTPUT_DIR}") file(MAKE_DIRECTORY "${ARGS_OUTPUT_DIR}") endif() # deal with LIBRARY. if GENERATE_VAPI is not specified, add it here if(ARGS_LIBRARY) list(APPEND VALA_COMPILE_FLAGS "--library=${ARGS_LIBRARY}") if(NOT ARGS_GENERATE_VAPI) set(ARGS_GENERATE_VAPI "${ARGS_LIBRARY}.vapi") endif() endif() # deal with CUSTOM_VAPIS. ensure every vapi shows up only once set(vapi_files ${ARGS_CUSTOM_VAPIS} ${depends_vapis}) if(vapi_files) list(REMOVE_DUPLICATES vapi_files) endif() # deal with COMPILE_FLAGS if(ARGS_COMPILE_FLAGS) list(APPEND VALA_COMPILE_FLAGS "${ARGS_COMPILE_FLAGS}") endif() # deal with VAPI_DIRS if(ARGS_VAPI_DIRS) set(VALA_VAPI_DIRS "${ARGS_VAPI_DIRS}") endif() set(vala_vapidir_opts) foreach(vapidir ${VALA_VAPI_DIRS}) list(APPEND vala_vapidir_opts "--vapidir=${vapidir}") endforeach() # deal with BASE_DIR and make it absolute if(NOT ARGS_BASE_DIR) set(ARGS_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}") endif() if(NOT IS_ABSOLUTE "${ARGS_BASE_DIR}") set(ARGS_BASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${ARGS_BASE_DIR}") endif() # treat source files foreach(src ${ARGS_DEFAULT_ARGS}) if(NOT IS_ABSOLUTE "${src}") get_filename_component(src "${src}" ABSOLUTE) endif() list(APPEND in_files "${src}") file(RELATIVE_PATH out_file "${ARGS_BASE_DIR}" "${src}") string(REGEX REPLACE "\\.(vala|gs)$" ".c" out_file "${ARGS_OUTPUT_DIR}/${CMAKE_CFG_INTDIR}/${out_file}") # remove back-references get_filename_component(out_file "${out_file}" ABSOLUTE) list(APPEND out_files "${out_file}") list(APPEND result "${out_file}") endforeach() # deal with GENERATE_INTERNAL_VAPI (make absolute if necessary and create # destination directory) if(ARGS_GENERATE_INTERNAL_VAPI) # Header and internal header is needed to generate internal vapi if (NOT ARGS_GENERATE_HEADER) set(ARGS_GENERATE_HEADER ${ARGS_GENERATE_VAPI}) endif() if (NOT ARGS_GENERATE_INTERNAL_HEADER) set(ARGS_GENERATE_INTERNAL_HEADER ${ARGS_GENERATE_HEADER}_internal) endif() if(NOT IS_ABSOLUTE "${ARGS_GENERATE_INTERNAL_VAPI}") set(ARGS_GENERATE_INTERNAL_VAPI "${ARGS_OUTPUT_DIR}/${ARGS_GENERATE_INTERNAL_VAPI}") endif() get_filename_component(_genvapidir "${ARGS_GENERATE_INTERNAL_VAPI}" PATH) list(APPEND out_files "${ARGS_GENERATE_INTERNAL_VAPI}") set(vapi_arguments "--internal-vapi=${ARGS_GENERATE_INTERNAL_VAPI}") endif() # the same for GENERATE_VAPI if(ARGS_GENERATE_VAPI) if(NOT IS_ABSOLUTE "${ARGS_GENERATE_VAPI}") set(ARGS_GENERATE_VAPI "${ARGS_OUTPUT_DIR}/${ARGS_GENERATE_VAPI}") endif() list(APPEND out_files "${ARGS_GENERATE_VAPI}") set(vapi_arguments "--vapi=${ARGS_GENERATE_VAPI}") endif() # deal with GENERATE_HEADER, making absolute and creating output dir if(ARGS_GENERATE_HEADER) if(NOT IS_ABSOLUTE "${ARGS_GENERATE_HEADER}") set(ARGS_GENERATE_HEADER "${ARGS_OUTPUT_DIR}/${ARGS_GENERATE_HEADER}") endif() list(APPEND out_files "${ARGS_GENERATE_HEADER}") list(APPEND header_arguments "--header=${ARGS_GENERATE_HEADER}") list(APPEND result "${ARGS_GENERATE_HEADER}") endif() # the same for GENERATE_INTERNAL_HEADER if(ARGS_GENERATE_INTERNAL_HEADER) if(NOT IS_ABSOLUTE "${ARGS_GENERATE_INTERNAL_HEADER}") set(ARGS_GENERATE_INTERNAL_HEADER "${ARGS_OUTPUT_DIR}/${CMAKE_CFG_INTDIR}/${ARGS_GENERATE_INTERNAL_HEADER}") endif() list(APPEND out_files "${ARGS_GENERATE_INTERNAL_HEADER}") list(APPEND header_arguments "--internal-header=${ARGS_GENERATE_INTERNAL_HEADER}") list(APPEND result "${ARGS_GENERATE_INTERNAL_HEADER}") endif() # allow override of COMMENT if(NOT ARGS_COMMENT) set(ARGS_COMMENT "Precompiling Vala target ${target}") endif() # create a .cmake file to drive the precompiling # (sadly, this is required for multi-configuration IDE's to support # VALA_COMPILE_FLAGS_ flags) set(driver_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${target}.dir/precompile.cmake") if(CMAKE_CONFIGURATION_TYPES) set(config_types ${CMAKE_CONFIGURATION_TYPES}) else() set(config_types Debug Release RelWithDebInfo MinSizeRel ${CMAKE_BUILD_TYPE}) list(REMOVE_DUPLICATES config_types) endif() set(vala_config_flags) foreach(c IN LISTS config_types) string(TOUPPER ${c} cc) set(v VALA_COMPILE_FLAGS_${cc}) set(vala_config_flags "${vala_config_flags}set(${v} \"${${v}}\")\n") endforeach() set(command "\${VALA_COMPILER}" -C ${header_arguments} ${vapi_arguments} -b "${ARGS_BASE_DIR}" -d "${ARGS_OUTPUT_DIR}/\${CMAKE_CFG_INTDIR}" ${vala_vapidir_opts} ${vala_pkg_opts} @VALA_COMPILE_FLAGS@ ${in_files} ${vapi_files} ) configure_file("${VALA_CMAKE_DIR}/ValaDriver.cmake.in" "${driver_file}" @ONLY) # create the actual command to precompile (don't list out_files in the OUTPUT # but use a stamp file instead, because valac only updates changed files) set(stamp_file "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${target}.dir/precompile.stamp") if(NOT CMAKE_CFG_INTDIR STREQUAL .) set(stamp_file "${stamp_file}.${CMAKE_CFG_INTDIR}") endif() if(CMAKE_GENERATOR MATCHES "Makefiles$") set(verbose "$(VERBOSE)") else() set(verbose 1) endif() add_custom_command(OUTPUT ${stamp_file} COMMAND "${CMAKE_COMMAND}" -DVALA_COMPILER:FILEPATH=${VALA_COMPILER} -DCMAKE_CFG_INTDIR:STRING=${CMAKE_CFG_INTDIR} -DVERBOSE:STRING=${verbose} -P "${driver_file}" COMMAND "${CMAKE_COMMAND}" -E touch "${stamp_file}" DEPENDS "${VALA_COMPILER}" ${in_files} ${ARGS_CUSTOM_VAPIS} "${driver_file}" WORKING_DIRECTORY "${ARGS_OUTPUT_DIR}" COMMENT "${ARGS_COMMENT}" VERBATIM ) # mark the products as GENERATED and for automatic cleaning set_source_files_properties(${out_files} PROPERTIES GENERATED TRUE) set_property(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES ${out_files}) # add custom target to depend on add_custom_target(${target} DEPENDS ${stamp_file}) # have it depend on the targets in PACKAGES and their dependencies if(depends) add_dependencies(${target} ${depends}) endif() # set our own dependencies property set_property(TARGET ${target} APPEND PROPERTY VALA_PACKAGE_DEPENDENCIES ${depends}) # add the internal vapi to the list of vapis this library requires (if it is one) if(ARGS_GENERATE_INTERNAL_VAPI) list(APPEND vapi_files "${ARGS_GENERATE_INTERNAL_VAPI}") elseif(ARGS_GENERATE_VAPI) # otherwise use the public vapi list(APPEND vapi_files "${ARGS_GENERATE_VAPI}") endif() # set the properties describing this Vala target set_target_properties(${target} PROPERTIES VAPI_FILES "${vapi_files}" PUBLIC_VAPI_FILE "${ARGS_GENERATE_VAPI}" INTERNAL_VAPI_FILE "${ARGS_GENERATE_INTERNAL_VAPI}" ) # propagate generated sources and headers to caller scope set(${outvar} "${result}" PARENT_SCOPE) endfunction() function(vala_add_executable name) set(valid_args PACKAGES VAPI_DIRS CUSTOM_VAPIS BASE_DIR COMPILE_FLAGS OUTPUT_DIR COMMENT) _vala_parse_arguments(ARGS "${valid_args}" "" ${ARGN}) # repack the arguments set(ARGS) foreach(v ${valid_args}) if(ARGS_${v}) list(APPEND ARGS ${v} "${ARGS_${v}}") endif() endforeach() # precompile vala_precompile(${name}_precompile C_SOURCES ${ARGS_DEFAULT_ARGS} ${ARGS}) # add the executable target add_executable(${name} ${C_SOURCES}) # declare the dependency and inherit the custom properties vala_add_dependencies(${name} ${name}_precompile) # set the VALA_C_SOURCES property set_target_properties(${name} PROPERTIES VALA_C_SOURCES "${C_SOURCES}") # link against VALA_LIBRARIES target_link_libraries(${name} ${VALA_LIBRARIES}) endfunction() function(vala_add_library name type) set(valid_args LIBRARY PACKAGES VAPI_DIRS CUSTOM_VAPIS GENERATE_VAPI GENERATE_HEADER GENERATE_INTERNAL_HEADER BASE_DIR COMPILE_FLAGS OUTPUT_DIR COMMENT) _vala_parse_arguments(ARGS "${valid_args}" "" ${ARGN}) # repack the arguments set(ARGS) foreach(v ${valid_args}) if(ARGS_${v}) list(APPEND ARGS ${v} "${ARGS_${v}}") endif() endforeach() # deal with type being a source file if(NOT type MATCHES "^(STATIC|SHARED|MODULE)") list(INSERT ARGS_DEFAULT_ARGS 0 "${type}") set(type) endif() # deal with LIBRARY set(library_args) if(NOT ARGS_LIBRARY) set(library_args LIBRARY ${name}) endif() # precompile vala_precompile(${name}_precompile C_SOURCES ${ARGS_DEFAULT_ARGS} ${library_args} ${ARGS}) # add the library target add_library(${name} ${type} ${C_SOURCES}) # declare dependency and inherit custom properties vala_add_dependencies(${name} ${name}_precompile) # inherit library specific properties get_target_property(vapi ${name} PUBLIC_VAPI) get_target_property(ivapi ${name} INTERNAL_VAPI) set_target_properties(${name} PROPERTIES VALA_C_SOURCES "${C_SOURCES}" PUBLIC_VAPI "${vapi}" INTERNAL_VAPI "${ivapi}" ) # link against VALA_LIBRARIES target_link_libraries(${name} ${VALA_LIBRARIES}) endfunction() function(vala_add_dependencies target) # inherit custom properties set(vapi_files) set(pkg_deps) foreach(dep ${ARGN}) if(TARGET ${dep}) get_property(is_vala_target TARGET ${dep} PROPERTY VAPI_FILES SET) if(is_vala_target) get_target_property(v ${dep} VAPI_FILES) get_target_property(p ${dep} VALA_PACKAGE_DEPENDENCIES) list(APPEND vapi_files ${v}) list(APPEND pkd_deps ${p}) endif() else() message(SEND_ERROR "Dependency ${dep} is not a top-level target") endif() endforeach() set_property(TARGET ${target} APPEND PROPERTY VAPI_FILES ${vapi_files}) set_property(TARGET ${target} APPEND PROPERTY VALA_PACKAGE_DEPENDENCIES ${pkg_deps}) add_dependencies(${target} ${ARGN}) endfunction() ## # This is a helper Macro to parse optional arguments in Macros/Functions. It # has been taken from the public CMake wiki. See # http://www.cmake.org/Wiki/CMakeMacroParseArguments for documentation and # licensing. ## function(_vala_parse_arguments prefix arg_names option_names) # initialize set(DEFAULT_ARGS) foreach(arg_name ${arg_names}) set(result_${arg_name}) endforeach() foreach(option ${option_names}) set(result_${option} FALSE) endforeach() # parse set(current_arg_name DEFAULT_ARGS) set(current_arg_list) foreach(arg ${ARGN}) set(larg_names ${arg_names}) list(FIND larg_names "${arg}" is_arg_name) if(is_arg_name GREATER -1) set(result_${current_arg_name} ${current_arg_list}) set(current_arg_name ${arg}) set(current_arg_list) else(is_arg_name GREATER -1) set(loption_names ${option_names}) list(FIND loption_names "${arg}" is_option) if(is_option GREATER -1) set(result_${arg} TRUE) else(is_option GREATER -1) set(current_arg_list ${current_arg_list} ${arg}) endif() endif() endforeach() set(result_${current_arg_name} ${current_arg_list}) # propagate to caller scope foreach(arg_name DEFAULT_ARGS ${arg_names}) set(${prefix}_${arg_name} ${result_${arg_name}} PARENT_SCOPE) endforeach() foreach(option ${option_names}) set(${prefix}_${option} ${result_${option}} PARENT_SCOPE) endforeach() endfunction() ./Listaller-0.5.8/data/cmake/vala/FindVala.cmake0000664000175000017500000003123012176743563021443 0ustar matthiasmatthias# - Find and use the Vala compiler. # # This module locates the Vala compiler and related tools and provides a set of # functions which can be used to compile Vala (.vala) and Genie (.gs) sources. # Typical usage could be # find_package(Vala REQUIRED) # include("${VALA_USE_FILE}") # include_directories(${VALA_INCLUDE_DIRS}) # vala_add_executable(myexe source.vala) # This first line finds the Vala compiler installation and the second line # includes utility functions. The last line creates the executable myexe from # source.vala. Similarly, the function vala_add_library is available to create # libraries. For more sophisticated needs the function vala_precompile # generates C sources and headers from a given list of Vala and Genie sources # which then can be further processed using other CMake facilities. If you do # so, please note that you should use vala_add_dependencies instead of the # plain add_dependencies to create the dependencies in order for the # specialized target properties and dependencies of the Vala targets to be # properly propagated. # # The module provides the optional component "Development" which also finds the # Vala development header and library. This component is only required if you # want to use the Vala compiler infrastructure inside your program. # # vala_precompile( ... # [LIBRARY ] # [PACKAGES ...] # [VAPI_DIRS ...] # [CUSTOM_VAPIS ...] # [GENERATE_VAPI ] # [GENERATE_INTERNAL_VAPI ] # [GENERATE_HEADER ] # [GENERATE_INTERNAL_HEADER ] # [BASE_DIR ] # [COMPILE_FLAGS