git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kio-apt@1088432 283d02a7-25f6-0310-bc7c-ecb5cbfe19dav3.5.13-sru
commit
ea4406b477
@ -0,0 +1,15 @@
|
||||
Sylvain Joyeux <sylvain.joyeux@m4x.org>
|
||||
|
||||
Willy De la Court <wdl@linux-lovers.be>
|
||||
Search form and minor improvements
|
||||
Spec file for building RPMs
|
||||
Jalub Stachowski
|
||||
Polish translation and minor improvements
|
||||
David Maciejak
|
||||
RPM support
|
||||
Emmanuel Bouthenot <kolter@openics.org>
|
||||
Inclusion of kio-apt in Debian
|
||||
Daniel Nylander <info@danielnylander.se>
|
||||
Swedish translation
|
||||
|
||||
|
@ -0,0 +1,7 @@
|
||||
== Version 0.13.2
|
||||
* included a patch to make links in description field clickable
|
||||
patch from Sergey Saukh <thelich@yandex.ru>
|
||||
* include AMD64 in the list of architectures
|
||||
patch taken from the Debian package
|
||||
* included Swedish translation
|
||||
from Daniel Nylander <info@danielnylander.se>
|
@ -0,0 +1,7 @@
|
||||
0.1 to 0.2
|
||||
Added the policy action
|
||||
Added the policy on top of show. If somebody finds
|
||||
that annoying, may add a config option
|
||||
Fixed the css, mostly the bogus margin-top on
|
||||
the header table
|
||||
Fixed various bugs
|
@ -0,0 +1,234 @@
|
||||
# Doxyfile 1.3.3-Gideon
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
# Project related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
PROJECT_NAME = deb.kdevelop
|
||||
PROJECT_NUMBER = 0.1
|
||||
OUTPUT_DIRECTORY =
|
||||
OUTPUT_LANGUAGE = English
|
||||
USE_WINDOWS_ENCODING = NO
|
||||
BRIEF_MEMBER_DESC = YES
|
||||
REPEAT_BRIEF = YES
|
||||
ALWAYS_DETAILED_SEC = NO
|
||||
INLINE_INHERITED_MEMB = NO
|
||||
FULL_PATH_NAMES = NO
|
||||
STRIP_FROM_PATH =
|
||||
SHORT_NAMES = NO
|
||||
JAVADOC_AUTOBRIEF = NO
|
||||
MULTILINE_CPP_IS_BRIEF = NO
|
||||
DETAILS_AT_TOP = NO
|
||||
INHERIT_DOCS = YES
|
||||
DISTRIBUTE_GROUP_DOC = NO
|
||||
TAB_SIZE = 8
|
||||
ALIASES =
|
||||
OPTIMIZE_OUTPUT_FOR_C = NO
|
||||
OPTIMIZE_OUTPUT_JAVA = NO
|
||||
SUBGROUPING = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Build related configuration options
|
||||
#---------------------------------------------------------------------------
|
||||
EXTRACT_ALL = NO
|
||||
EXTRACT_PRIVATE = NO
|
||||
EXTRACT_STATIC = NO
|
||||
EXTRACT_LOCAL_CLASSES = YES
|
||||
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
|
||||
GENERATE_TODOLIST = YES
|
||||
GENERATE_TESTLIST = YES
|
||||
GENERATE_BUGLIST = YES
|
||||
GENERATE_DEPRECATEDLIST= YES
|
||||
ENABLED_SECTIONS =
|
||||
MAX_INITIALIZER_LINES = 30
|
||||
SHOW_USED_FILES = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to warning and progress messages
|
||||
#---------------------------------------------------------------------------
|
||||
QUIET = NO
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = YES
|
||||
WARN_IF_DOC_ERROR = YES
|
||||
WARN_FORMAT = "$file:$line: $text"
|
||||
WARN_LOGFILE =
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the input files
|
||||
#---------------------------------------------------------------------------
|
||||
INPUT = /home/doudou/src/deb
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.java \
|
||||
*.ii \
|
||||
*.ixx \
|
||||
*.ipp \
|
||||
*.i++ \
|
||||
*.inl \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.hxx \
|
||||
*.hpp \
|
||||
*.h++ \
|
||||
*.idl \
|
||||
*.odl \
|
||||
*.cs \
|
||||
*.php \
|
||||
*.php3 \
|
||||
*.inc \
|
||||
*.C \
|
||||
*.H \
|
||||
*.tlh \
|
||||
*.diff \
|
||||
*.patch \
|
||||
*.moc \
|
||||
*.xpm \
|
||||
*.dox
|
||||
RECURSIVE = yes
|
||||
EXCLUDE =
|
||||
EXCLUDE_SYMLINKS = NO
|
||||
EXCLUDE_PATTERNS =
|
||||
EXAMPLE_PATH =
|
||||
EXAMPLE_PATTERNS = *
|
||||
EXAMPLE_RECURSIVE = NO
|
||||
IMAGE_PATH =
|
||||
INPUT_FILTER =
|
||||
FILTER_SOURCE_FILES = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to source browsing
|
||||
#---------------------------------------------------------------------------
|
||||
SOURCE_BROWSER = NO
|
||||
INLINE_SOURCES = NO
|
||||
STRIP_CODE_COMMENTS = YES
|
||||
REFERENCED_BY_RELATION = YES
|
||||
REFERENCES_RELATION = YES
|
||||
VERBATIM_HEADERS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# 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 = YES
|
||||
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 = NO
|
||||
MAN_OUTPUT = man
|
||||
MAN_EXTENSION = .3
|
||||
MAN_LINKS = NO
|
||||
#---------------------------------------------------------------------------
|
||||
# configuration options related to the XML output
|
||||
#---------------------------------------------------------------------------
|
||||
GENERATE_XML = yes
|
||||
XML_OUTPUT = xml
|
||||
XML_SCHEMA =
|
||||
XML_DTD =
|
||||
#---------------------------------------------------------------------------
|
||||
# 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 =
|
||||
EXPAND_AS_DEFINED =
|
||||
SKIP_FUNCTION_MACROS = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions 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 = YES
|
||||
HIDE_UNDOC_RELATIONS = YES
|
||||
HAVE_DOT = NO
|
||||
CLASS_GRAPH = YES
|
||||
COLLABORATION_GRAPH = YES
|
||||
UML_LOOK = NO
|
||||
TEMPLATE_RELATIONS = NO
|
||||
INCLUDE_GRAPH = YES
|
||||
INCLUDED_BY_GRAPH = YES
|
||||
CALL_GRAPH = NO
|
||||
GRAPHICAL_HIERARCHY = YES
|
||||
DOT_IMAGE_FORMAT = png
|
||||
DOT_PATH =
|
||||
DOTFILE_DIRS =
|
||||
MAX_DOT_GRAPH_WIDTH = 1024
|
||||
MAX_DOT_GRAPH_HEIGHT = 1024
|
||||
MAX_DOT_GRAPH_DEPTH = 1000
|
||||
GENERATE_LEGEND = YES
|
||||
DOT_CLEANUP = YES
|
||||
#---------------------------------------------------------------------------
|
||||
# Configuration::addtions related to the search engine
|
||||
#---------------------------------------------------------------------------
|
||||
SEARCHENGINE = NO
|
@ -0,0 +1,167 @@
|
||||
Basic 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 a while. While running, it prints some
|
||||
messages telling which features it is checking for.
|
||||
|
||||
2. Type `make' to compile the package.
|
||||
|
||||
3. Type `make install' to install the programs and any data files and
|
||||
documentation.
|
||||
|
||||
4. You can remove the program binaries and object files from the
|
||||
source code directory by typing `make clean'.
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
`--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.
|
||||
|
@ -0,0 +1,22 @@
|
||||
SUBDIRS = $(TOPSUBDIRS)
|
||||
|
||||
$(top_srcdir)/configure.in: configure.in.in $(top_srcdir)/subdirs
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common configure.in ;
|
||||
|
||||
$(top_srcdir)/subdirs:
|
||||
cd $(top_srcdir) && $(MAKE) -f admin/Makefile.common subdirs
|
||||
|
||||
$(top_srcdir)/acinclude.m4: $(top_srcdir)/admin/acinclude.m4.in $(top_srcdir)/admin/libtool.m4.in
|
||||
@cd $(top_srcdir) && cat admin/acinclude.m4.in admin/libtool.m4.in > acinclude.m4
|
||||
|
||||
MAINTAINERCLEANFILES = subdirs configure.in acinclude.m4 configure.files
|
||||
|
||||
package-messages:
|
||||
$(MAKE) -f admin/Makefile.common package-messages
|
||||
$(MAKE) -C po merge
|
||||
|
||||
EXTRA_DIST = admin COPYING configure.in.in
|
||||
|
||||
dist-hook:
|
||||
cd $(top_distdir) && perl admin/am_edit -padmin
|
||||
cd $(top_distdir) && $(MAKE) -f admin/Makefile.common subdirs
|
@ -0,0 +1,10 @@
|
||||
all:
|
||||
@echo "This Makefile is only for the CVS repository"
|
||||
@echo "This will be deleted before making the distribution"
|
||||
@echo ""
|
||||
$(MAKE) -f admin/Makefile.common cvs
|
||||
|
||||
dist:
|
||||
$(MAKE) -f admin/Makefile.common dist
|
||||
|
||||
.SILENT:
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,863 @@
|
||||
# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
|
||||
# 2005 Free Software Foundation, Inc.
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_AUTOMAKE_VERSION(VERSION)
|
||||
# ----------------------------
|
||||
# Automake X.Y traces this macro to ensure aclocal.m4 has been
|
||||
# generated from the m4 files accompanying Automake X.Y.
|
||||
AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
|
||||
|
||||
# AM_SET_CURRENT_AUTOMAKE_VERSION
|
||||
# -------------------------------
|
||||
# Call AM_AUTOMAKE_VERSION so it can be traced.
|
||||
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
|
||||
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
|
||||
[AM_AUTOMAKE_VERSION([1.9.6])])
|
||||
|
||||
# AM_AUX_DIR_EXPAND -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
|
||||
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
|
||||
# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
|
||||
#
|
||||
# Of course, Automake must honor this variable whenever it calls a
|
||||
# tool from the auxiliary directory. The problem is that $srcdir (and
|
||||
# therefore $ac_aux_dir as well) can be either absolute or relative,
|
||||
# depending on how configure is run. This is pretty annoying, since
|
||||
# it makes $ac_aux_dir quite unusable in subdirectories: in the top
|
||||
# source directory, any form will work fine, but in subdirectories a
|
||||
# relative path needs to be adjusted first.
|
||||
#
|
||||
# $ac_aux_dir/missing
|
||||
# fails when called from a subdirectory if $ac_aux_dir is relative
|
||||
# $top_srcdir/$ac_aux_dir/missing
|
||||
# fails if $ac_aux_dir is absolute,
|
||||
# fails when called from a subdirectory in a VPATH build with
|
||||
# a relative $ac_aux_dir
|
||||
#
|
||||
# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
|
||||
# are both prefixed by $srcdir. In an in-source build this is usually
|
||||
# harmless because $srcdir is `.', but things will broke when you
|
||||
# start a VPATH build or use an absolute $srcdir.
|
||||
#
|
||||
# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
|
||||
# iff we strip the leading $srcdir from $ac_aux_dir. That would be:
|
||||
# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
|
||||
# and then we would define $MISSING as
|
||||
# MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# This will work as long as MISSING is not called from configure, because
|
||||
# unfortunately $(top_srcdir) has no meaning in configure.
|
||||
# However there are other variables, like CC, which are often used in
|
||||
# configure, and could therefore not use this "fixed" $ac_aux_dir.
|
||||
#
|
||||
# Another solution, used here, is to always expand $ac_aux_dir to an
|
||||
# absolute PATH. The drawback is that using absolute paths prevent a
|
||||
# configured tree to be moved without reconfiguration.
|
||||
|
||||
AC_DEFUN([AM_AUX_DIR_EXPAND],
|
||||
[dnl Rely on autoconf to set up CDPATH properly.
|
||||
AC_PREREQ([2.50])dnl
|
||||
# expand $ac_aux_dir to an absolute path
|
||||
am_aux_dir=`cd $ac_aux_dir && pwd`
|
||||
])
|
||||
|
||||
# AM_CONDITIONAL -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 7
|
||||
|
||||
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
|
||||
# -------------------------------------
|
||||
# Define a conditional.
|
||||
AC_DEFUN([AM_CONDITIONAL],
|
||||
[AC_PREREQ(2.52)dnl
|
||||
ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])],
|
||||
[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
|
||||
AC_SUBST([$1_TRUE])
|
||||
AC_SUBST([$1_FALSE])
|
||||
if $2; then
|
||||
$1_TRUE=
|
||||
$1_FALSE='#'
|
||||
else
|
||||
$1_TRUE='#'
|
||||
$1_FALSE=
|
||||
fi
|
||||
AC_CONFIG_COMMANDS_PRE(
|
||||
[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
|
||||
AC_MSG_ERROR([[conditional "$1" was never defined.
|
||||
Usually this means the macro was only invoked conditionally.]])
|
||||
fi])])
|
||||
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8
|
||||
|
||||
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
|
||||
# written in clear, in which case automake, when reading aclocal.m4,
|
||||
# will think it sees a *use*, and therefore will trigger all it's
|
||||
# C support machinery. Also note that it means that autoscan, seeing
|
||||
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
|
||||
|
||||
|
||||
# _AM_DEPENDENCIES(NAME)
|
||||
# ----------------------
|
||||
# See how the compiler implements dependency checking.
|
||||
# NAME is "CC", "CXX", "GCJ", or "OBJC".
|
||||
# We try a few techniques and use that to set a single cache variable.
|
||||
#
|
||||
# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
|
||||
# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
|
||||
# dependency, and given that the user is not expected to run this macro,
|
||||
# just rely on AC_PROG_CC.
|
||||
AC_DEFUN([_AM_DEPENDENCIES],
|
||||
[AC_REQUIRE([AM_SET_DEPDIR])dnl
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
|
||||
AC_REQUIRE([AM_MAKE_INCLUDE])dnl
|
||||
AC_REQUIRE([AM_DEP_TRACK])dnl
|
||||
|
||||
ifelse([$1], CC, [depcc="$CC" am_compiler_list=],
|
||||
[$1], CXX, [depcc="$CXX" am_compiler_list=],
|
||||
[$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
|
||||
[$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'],
|
||||
[depcc="$$1" am_compiler_list=])
|
||||
|
||||
AC_CACHE_CHECK([dependency style of $depcc],
|
||||
[am_cv_$1_dependencies_compiler_type],
|
||||
[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
|
||||
# We make a subdir and do the tests there. Otherwise we can end up
|
||||
# making bogus files that we don't know about and never remove. For
|
||||
# instance it was reported that on HP-UX the gcc test will end up
|
||||
# making a dummy file named `D' -- because `-MD' means `put the output
|
||||
# in D'.
|
||||
mkdir conftest.dir
|
||||
# Copy depcomp to subdir because otherwise we won't find it if we're
|
||||
# using a relative directory.
|
||||
cp "$am_depcomp" conftest.dir
|
||||
cd conftest.dir
|
||||
# We will build objects and dependencies in a subdirectory because
|
||||
# it helps to detect inapplicable dependency modes. For instance
|
||||
# both Tru64's cc and ICC support -MD to output dependencies as a
|
||||
# side effect of compilation, but ICC will put the dependencies in
|
||||
# the current directory while Tru64 will put them in the object
|
||||
# directory.
|
||||
mkdir sub
|
||||
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
if test "$am_compiler_list" = ""; then
|
||||
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
|
||||
fi
|
||||
for depmode in $am_compiler_list; do
|
||||
# Setup a source with many dependencies, because some compilers
|
||||
# like to wrap large dependency lists on column 80 (with \), and
|
||||
# we should not choose a depcomp mode which is confused by this.
|
||||
#
|
||||
# We need to recreate these files for each test, as the compiler may
|
||||
# overwrite some of them when testing with obscure command lines.
|
||||
# This happens at least with the AIX C compiler.
|
||||
: > sub/conftest.c
|
||||
for i in 1 2 3 4 5 6; do
|
||||
echo '#include "conftst'$i'.h"' >> sub/conftest.c
|
||||
# Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
|
||||
# Solaris 8's {/usr,}/bin/sh.
|
||||
touch sub/conftst$i.h
|
||||
done
|
||||
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
|
||||
|
||||
case $depmode in
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
# We check with `-c' and `-o' for the sake of the "dashmstdout"
|
||||
# mode. It turns out that the SunPro C++ compiler does not properly
|
||||
# handle `-M -o', and we need to detect this.
|
||||
if depmode=$depmode \
|
||||
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
|
||||
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
|
||||
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
|
||||
>/dev/null 2>conftest.err &&
|
||||
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
|
||||
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
|
||||
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
|
||||
# icc doesn't choke on unknown options, it will just issue warnings
|
||||
# or remarks (even with -Werror). So we grep stderr for any message
|
||||
# that says an option was ignored or not supported.
|
||||
# When given -MP, icc 7.0 and 7.1 complain thusly:
|
||||
# icc: Command line warning: ignoring option '-M'; no argument required
|
||||
# The diagnosis changed in icc 8.0:
|
||||
# icc: Command line remark: option '-MP' not supported
|
||||
if (grep 'ignoring option' conftest.err ||
|
||||
grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
|
||||
am_cv_$1_dependencies_compiler_type=$depmode
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
cd ..
|
||||
rm -rf conftest.dir
|
||||
else
|
||||
am_cv_$1_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
|
||||
AM_CONDITIONAL([am__fastdep$1], [
|
||||
test "x$enable_dependency_tracking" != xno \
|
||||
&& test "$am_cv_$1_dependencies_compiler_type" = gcc3])
|
||||
])
|
||||
|
||||
|
||||
# AM_SET_DEPDIR
|
||||
# -------------
|
||||
# Choose a directory name for dependency files.
|
||||
# This macro is AC_REQUIREd in _AM_DEPENDENCIES
|
||||
AC_DEFUN([AM_SET_DEPDIR],
|
||||
[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
|
||||
])
|
||||
|
||||
|
||||
# AM_DEP_TRACK
|
||||
# ------------
|
||||
AC_DEFUN([AM_DEP_TRACK],
|
||||
[AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" != xno; then
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
AMDEPBACKSLASH='\'
|
||||
fi
|
||||
AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
|
||||
AC_SUBST([AMDEPBACKSLASH])
|
||||
])
|
||||
|
||||
# Generate code to set up dependency tracking. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
#serial 3
|
||||
|
||||
# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# ------------------------------
|
||||
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[for mf in $CONFIG_FILES; do
|
||||
# Strip MF so we end up with the name of the file.
|
||||
mf=`echo "$mf" | sed -e 's/:.*$//'`
|
||||
# Check whether this is an Automake generated Makefile or not.
|
||||
# We used to match only the files named `Makefile.in', but
|
||||
# some people rename them; so instead we look at the file content.
|
||||
# Grep'ing the first line is not enough: some people post-process
|
||||
# each Makefile.in and add a new line on top of each file to say so.
|
||||
# So let's grep whole file.
|
||||
if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
|
||||
dirpart=`AS_DIRNAME("$mf")`
|
||||
else
|
||||
continue
|
||||
fi
|
||||
# Extract the definition of DEPDIR, am__include, and am__quote
|
||||
# from the Makefile without running `make'.
|
||||
DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
am__include=`sed -n 's/^am__include = //p' < "$mf"`
|
||||
test -z "am__include" && continue
|
||||
am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n 's/^U = //p' < "$mf"`
|
||||
# Find all dependency output files, they are included files with
|
||||
# $(DEPDIR) in their names. We invoke sed twice because it is the
|
||||
# simplest approach to changing $(DEPDIR) to its actual value in the
|
||||
# expansion.
|
||||
for file in `sed -n "
|
||||
s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`AS_DIRNAME(["$file"])`
|
||||
AS_MKDIR_P([$dirpart/$fdir])
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
|
||||
# AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
# -----------------------------
|
||||
# This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
#
|
||||
# This code is only required when automatic dependency tracking
|
||||
# is enabled. FIXME. This creates each `.P' file that we will
|
||||
# need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AC_CONFIG_COMMANDS([depfiles],
|
||||
[test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
|
||||
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
|
||||
])
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 8
|
||||
|
||||
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
|
||||
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
|
||||
|
||||
# Do all the work for Automake. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 12
|
||||
|
||||
# This macro actually does too much. Some checks are only needed if
|
||||
# your package does certain things. But this isn't really a big deal.
|
||||
|
||||
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
|
||||
# AM_INIT_AUTOMAKE([OPTIONS])
|
||||
# -----------------------------------------------
|
||||
# The call with PACKAGE and VERSION arguments is the old style
|
||||
# call (pre autoconf-2.50), which is being phased out. PACKAGE
|
||||
# and VERSION should now be passed to AC_INIT and removed from
|
||||
# the call to AM_INIT_AUTOMAKE.
|
||||
# We support both call styles for the transition. After
|
||||
# the next Automake release, Autoconf can make the AC_INIT
|
||||
# arguments mandatory, and then we can depend on a new Autoconf
|
||||
# release and drop the old call support.
|
||||
AC_DEFUN([AM_INIT_AUTOMAKE],
|
||||
[AC_PREREQ([2.58])dnl
|
||||
dnl Autoconf wants to disallow AM_ names. We explicitly allow
|
||||
dnl the ones we care about.
|
||||
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
|
||||
AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
|
||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
||||
# test to see if srcdir already configured
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`" &&
|
||||
test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
|
||||
# test whether we have cygpath
|
||||
if test -z "$CYGPATH_W"; then
|
||||
if (cygpath --version) >/dev/null 2>/dev/null; then
|
||||
CYGPATH_W='cygpath -w'
|
||||
else
|
||||
CYGPATH_W=echo
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([CYGPATH_W])
|
||||
|
||||
# Define the identity of the package.
|
||||
dnl Distinguish between old-style and new-style calls.
|
||||
m4_ifval([$2],
|
||||
[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
|
||||
AC_SUBST([PACKAGE], [$1])dnl
|
||||
AC_SUBST([VERSION], [$2])],
|
||||
[_AM_SET_OPTIONS([$1])dnl
|
||||
AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
|
||||
AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
|
||||
|
||||
_AM_IF_OPTION([no-define],,
|
||||
[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
|
||||
|
||||
# Some tools Automake needs.
|
||||
AC_REQUIRE([AM_SANITY_CHECK])dnl
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])dnl
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AM_PROG_INSTALL_SH
|
||||
AM_PROG_INSTALL_STRIP
|
||||
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
||||
# We need awk for the "check" target. The system "awk" is bad on
|
||||
# some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
||||
AC_REQUIRE([AM_SET_LEADING_DOT])dnl
|
||||
_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
|
||||
[_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
|
||||
[_AM_PROG_TAR([v7])])])
|
||||
_AM_IF_OPTION([no-dependencies],,
|
||||
[AC_PROVIDE_IFELSE([AC_PROG_CC],
|
||||
[_AM_DEPENDENCIES(CC)],
|
||||
[define([AC_PROG_CC],
|
||||
defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
|
||||
AC_PROVIDE_IFELSE([AC_PROG_CXX],
|
||||
[_AM_DEPENDENCIES(CXX)],
|
||||
[define([AC_PROG_CXX],
|
||||
defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
# When config.status generates a header, we must update the stamp-h file.
|
||||
# This file resides in the same directory as the config header
|
||||
# that is generated. The stamp files are numbered to have different names.
|
||||
|
||||
# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
|
||||
# loop where config.status creates the headers, so we can generate
|
||||
# our stamp files there.
|
||||
AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
|
||||
[# Compute $1's index in $config_headers.
|
||||
_am_stamp_count=1
|
||||
for _am_header in $config_headers :; do
|
||||
case $_am_header in
|
||||
$1 | $1:* )
|
||||
break ;;
|
||||
* )
|
||||
_am_stamp_count=`expr $_am_stamp_count + 1` ;;
|
||||
esac
|
||||
done
|
||||
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_SH
|
||||
# ------------------
|
||||
# Define $install_sh.
|
||||
AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# Check whether the underlying file-system supports filenames
|
||||
# with a leading dot. For instance MS-DOS doesn't.
|
||||
AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
[rm -rf .tst 2>/dev/null
|
||||
mkdir .tst 2>/dev/null
|
||||
if test -d .tst; then
|
||||
am__leading_dot=.
|
||||
else
|
||||
am__leading_dot=_
|
||||
fi
|
||||
rmdir .tst 2>/dev/null
|
||||
AC_SUBST([am__leading_dot])])
|
||||
|
||||
# Check to see how 'make' treats includes. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# AM_MAKE_INCLUDE()
|
||||
# -----------------
|
||||
# Check to see how make treats includes.
|
||||
AC_DEFUN([AM_MAKE_INCLUDE],
|
||||
[am_make=${MAKE-make}
|
||||
cat > confinc << 'END'
|
||||
am__doit:
|
||||
@echo done
|
||||
.PHONY: am__doit
|
||||
END
|
||||
# If we don't find an include directive, just comment out the code.
|
||||
AC_MSG_CHECKING([for style of include used by $am_make])
|
||||
am__include="#"
|
||||
am__quote=
|
||||
_am_result=none
|
||||
# First try GNU make style include.
|
||||
echo "include confinc" > confmf
|
||||
# We grep out `Entering directory' and `Leaving directory'
|
||||
# messages which can occur if `w' ends up in MAKEFLAGS.
|
||||
# In particular we don't look at `^make:' because GNU make might
|
||||
# be invoked under some other name (usually "gmake"), in which
|
||||
# case it prints its new name instead of `make'.
|
||||
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
|
||||
am__include=include
|
||||
am__quote=
|
||||
_am_result=GNU
|
||||
fi
|
||||
# Now try BSD make style include.
|
||||
if test "$am__include" = "#"; then
|
||||
echo '.include "confinc"' > confmf
|
||||
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
|
||||
am__include=.include
|
||||
am__quote="\""
|
||||
_am_result=BSD
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([am__include])
|
||||
AC_SUBST([am__quote])
|
||||
AC_MSG_RESULT([$_am_result])
|
||||
rm -f confinc confmf
|
||||
])
|
||||
|
||||
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_MISSING_PROG(NAME, PROGRAM)
|
||||
# ------------------------------
|
||||
AC_DEFUN([AM_MISSING_PROG],
|
||||
[AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
|
||||
# AM_MISSING_HAS_RUN
|
||||
# ------------------
|
||||
# Define MISSING if not defined so far and test if it supports --run.
|
||||
# If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN],
|
||||
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
|
||||
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
|
||||
# Use eval to expand $SHELL
|
||||
if eval "$MISSING --run true"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_MKDIR_P
|
||||
# ---------------
|
||||
# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
|
||||
#
|
||||
# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
|
||||
# created by `make install' are always world readable, even if the
|
||||
# installer happens to have an overly restrictive umask (e.g. 077).
|
||||
# This was a mistake. There are at least two reasons why we must not
|
||||
# use `-m 0755':
|
||||
# - it causes special bits like SGID to be ignored,
|
||||
# - it may be too restrictive (some setups expect 775 directories).
|
||||
#
|
||||
# Do not use -m 0755 and let people choose whatever they expect by
|
||||
# setting umask.
|
||||
#
|
||||
# We cannot accept any implementation of `mkdir' that recognizes `-p'.
|
||||
# Some implementations (such as Solaris 8's) are not thread-safe: if a
|
||||
# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c'
|
||||
# concurrently, both version can detect that a/ is missing, but only
|
||||
# one can create it and the other will error out. Consequently we
|
||||
# restrict ourselves to GNU make (using the --version option ensures
|
||||
# this.)
|
||||
AC_DEFUN([AM_PROG_MKDIR_P],
|
||||
[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
|
||||
# We used to keeping the `.' as first argument, in order to
|
||||
# allow $(mkdir_p) to be used without argument. As in
|
||||
# $(mkdir_p) $(somedir)
|
||||
# where $(somedir) is conditionally defined. However this is wrong
|
||||
# for two reasons:
|
||||
# 1. if the package is installed by a user who cannot write `.'
|
||||
# make install will fail,
|
||||
# 2. the above comment should most certainly read
|
||||
# $(mkdir_p) $(DESTDIR)$(somedir)
|
||||
# so it does not work when $(somedir) is undefined and
|
||||
# $(DESTDIR) is not.
|
||||
# To support the latter case, we have to write
|
||||
# test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir),
|
||||
# so the `.' trick is pointless.
|
||||
mkdir_p='mkdir -p --'
|
||||
else
|
||||
# On NextStep and OpenStep, the `mkdir' command does not
|
||||
# recognize any option. It will interpret all options as
|
||||
# directories to create, and then abort because `.' already
|
||||
# exists.
|
||||
for d in ./-p ./--version;
|
||||
do
|
||||
test -d $d && rmdir $d
|
||||
done
|
||||
# $(mkinstalldirs) is defined by Automake if mkinstalldirs exists.
|
||||
if test -f "$ac_aux_dir/mkinstalldirs"; then
|
||||
mkdir_p='$(mkinstalldirs)'
|
||||
else
|
||||
mkdir_p='$(install_sh) -d'
|
||||
fi
|
||||
fi
|
||||
AC_SUBST([mkdir_p])])
|
||||
|
||||
# Helper functions for option handling. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 3
|
||||
|
||||
# _AM_MANGLE_OPTION(NAME)
|
||||
# -----------------------
|
||||
AC_DEFUN([_AM_MANGLE_OPTION],
|
||||
[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
|
||||
|
||||
# _AM_SET_OPTION(NAME)
|
||||
# ------------------------------
|
||||
# Set option NAME. Presently that only means defining a flag for this option.
|
||||
AC_DEFUN([_AM_SET_OPTION],
|
||||
[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
|
||||
|
||||
# _AM_SET_OPTIONS(OPTIONS)
|
||||
# ----------------------------------
|
||||
# OPTIONS is a space-separated list of Automake options.
|
||||
AC_DEFUN([_AM_SET_OPTIONS],
|
||||
[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
|
||||
|
||||
# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
|
||||
# -------------------------------------------
|
||||
# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
|
||||
AC_DEFUN([_AM_IF_OPTION],
|
||||
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
|
||||
|
||||
# Check to make sure that the build environment is sane. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 4
|
||||
|
||||
# AM_SANITY_CHECK
|
||||
# ---------------
|
||||
AC_DEFUN([AM_SANITY_CHECK],
|
||||
[AC_MSG_CHECKING([whether build environment is sane])
|
||||
# Just in case
|
||||
sleep 1
|
||||
echo timestamp > conftest.file
|
||||
# Do `set' in a subshell so we don't clobber the current shell's
|
||||
# arguments. Must try -L first in case configure is actually a
|
||||
# symlink; some systems play weird games with the mod time of symlinks
|
||||
# (eg FreeBSD returns the mod time of the symlink's containing
|
||||
# directory).
|
||||
if (
|
||||
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
|
||||
if test "$[*]" = "X"; then
|
||||
# -L didn't work.
|
||||
set X `ls -t $srcdir/configure conftest.file`
|
||||
fi
|
||||
rm -f conftest.file
|
||||
if test "$[*]" != "X $srcdir/configure conftest.file" \
|
||||
&& test "$[*]" != "X conftest.file $srcdir/configure"; then
|
||||
|
||||
# If neither matched, then we have a broken ls. This can happen
|
||||
# if, for instance, CONFIG_SHELL is bash and it inherits a
|
||||
# broken ls alias from the environment. This has actually
|
||||
# happened. Such a system could not be considered "sane".
|
||||
AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken
|
||||
alias in your environment])
|
||||
fi
|
||||
|
||||
test "$[2]" = conftest.file
|
||||
)
|
||||
then
|
||||
# Ok.
|
||||
:
|
||||
else
|
||||
AC_MSG_ERROR([newly created file is older than distributed files!
|
||||
Check your system clock])
|
||||
fi
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# AM_PROG_INSTALL_STRIP
|
||||
# ---------------------
|
||||
# One issue with vendor `install' (even GNU) is that you can't
|
||||
# specify the program used to strip binaries. This is especially
|
||||
# annoying in cross-compiling environments, where the build's strip
|
||||
# is unlikely to handle the host's binaries.
|
||||
# Fortunately install-sh will honor a STRIPPROG variable, so we
|
||||
# always use install-sh in `make install-strip', and initialize
|
||||
# STRIPPROG with the value of the STRIP variable (set by the user).
|
||||
AC_DEFUN([AM_PROG_INSTALL_STRIP],
|
||||
[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
|
||||
# Installed binaries are usually stripped using `strip' when the user
|
||||
# run `make install-strip'. However `strip' might not be the right
|
||||
# tool to use in cross-compilation environments, therefore Automake
|
||||
# will honor the `STRIP' environment variable to overrule this program.
|
||||
dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
|
||||
if test "$cross_compiling" != no; then
|
||||
AC_CHECK_TOOL([STRIP], [strip], :)
|
||||
fi
|
||||
INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
|
||||
AC_SUBST([INSTALL_STRIP_PROGRAM])])
|
||||
|
||||
# Check how to create a tarball. -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# serial 2
|
||||
|
||||
# _AM_PROG_TAR(FORMAT)
|
||||
# --------------------
|
||||
# Check how to create a tarball in format FORMAT.
|
||||
# FORMAT should be one of `v7', `ustar', or `pax'.
|
||||
#
|
||||
# Substitute a variable $(am__tar) that is a command
|
||||
# writing to stdout a FORMAT-tarball containing the directory
|
||||
# $tardir.
|
||||
# tardir=directory && $(am__tar) > result.tar
|
||||
#
|
||||
# Substitute a variable $(am__untar) that extract such
|
||||
# a tarball read from stdin.
|
||||
# $(am__untar) < result.tar
|
||||
AC_DEFUN([_AM_PROG_TAR],
|
||||
[# Always define AMTAR for backward compatibility.
|
||||
AM_MISSING_PROG([AMTAR], [tar])
|
||||
m4_if([$1], [v7],
|
||||
[am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
|
||||
[m4_case([$1], [ustar],, [pax],,
|
||||
[m4_fatal([Unknown tar format])])
|
||||
AC_MSG_CHECKING([how to create a $1 tar archive])
|
||||
# Loop over all known methods to create a tar archive until one works.
|
||||
_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
|
||||
_am_tools=${am_cv_prog_tar_$1-$_am_tools}
|
||||
# Do not fold the above two line into one, because Tru64 sh and
|
||||
# Solaris sh will not grok spaces in the rhs of `-'.
|
||||
for _am_tool in $_am_tools
|
||||
do
|
||||
case $_am_tool in
|
||||
gnutar)
|
||||
for _am_tar in tar gnutar gtar;
|
||||
do
|
||||
AM_RUN_LOG([$_am_tar --version]) && break
|
||||
done
|
||||
am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
|
||||
am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
|
||||
am__untar="$_am_tar -xf -"
|
||||
;;
|
||||
plaintar)
|
||||
# Must skip GNU tar: if it does not support --format= it doesn't create
|
||||
# ustar tarball either.
|
||||
(tar --version) >/dev/null 2>&1 && continue
|
||||
am__tar='tar chf - "$$tardir"'
|
||||
am__tar_='tar chf - "$tardir"'
|
||||
am__untar='tar xf -'
|
||||
;;
|
||||
pax)
|
||||
am__tar='pax -L -x $1 -w "$$tardir"'
|
||||
am__tar_='pax -L -x $1 -w "$tardir"'
|
||||
am__untar='pax -r'
|
||||
;;
|
||||
cpio)
|
||||
am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
|
||||
am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
|
||||
am__untar='cpio -i -H $1 -d'
|
||||
;;
|
||||
none)
|
||||
am__tar=false
|
||||
am__tar_=false
|
||||
am__untar=false
|
||||
;;
|
||||
esac
|
||||
|
||||
# If the value was cached, stop now. We just wanted to have am__tar
|
||||
# and am__untar set.
|
||||
test -n "${am_cv_prog_tar_$1}" && break
|
||||
|
||||
# tar/untar a dummy directory, and stop if the command works
|
||||
rm -rf conftest.dir
|
||||
mkdir conftest.dir
|
||||
echo GrepMe > conftest.dir/file
|
||||
AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
|
||||
rm -rf conftest.dir
|
||||
if test -s conftest.tar; then
|
||||
AM_RUN_LOG([$am__untar <conftest.tar])
|
||||
grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
|
||||
fi
|
||||
done
|
||||
rm -rf conftest.dir
|
||||
|
||||
AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
|
||||
AC_MSG_RESULT([$am_cv_prog_tar_$1])])
|
||||
AC_SUBST([am__tar])
|
||||
AC_SUBST([am__untar])
|
||||
]) # _AM_PROG_TAR
|
||||
|
||||
m4_include([acinclude.m4])
|
@ -0,0 +1,161 @@
|
||||
<?xml version = '1.0'?>
|
||||
<kdevelop>
|
||||
<general>
|
||||
<author>Sylvain Joyeux</author>
|
||||
<email>sylvain.joyeux@m4x.org</email>
|
||||
<version>0.12</version>
|
||||
<projectmanagement>KDevKDEAutoProject</projectmanagement>
|
||||
<primarylanguage>C++</primarylanguage>
|
||||
<keywords>
|
||||
<keyword>C++</keyword>
|
||||
<keyword>Code</keyword>
|
||||
<keyword>Qt</keyword>
|
||||
<keyword>KDE</keyword>
|
||||
<keyword>kioslave</keyword>
|
||||
</keywords>
|
||||
<projectdirectory>.</projectdirectory>
|
||||
<absoluteprojectpath>false</absoluteprojectpath>
|
||||
<description/>
|
||||
<ignoreparts>
|
||||
<part>KDevClearCase</part>
|
||||
<part>KDevFileGroups</part>
|
||||
<part>KDevdistpart</part>
|
||||
<part>KDevPerforce</part>
|
||||
</ignoreparts>
|
||||
<secondaryLanguages/>
|
||||
</general>
|
||||
<kdevautoproject>
|
||||
<general>
|
||||
<activetarget>src/kio_apt.la</activetarget>
|
||||
<useconfiguration>debug</useconfiguration>
|
||||
</general>
|
||||
<configurations>
|
||||
<optimized>
|
||||
<builddir>optimized</builddir>
|
||||
<ccompiler>GccOptions</ccompiler>
|
||||
<cxxcompiler>GppOptions</cxxcompiler>
|
||||
<f77compiler>G77Options</f77compiler>
|
||||
<cxxflags>-O2 -g0</cxxflags>
|
||||
</optimized>
|
||||
<debug>
|
||||
<configargs>--enable-debug=full --prefix=/usr</configargs>
|
||||
<builddir>debug</builddir>
|
||||
<ccompiler>kdevgccoptions</ccompiler>
|
||||
<cxxcompiler>kdevgppoptions</cxxcompiler>
|
||||
<f77compiler>kdevpgf77options</f77compiler>
|
||||
<cxxflags>-O0 -g3</cxxflags>
|
||||
<topsourcedir/>
|
||||
<cppflags/>
|
||||
<ldflags/>
|
||||
<ccompilerbinary/>
|
||||
<cxxcompilerbinary/>
|
||||
<f77compilerbinary/>
|
||||
<cflags/>
|
||||
<f77flags/>
|
||||
</debug>
|
||||
</configurations>
|
||||
<make>
|
||||
<envvars>
|
||||
<envvar value="1" name="WANT_AUTOCONF_2_5" />
|
||||
<envvar value="1" name="WANT_AUTOMAKE_1_6" />
|
||||
</envvars>
|
||||
<abortonerror>false</abortonerror>
|
||||
<numberofjobs>1</numberofjobs>
|
||||
<dontact>false</dontact>
|
||||
<makebin/>
|
||||
</make>
|
||||
<run>
|
||||
<directoryradio>executable</directoryradio>
|
||||
<customdirectory>/</customdirectory>
|
||||
<mainprogram>usr/bin/konqueror</mainprogram>
|
||||
<programargs>apt:/search?kde</programargs>
|
||||
<terminal>false</terminal>
|
||||
<autocompile>true</autocompile>
|
||||
<envvars/>
|
||||
</run>
|
||||
</kdevautoproject>
|
||||
<kdevfileview>
|
||||
<groups>
|
||||
<group pattern="*.cpp;*.cxx;*.h" name="Sources" />
|
||||
<group pattern="*.po;*.ts" name="Translations" />
|
||||
<group pattern="*" name="Others" />
|
||||
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||
</groups>
|
||||
<tree>
|
||||
<hidepatterns></hidepatterns>
|
||||
<hidenonprojectfiles>false</hidenonprojectfiles>
|
||||
<showvcsfields>true</showvcsfields>
|
||||
</tree>
|
||||
</kdevfileview>
|
||||
<kdevdoctreeview>
|
||||
<ignoretocs>
|
||||
<toc>gtk</toc>
|
||||
<toc>gnustep</toc>
|
||||
<toc>python</toc>
|
||||
<toc>php</toc>
|
||||
<toc>perl</toc>
|
||||
</ignoretocs>
|
||||
<projectdoc>
|
||||
<userdocDir>html/</userdocDir>
|
||||
<apidocDir>html/</apidocDir>
|
||||
</projectdoc>
|
||||
<ignoreqt_xml/>
|
||||
<ignoredoxygen/>
|
||||
<ignorekdocs/>
|
||||
<ignoredevhelp/>
|
||||
</kdevdoctreeview>
|
||||
<kdevdebugger>
|
||||
<general>
|
||||
<dbgshell>libtool</dbgshell>
|
||||
<programargs/>
|
||||
<gdbpath/>
|
||||
<configGdbScript/>
|
||||
<runShellScript/>
|
||||
<runGdbScript/>
|
||||
<breakonloadinglibs>true</breakonloadinglibs>
|
||||
<separatetty>false</separatetty>
|
||||
<floatingtoolbar>false</floatingtoolbar>
|
||||
</general>
|
||||
<display>
|
||||
<staticmembers>false</staticmembers>
|
||||
<demanglenames>true</demanglenames>
|
||||
<outputradix>10</outputradix>
|
||||
</display>
|
||||
</kdevdebugger>
|
||||
<kdevfilecreate>
|
||||
<filetypes/>
|
||||
<useglobaltypes/>
|
||||
</kdevfilecreate>
|
||||
<cppsupportpart>
|
||||
<filetemplates>
|
||||
<interfacesuffix>.h</interfacesuffix>
|
||||
<implementationsuffix>.cpp</implementationsuffix>
|
||||
</filetemplates>
|
||||
</cppsupportpart>
|
||||
<kdevcppsupport>
|
||||
<codecompletion>
|
||||
<includeGlobalFunctions>true</includeGlobalFunctions>
|
||||
<includeTypes>true</includeTypes>
|
||||
<includeEnums>true</includeEnums>
|
||||
<includeTypedefs>false</includeTypedefs>
|
||||
<automaticCodeCompletion>true</automaticCodeCompletion>
|
||||
<automaticArgumentsHint>true</automaticArgumentsHint>
|
||||
<automaticHeaderCompletion>true</automaticHeaderCompletion>
|
||||
<codeCompletionDelay>250</codeCompletionDelay>
|
||||
<argumentsHintDelay>400</argumentsHintDelay>
|
||||
<headerCompletionDelay>250</headerCompletionDelay>
|
||||
</codecompletion>
|
||||
<references/>
|
||||
</kdevcppsupport>
|
||||
<kdevcvs>
|
||||
<cvsoptions>-f</cvsoptions>
|
||||
<commitoptions/>
|
||||
<addoptions/>
|
||||
<logoptions/>
|
||||
<updateoptions>-dP</updateoptions>
|
||||
<removeoptions>-f</removeoptions>
|
||||
<revertoptions>-C -d -P</revertoptions>
|
||||
<diffoptions>-u3 -p</diffoptions>
|
||||
<rshoptions/>
|
||||
</kdevcvs>
|
||||
</kdevelop>
|
@ -0,0 +1,247 @@
|
||||
/* config.h.in. Generated from configure.in by autoheader. */
|
||||
|
||||
/* Define to 1 if you have the <Carbon/Carbon.h> header file. */
|
||||
#undef HAVE_CARBON_CARBON_H
|
||||
|
||||
/* Define if you have the CoreAudio API */
|
||||
#undef HAVE_COREAUDIO
|
||||
|
||||
/* Define to 1 if you have the <crt_externs.h> header file. */
|
||||
#undef HAVE_CRT_EXTERNS_H
|
||||
|
||||
/* Defines if your system has the crypt function */
|
||||
#undef HAVE_CRYPT
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#undef HAVE_DLFCN_H
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if you have libjpeg */
|
||||
#undef HAVE_LIBJPEG
|
||||
|
||||
/* Define if you have libpng */
|
||||
#undef HAVE_LIBPNG
|
||||
|
||||
/* Define if you have a working libpthread (will enable threaded code) */
|
||||
#undef HAVE_LIBPTHREAD
|
||||
|
||||
/* Define if you have libz */
|
||||
#undef HAVE_LIBZ
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define if your system needs _NSGetEnviron to set up the environment */
|
||||
#undef HAVE_NSGETENVIRON
|
||||
|
||||
/* Define if you have res_init */
|
||||
#undef HAVE_RES_INIT
|
||||
|
||||
/* Define if you have the res_init prototype */
|
||||
#undef HAVE_RES_INIT_PROTO
|
||||
|
||||
/* Define if you have a STL implementation by SGI */
|
||||
#undef HAVE_SGI_STL
|
||||
|
||||
/* Define to 1 if you have the `snprintf' function. */
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have strlcat */
|
||||
#undef HAVE_STRLCAT
|
||||
|
||||
/* Define if you have the strlcat prototype */
|
||||
#undef HAVE_STRLCAT_PROTO
|
||||
|
||||
/* Define if you have strlcpy */
|
||||
#undef HAVE_STRLCPY
|
||||
|
||||
/* Define if you have the strlcpy prototype */
|
||||
#undef HAVE_STRLCPY_PROTO
|
||||
|
||||
/* Define to 1 if you have the <sys/bitypes.h> header file. */
|
||||
#undef HAVE_SYS_BITYPES_H
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `vsnprintf' function. */
|
||||
#undef HAVE_VSNPRINTF
|
||||
|
||||
/* Suffix for lib directories */
|
||||
#undef KDELIBSUFF
|
||||
|
||||
/* Define a safe value for MAXPATHLEN */
|
||||
#undef KDEMAXPATHLEN
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* The size of `char *', as computed by sizeof. */
|
||||
#undef SIZEOF_CHAR_P
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#undef SIZEOF_INT
|
||||
|
||||
/* The size of `long', as computed by sizeof. */
|
||||
#undef SIZEOF_LONG
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#undef SIZEOF_SHORT
|
||||
|
||||
/* The size of `size_t', as computed by sizeof. */
|
||||
#undef SIZEOF_SIZE_T
|
||||
|
||||
/* The size of `unsigned long', as computed by sizeof. */
|
||||
#undef SIZEOF_UNSIGNED_LONG
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define if your package manager is not dpkg but RPM */
|
||||
#undef USE_RPM
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Defined if compiling without arts */
|
||||
#undef WITHOUT_ARTS
|
||||
|
||||
/* Define to 1 if your processor stores words with the most significant byte
|
||||
first (like Motorola and SPARC, unlike Intel and VAX). */
|
||||
#undef WORDS_BIGENDIAN
|
||||
|
||||
/*
|
||||
* jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system
|
||||
* headers and I'm too lazy to write a configure test as long as only
|
||||
* unixware is related
|
||||
*/
|
||||
#ifdef _UNIXWARE
|
||||
#define HAVE_BOOLEAN
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* AIX defines FD_SET in terms of bzero, but fails to include <strings.h>
|
||||
* that defines bzero.
|
||||
*/
|
||||
|
||||
#if defined(_AIX)
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(HAVE_NSGETENVIRON) && defined(HAVE_CRT_EXTERNS_H)
|
||||
# include <sys/time.h>
|
||||
# include <crt_externs.h>
|
||||
# define environ (*_NSGetEnviron())
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_RES_INIT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
int res_init(void);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCAT_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcat(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if !defined(HAVE_STRLCPY_PROTO)
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
unsigned long strlcpy(char*, const char*, unsigned long);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* On HP-UX, the declaration of vsnprintf() is needed every time !
|
||||
*/
|
||||
|
||||
#if !defined(HAVE_VSNPRINTF) || defined(hpux)
|
||||
#if __STDC__
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#else
|
||||
#include <varargs.h>
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int vsnprintf(char *str, size_t n, char const *fmt, va_list ap);
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int snprintf(char *str, size_t n, char const *fmt, ...);
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(__SVR4) && !defined(__svr4__)
|
||||
#define __svr4__ 1
|
||||
#endif
|
||||
|
||||
|
||||
/* type to use in place of socklen_t if not defined */
|
||||
#undef kde_socklen_t
|
||||
|
||||
/* type to use in place of socklen_t if not defined (deprecated, use
|
||||
kde_socklen_t) */
|
||||
#undef ksize_t
|
@ -0,0 +1,2 @@
|
||||
./admin/configure.in.min
|
||||
configure.in.in
|
@ -0,0 +1,138 @@
|
||||
dnl =======================================================
|
||||
dnl FILE: ./admin/configure.in.min
|
||||
dnl =======================================================
|
||||
|
||||
dnl This file is part of the KDE libraries/packages
|
||||
dnl Copyright (C) 2001 Stephan Kulow (coolo@kde.org)
|
||||
|
||||
dnl This file is free software; you can redistribute it and/or
|
||||
dnl modify it under the terms of the GNU Library General Public
|
||||
dnl License as published by the Free Software Foundation; either
|
||||
dnl version 2 of the License, or (at your option) any later version.
|
||||
|
||||
dnl This library is distributed in the hope that it will be useful,
|
||||
dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl Library General Public License for more details.
|
||||
|
||||
dnl You should have received a copy of the GNU Library General Public License
|
||||
dnl along with this library; see the file COPYING.LIB. If not, write to
|
||||
dnl the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||
dnl Boston, MA 02110-1301, USA.
|
||||
|
||||
# Original Author was Kalle@kde.org
|
||||
# I lifted it in some mater. (Stephan Kulow)
|
||||
# I used much code from Janos Farkas
|
||||
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT(acinclude.m4) dnl a source file from your sub dir
|
||||
|
||||
dnl This is so we can use kde-common
|
||||
AC_CONFIG_AUX_DIR(admin)
|
||||
|
||||
dnl This ksh/zsh feature conflicts with `cd blah ; pwd`
|
||||
unset CDPATH
|
||||
|
||||
dnl Checking host/target/build systems, for make, install etc.
|
||||
AC_CANONICAL_SYSTEM
|
||||
dnl Perform program name transformation
|
||||
AC_ARG_PROGRAM
|
||||
|
||||
dnl Automake doc recommends to do this only here. (Janos)
|
||||
AM_INIT_AUTOMAKE(kio-apt, 0.13.2) dnl searches for some needed programs
|
||||
|
||||
KDE_SET_PREFIX
|
||||
|
||||
dnl generate the config header
|
||||
AM_CONFIG_HEADER(config.h) dnl at the distribution this done
|
||||
|
||||
dnl Checks for programs.
|
||||
AC_CHECK_COMPILERS
|
||||
AC_ENABLE_SHARED(yes)
|
||||
AC_ENABLE_STATIC(no)
|
||||
KDE_PROG_LIBTOOL
|
||||
|
||||
dnl for NLS support. Call them in this order!
|
||||
dnl WITH_NLS is for the po files
|
||||
AM_KDE_WITH_NLS
|
||||
|
||||
KDE_USE_QT(3.0.0)
|
||||
AC_PATH_KDE
|
||||
dnl =======================================================
|
||||
dnl FILE: configure.in.in
|
||||
dnl =======================================================
|
||||
|
||||
#MIN_CONFIG(3.0.0)
|
||||
|
||||
dnl PACKAGE set before
|
||||
AC_C_BIGENDIAN
|
||||
AC_CHECK_KDEMAXPATHLEN
|
||||
|
||||
AC_ARG_WITH(rpm,
|
||||
[ --with-rpm use rpm instead of dpkg ],
|
||||
[use_rpm=$withval],
|
||||
[use_rpm=no])
|
||||
|
||||
echo -n "Package manager to use... "
|
||||
AM_CONDITIONAL(USE_RPM, test "x$use_rpm" != "xno")
|
||||
|
||||
if [ test "x$use_rpm" != "xno" ]; then
|
||||
AC_DEFINE_UNQUOTED(USE_RPM, 1, [Define if your package manager is not dpkg but RPM])
|
||||
echo "rpm"
|
||||
else
|
||||
echo "dpkg"
|
||||
fi
|
||||
|
||||
|
||||
KDE_CREATE_SUBDIRSLIST
|
||||
AC_CONFIG_FILES([ Makefile ])
|
||||
AC_CONFIG_FILES([ po/Makefile ])
|
||||
AC_CONFIG_FILES([ src/Makefile ])
|
||||
AC_CONFIG_FILES([ src/parsers/Makefile ])
|
||||
AC_OUTPUT
|
||||
# Check if KDE_SET_PREFIX was called, and --prefix was passed to configure
|
||||
if test -n "$kde_libs_prefix" -a -n "$given_prefix"; then
|
||||
# And if so, warn when they don't match
|
||||
if test "$kde_libs_prefix" != "$given_prefix"; then
|
||||
# And if kde doesn't know about the prefix yet
|
||||
echo ":"`kde-config --path exe`":" | grep ":$given_prefix/bin/:" 2>&1 >/dev/null
|
||||
if test $? -ne 0; then
|
||||
echo ""
|
||||
echo "Warning: you chose to install this package in $given_prefix,"
|
||||
echo "but KDE was found in $kde_libs_prefix."
|
||||
echo "For this to work, you will need to tell KDE about the new prefix, by ensuring"
|
||||
echo "that KDEDIRS contains it, e.g. export KDEDIRS=$given_prefix:$kde_libs_prefix"
|
||||
echo "Then restart KDE."
|
||||
echo ""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x$GXX = "xyes" -a x$kde_have_gcc_visibility = "xyes" -a x$kde_cv_val_qt_gcc_visibility_patched = "xno"; then
|
||||
echo ""
|
||||
echo "Your GCC supports symbol visibility, but the patch for Qt supporting visibility"
|
||||
echo "was not included. Therefore, GCC symbol visibility support remains disabled."
|
||||
echo ""
|
||||
echo "For better performance, consider including the Qt visibility supporting patch"
|
||||
echo "located at:"
|
||||
echo ""
|
||||
echo "http://bugs.kde.org/show_bug.cgi?id=109386"
|
||||
echo ""
|
||||
echo "and recompile all of Qt and KDE. Note, this is entirely optional and"
|
||||
echo "everything will continue to work just fine without it."
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if test "$all_tests" = "bad"; then
|
||||
if test ! "$cache_file" = "/dev/null"; then
|
||||
echo ""
|
||||
echo "Please remove the file $cache_file after changing your setup"
|
||||
echo "so that configure will find the changes next time."
|
||||
echo ""
|
||||
fi
|
||||
else
|
||||
echo ""
|
||||
echo "Good - your configure finished. Start make now"
|
||||
echo ""
|
||||
fi
|
@ -0,0 +1,22 @@
|
||||
#MIN_CONFIG(3.0.0)
|
||||
|
||||
AM_INIT_AUTOMAKE(kio-apt, 0.13.2)
|
||||
AC_C_BIGENDIAN
|
||||
AC_CHECK_KDEMAXPATHLEN
|
||||
|
||||
AC_ARG_WITH(rpm,
|
||||
[ --with-rpm use rpm instead of dpkg ],
|
||||
[use_rpm=$withval],
|
||||
[use_rpm=no])
|
||||
|
||||
echo -n "Package manager to use... "
|
||||
AM_CONDITIONAL(USE_RPM, test "x$use_rpm" != "xno")
|
||||
|
||||
if [ test "x$use_rpm" != "xno" ]; then
|
||||
AC_DEFINE_UNQUOTED(USE_RPM, 1, [Define if your package manager is not dpkg but RPM])
|
||||
echo "rpm"
|
||||
else
|
||||
echo "dpkg"
|
||||
fi
|
||||
|
||||
|
@ -0,0 +1,4 @@
|
||||
POFILES = AUTO
|
||||
|
||||
clean:
|
||||
rm -f *.gmo
|
@ -0,0 +1,165 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: 0.6\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2003-12-31 02:15+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Jakub Stachowski <qbast@go2.pl>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: apt.cpp:156
|
||||
msgid "Search"
|
||||
msgstr "Szukaj"
|
||||
|
||||
#: apt.cpp:157
|
||||
msgid "Show"
|
||||
msgstr "Pokaż"
|
||||
|
||||
#: apt.cpp:158
|
||||
msgid "Policy"
|
||||
msgstr "Ustawienia polityki"
|
||||
|
||||
#: apt.cpp:162
|
||||
msgid "Search for a file"
|
||||
msgstr "Szukaj pliku"
|
||||
|
||||
#: apt.cpp:163
|
||||
msgid "List the files of a package"
|
||||
msgstr "Lista plików pakietu"
|
||||
|
||||
#: apt.cpp:177 apt.cpp:178
|
||||
msgid "Page generated by kio_apt."
|
||||
msgstr "Strona wygenerowana przez kio_apt."
|
||||
|
||||
#: apt.cpp:323
|
||||
msgid "AptCache"
|
||||
msgstr ""
|
||||
|
||||
#: apt.cpp:324
|
||||
msgid "AptCache Interface"
|
||||
msgstr ""
|
||||
|
||||
#: apt.cpp:348
|
||||
msgid "AptCache search result for %1"
|
||||
msgstr ""
|
||||
|
||||
#: apt.cpp:349
|
||||
msgid "Search result for \"%1\""
|
||||
msgstr "Wyniki wyszukiwania \"%1\""
|
||||
|
||||
#: apt.cpp:358
|
||||
msgid "Can't launch \"apt-cache search %1\""
|
||||
msgstr "Nie można uruchomić \"apt-cache search %1\""
|
||||
|
||||
#: apt.cpp:367
|
||||
msgid "%1 results"
|
||||
msgstr "%1 wyników"
|
||||
|
||||
#: apt.cpp:406 apt.cpp:553 apt.cpp:723
|
||||
msgid "\"%1\" is not a valid package name"
|
||||
msgstr "\"%1\" nie jest prawidłową nazwą pakietu"
|
||||
|
||||
#: apt.cpp:416
|
||||
msgid "AptCache show result for %1"
|
||||
msgstr ""
|
||||
|
||||
#: apt.cpp:419 apt.cpp:425
|
||||
msgid "Description for \"%1\""
|
||||
msgstr "Opis \"%1\""
|
||||
|
||||
#: apt.cpp:420
|
||||
msgid "List package files"
|
||||
msgstr "Lista plików pakietu"
|
||||
|
||||
#: apt.cpp:434 apt.cpp:573
|
||||
msgid "Can't launch \"apt-cache policy %1\""
|
||||
msgstr "Nie można uruchomić \"apt-cache policy %1\""
|
||||
|
||||
#: apt.cpp:444
|
||||
msgid "Can't launch \"apt-cache show %1\""
|
||||
msgstr "Nie można uruchomić \"apt-cache show %1\""
|
||||
|
||||
#: apt.cpp:460
|
||||
msgid "No package found named \"%1\""
|
||||
msgstr "Nie znaleziono pakietu o nazwie \"%1\""
|
||||
|
||||
#: apt.cpp:464
|
||||
msgid "%1 versions found"
|
||||
msgstr "Znaleziono %1 wersji"
|
||||
|
||||
#: apt.cpp:531
|
||||
msgid "Version %1"
|
||||
msgstr "Wersja %1"
|
||||
|
||||
#: apt.cpp:565
|
||||
msgid "AptCache policy result for %1"
|
||||
msgstr ""
|
||||
|
||||
#: apt.cpp:566
|
||||
msgid "APT Policy for \"%1\""
|
||||
msgstr "Polityka APT dla \"%1\""
|
||||
|
||||
#: apt.cpp:593
|
||||
msgid "Installed"
|
||||
msgstr "Zainstalowany"
|
||||
|
||||
#: apt.cpp:595
|
||||
msgid "Candidate"
|
||||
msgstr "Kandydat"
|
||||
|
||||
#: apt.cpp:599
|
||||
msgid "The table of available versions"
|
||||
msgstr "Tablela dostępnych wersji"
|
||||
|
||||
#: apt.cpp:602
|
||||
msgid "Version Table"
|
||||
msgstr "Tabela wersji"
|
||||
|
||||
#: apt.cpp:659
|
||||
msgid "File search for %1"
|
||||
msgstr "Szukanie pliku %1"
|
||||
|
||||
#: apt.cpp:660
|
||||
msgid "File search for \"%1\""
|
||||
msgstr "Szukanie pliku \"%1\""
|
||||
|
||||
#: apt.cpp:668 apt.cpp:746
|
||||
msgid "Can't launch the package manager"
|
||||
msgstr "Nie można uruchomić menedżera pakietów"
|
||||
|
||||
#: apt.cpp:672
|
||||
msgid "%1 files found"
|
||||
msgstr "Znaleziono %1 plików"
|
||||
|
||||
#: apt.cpp:735
|
||||
msgid "Package file list for %1"
|
||||
msgstr "Lista plików pakietu %1"
|
||||
|
||||
#: apt.cpp:736
|
||||
msgid "Package file list for \"%1\""
|
||||
msgstr "Lista plików pakietu \"%1\""
|
||||
|
||||
#: apt.cpp:737
|
||||
msgid "Show package info"
|
||||
msgstr "Pokaż informacje o pakiecie"
|
||||
|
||||
#: apt.cpp:750
|
||||
msgid "%1 files in the package"
|
||||
msgstr "%1 plików w pakiecie"
|
||||
|
||||
#: dpkg.cpp:73
|
||||
msgid "%1 not found"
|
||||
msgstr "Nie znaleziono %1"
|
||||
|
||||
#: dpkg.cpp:110
|
||||
msgid "Package %1 is not installed"
|
||||
msgstr "Pakiet %1 nie jest zainstalowany"
|
@ -0,0 +1,258 @@
|
||||
# Swedish translation of kio-apt.
|
||||
# Copyright (C) 2006 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the kio-apt package.
|
||||
# Daniel Nylander <po@danielnylander.se>, 2006.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: kio-apt 0.13\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2003-12-31 02:15+0100\n"
|
||||
"PO-Revision-Date: 2006-06-25 23:34+0100\n"
|
||||
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
|
||||
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: apt.cpp:134 apt.cpp:135
|
||||
msgid "Page generated by kio_apt."
|
||||
msgstr "Sidan genererades av kio_apt."
|
||||
|
||||
#: apt.cpp:167
|
||||
msgid "Hide extended form"
|
||||
msgstr "Dölj utökat formulär"
|
||||
|
||||
#: apt.cpp:167
|
||||
msgid "Show extended form"
|
||||
msgstr "Visa utökat formulär"
|
||||
|
||||
#: apt.cpp:200
|
||||
msgid "Offline search"
|
||||
msgstr "Frånkopplad sökning"
|
||||
|
||||
#: apt.cpp:201
|
||||
msgid "Package search"
|
||||
msgstr "Paketsökning"
|
||||
|
||||
#: apt.cpp:205
|
||||
msgid "File search"
|
||||
msgstr "Filsökning"
|
||||
|
||||
#: apt.cpp:206
|
||||
msgid "Package info"
|
||||
msgstr "Paketinformation"
|
||||
|
||||
#: apt.cpp:208
|
||||
msgid "Search"
|
||||
msgstr "Sök"
|
||||
|
||||
#: apt.cpp:236
|
||||
msgid "KDE on Debian"
|
||||
msgstr "KDE på Debian"
|
||||
|
||||
#: apt.cpp:299
|
||||
msgid "\"%1\" is not a valid package name"
|
||||
msgstr "\"%1\" är inte ett giltigt paketnamn"
|
||||
|
||||
#: apt.cpp:454
|
||||
msgid "Search Form"
|
||||
msgstr "Sökformulär"
|
||||
|
||||
#: apt.cpp:476
|
||||
msgid "Package search result for \"%1\""
|
||||
msgstr "Paketsökresultat för \"%1\""
|
||||
|
||||
#: apt.cpp:482
|
||||
msgid "Error launching the search"
|
||||
msgstr "Fel vid start av sökning"
|
||||
|
||||
#: apt.cpp:487
|
||||
msgid "%1 results"
|
||||
msgstr "%1 resultat"
|
||||
|
||||
#: apt.cpp:504
|
||||
msgid "Hide file list"
|
||||
msgstr "Dölj fillista"
|
||||
|
||||
#: apt.cpp:504
|
||||
msgid "Show file list"
|
||||
msgstr "Visa fillista"
|
||||
|
||||
#: apt.cpp:543
|
||||
msgid "Can't launch \"apt-cache policy %1\""
|
||||
msgstr "Kan inte starta \"apt-cache policy %1\""
|
||||
|
||||
#: apt.cpp:554 apt.cpp:560
|
||||
msgid "Package description for \"%1\""
|
||||
msgstr "Paketbeskrivning för \"%1\""
|
||||
|
||||
#: apt.cpp:555
|
||||
msgid "List package files"
|
||||
msgstr "Lista paketfiler"
|
||||
|
||||
#: apt.cpp:573
|
||||
msgid "Can't launch \"apt-cache show %1\""
|
||||
msgstr "Kan inte starta \"apt-cache show %1\""
|
||||
|
||||
#: apt.cpp:578
|
||||
msgid "No package found named \"%1\""
|
||||
msgstr "Inget paket hittades med namnet \"%1\""
|
||||
|
||||
#: apt.cpp:604
|
||||
#, c-format
|
||||
msgid "Error listing files of %1"
|
||||
msgstr "Fel vid listning av filer i %1"
|
||||
|
||||
#: apt.cpp:616
|
||||
msgid "Cannot list files for non-installed packages"
|
||||
msgstr "Kan inte lista filer för icke-installerade paket"
|
||||
|
||||
#: apt.cpp:643
|
||||
msgid "Apt policy for \"%1\""
|
||||
msgstr "Apt-policy för \"%1\""
|
||||
|
||||
#: apt.cpp:649
|
||||
#, c-format
|
||||
msgid "Can't launch the policy for %1"
|
||||
msgstr "Kan inte starta policyn för %1"
|
||||
|
||||
#: apt.cpp:682
|
||||
msgid "File search for \"%1\""
|
||||
msgstr "Filsökning efter \"%1\""
|
||||
|
||||
#: apt.cpp:688 apt.cpp:735
|
||||
msgid "Can't launch the package manager"
|
||||
msgstr "Kan inte starta pakethanteraren"
|
||||
|
||||
#: apt.cpp:693
|
||||
msgid "%1 files found"
|
||||
msgstr "%1 filer hittades"
|
||||
|
||||
#: apt.cpp:725
|
||||
msgid "Files in \"%1\""
|
||||
msgstr "Filer i \"%1\""
|
||||
|
||||
#: apt.cpp:726
|
||||
msgid "Show package info"
|
||||
msgstr "Visa paketinformation"
|
||||
|
||||
#: apt.cpp:781
|
||||
msgid "No package manager command specified"
|
||||
msgstr "Inget kommando för pakethanterare har angivits"
|
||||
|
||||
#: apt.cpp:787
|
||||
msgid "No package specified"
|
||||
msgstr "Inget paket angivit"
|
||||
|
||||
#: apt.cpp:796
|
||||
msgid "Both package version and distribution are specified"
|
||||
msgstr "Både paketversion och distribution har angivits"
|
||||
|
||||
#: dpkg.cpp:90 rpm.cpp:91
|
||||
msgid "%1 not found"
|
||||
msgstr "%1 hittades inte"
|
||||
|
||||
#: dpkg.cpp:127 rpm.cpp:121
|
||||
msgid "Package %1 is not installed"
|
||||
msgstr "Paketet %1 är inte installerat"
|
||||
|
||||
#: dpkg.cpp:184
|
||||
msgid "packages.ubuntu.com"
|
||||
msgstr "packages.ubuntu.com"
|
||||
|
||||
#: dpkg.cpp:186 rpm.cpp:181
|
||||
msgid "File to search"
|
||||
msgstr "Fil att söka efter"
|
||||
|
||||
#: dpkg.cpp:187 rpm.cpp:182
|
||||
msgid "Architecture"
|
||||
msgstr "Arkitektur"
|
||||
|
||||
#: dpkg.cpp:188
|
||||
msgid "Intel x86"
|
||||
msgstr "Intel x86"
|
||||
|
||||
#: dpkg.cpp:189
|
||||
msgid "AMD 64"
|
||||
msgstr "AMD 64"
|
||||
|
||||
#: dpkg.cpp:190 rpm.cpp:192
|
||||
msgid "PowerPC"
|
||||
msgstr "PowerPC"
|
||||
|
||||
#: dpkg.cpp:192
|
||||
msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
#: dpkg.cpp:199 rpm.cpp:208
|
||||
msgid "Go online!"
|
||||
msgstr "Gå online!"
|
||||
|
||||
#: rpm.cpp:179
|
||||
msgid "rpmfind.net"
|
||||
msgstr "rpmfind.net"
|
||||
|
||||
#: rpm.cpp:183
|
||||
msgid "All"
|
||||
msgstr "Alla"
|
||||
|
||||
#: rpm.cpp:184
|
||||
msgid "Source"
|
||||
msgstr "Källkod"
|
||||
|
||||
#: rpm.cpp:185
|
||||
msgid "Intel 386"
|
||||
msgstr "Intel 386"
|
||||
|
||||
#: rpm.cpp:186
|
||||
msgid "Intel 486"
|
||||
msgstr "Intel 486"
|
||||
|
||||
#: rpm.cpp:187
|
||||
msgid "Intel 586"
|
||||
msgstr "Intel 586"
|
||||
|
||||
#: rpm.cpp:188
|
||||
msgid "Intel 686"
|
||||
msgstr "Intel 686"
|
||||
|
||||
#: rpm.cpp:189
|
||||
msgid "Motorola 680x0"
|
||||
msgstr "Motorola 680x0"
|
||||
|
||||
#: rpm.cpp:190
|
||||
msgid "Alpha"
|
||||
msgstr "Alpha"
|
||||
|
||||
#: rpm.cpp:191
|
||||
msgid "SPARC"
|
||||
msgstr "SPARC"
|
||||
|
||||
#: rpm.cpp:193
|
||||
msgid "ARM"
|
||||
msgstr "ARM"
|
||||
|
||||
#: rpm.cpp:194
|
||||
msgid "HP PA/RISC"
|
||||
msgstr "HP PA/RISC"
|
||||
|
||||
#: rpm.cpp:195
|
||||
msgid "Intel IA-64"
|
||||
msgstr "Intel IA-64"
|
||||
|
||||
#: rpm.cpp:196
|
||||
msgid "MIPS"
|
||||
msgstr "MIPS"
|
||||
|
||||
#: rpm.cpp:197
|
||||
msgid "MIPS (DEC)"
|
||||
msgstr "MIPS (DEC)"
|
||||
|
||||
#: rpm.cpp:198
|
||||
msgid "IBM S/390"
|
||||
msgstr "IBM S/390"
|
||||
|
||||
#: rpm.cpp:200
|
||||
msgid "Distribution"
|
||||
msgstr "Distribution"
|
@ -0,0 +1,25 @@
|
||||
INCLUDES = $(all_includes)
|
||||
|
||||
kde_module_LTLIBRARIES = kio_apt.la
|
||||
|
||||
METASOURCES = AUTO
|
||||
|
||||
kio_apt_la_SOURCES = aptcache.cpp apt.cpp regexps.cpp packagemanager.cpp dpkg.cpp
|
||||
|
||||
kio_apt_la_LIBADD = $(top_builddir)/src/parsers/libparsers.la -lkio
|
||||
kio_apt_la_LDFLAGS = -avoid-version -module $(all_libraries) $(KDE_PLUGIN)
|
||||
|
||||
protocoldir = $(kde_servicesdir)
|
||||
protocol_DATA = apt.protocol apt+http.protocol
|
||||
|
||||
appdatadir = $(kde_datadir)/kio_apt/
|
||||
appdata_DATA = kio_apt.css kdedeb_logo.png
|
||||
|
||||
messages: rc.cpp
|
||||
$(XGETTEXT) *.cpp -o $(podir)/kio_apt.pot
|
||||
|
||||
noinst_HEADERS = debug.h aptcache.h apt.h regexps.h dpkg.h packagemanager.h
|
||||
|
||||
searchproviderdir = $(kde_servicesdir)/searchproviders
|
||||
searchprovider_DATA = apt-search.desktop apt-file.desktop apt-files.desktop
|
||||
SUBDIRS = parsers
|
@ -0,0 +1,11 @@
|
||||
[Protocol]
|
||||
exec=kio_apt
|
||||
protocol=apt+http
|
||||
input=none
|
||||
output=stream
|
||||
reading=true
|
||||
defaultMimetype=text/html
|
||||
Icon=remote
|
||||
Description=A kioslave for using apt-cache functionalities inside konqueror
|
||||
determineMimetypeFromExtension=false
|
||||
DocPath=kio_apt/index.html
|
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Charset=
|
||||
Hidden=false
|
||||
Keys=apt-file
|
||||
Name=APT - Find File
|
||||
Query=apt:/fsearch?\\{@}
|
||||
ServiceTypes=SearchProvider
|
||||
Type=Service
|
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Charset=
|
||||
Hidden=false
|
||||
Keys=apt-files
|
||||
Name=APT - Filelist
|
||||
Query=apt:/list?\\{@}
|
||||
ServiceTypes=SearchProvider
|
||||
Type=Service
|
@ -0,0 +1,8 @@
|
||||
[Desktop Entry]
|
||||
Charset=
|
||||
Hidden=false
|
||||
Keys=apt-search
|
||||
Name=APT - Search Package
|
||||
Query=apt:/search?\\{@}
|
||||
ServiceTypes=SearchProvider
|
||||
Type=Service
|
@ -0,0 +1,946 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.org *
|
||||
* The forms are by Willy De la Court <wdl@linux-lovers.be> *
|
||||
* *
|
||||
* 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 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "apt.h"
|
||||
#include "regexps.h"
|
||||
|
||||
#include "dpkg.h"
|
||||
|
||||
#include "parsers/parsers.h"
|
||||
|
||||
#include <qcstring.h>
|
||||
|
||||
#include <kapplication.h>
|
||||
#include <kinstance.h>
|
||||
#include <kglobal.h>
|
||||
#include <kconfig.h>
|
||||
#include <kstandarddirs.h>
|
||||
#include <klocale.h>
|
||||
#include <kurl.h>
|
||||
#include <kio/slavebase.h>
|
||||
#include <kmessagebox.h>
|
||||
|
||||
#include <kdebug.h>
|
||||
|
||||
#include <qregexp.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <config.h>
|
||||
|
||||
using namespace KIO;
|
||||
|
||||
/*************************************************************************
|
||||
* Common definitions of HTML fragments
|
||||
*/
|
||||
|
||||
static const QString
|
||||
html_preamble("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Strict//EN\"\n"
|
||||
"\t\"http://www.w3.org/TR/html4/strict.dtd\">\n"
|
||||
"<html>\n");
|
||||
static const QString
|
||||
html_redirect(html_preamble +
|
||||
QString("<head>\n"
|
||||
"\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n"
|
||||
"\t<meta http-equiv=\"Refresh\" content=\"0 ; URL=%1\">\n"
|
||||
"</head>\n"
|
||||
"\n<body></body>\n"
|
||||
"</html>"));
|
||||
|
||||
static const QString
|
||||
html_head(html_preamble +
|
||||
QString("<head>\n"
|
||||
"\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n"
|
||||
"\t<link rel=\"stylesheet\" href=\"file:%1\">\n"
|
||||
"\t<title>%2</title>\n"
|
||||
"</head>\n\n"
|
||||
"<body>\n"));
|
||||
|
||||
static QString close_html_head();
|
||||
static QString open_html_head(const QString& title, bool links, AptProtocol const& config)
|
||||
{
|
||||
|
||||
static const QString
|
||||
html_head_table(
|
||||
"<table class=\"header\" style=\"background-image: url(file:%1);\"\n"
|
||||
"\t\tcellspacing=\"0\" cellpadding=\"0\">\n"
|
||||
"<tr>\n"
|
||||
"\t<td class=\"logo\" %2><img src=\"file:%3\" alt=\"%4\" style=\"border: 0px\" /></td>\n"
|
||||
"\t<td class=\"header-title\">%4</td>\n");
|
||||
|
||||
QString rowspan;
|
||||
if (links) rowspan = "rowspan=\"2\"";
|
||||
QString ret =
|
||||
html_head
|
||||
.arg(config.stylesheet())
|
||||
.arg(title)
|
||||
+ html_head_table
|
||||
.arg(config.header_background())
|
||||
.arg(rowspan)
|
||||
.arg(config.logo())
|
||||
.arg(config.logo_alt())
|
||||
.arg(title);
|
||||
|
||||
if (links)
|
||||
{
|
||||
return ret +
|
||||
"</tr>\n"
|
||||
"<tr>\n"
|
||||
"\t<td class=\"links\">\n"
|
||||
"\t<table class=\"links\" cellspacing=\"0\" cellpadding=\"0\">\n"
|
||||
"\t<tr>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
return ret + "</tr>\n</table>\n\n";
|
||||
}
|
||||
}
|
||||
static QString add_html_head_link(const QString& url, const QString& name, const QString& long_desc)
|
||||
{
|
||||
static const QString format("\t\t<td><a href=\"%1\" title=\"%2\">%3</a></td>\n");
|
||||
return format.arg(url).arg(long_desc).arg(name);
|
||||
}
|
||||
static QString close_html_head()
|
||||
{
|
||||
return "\t</tr>\n"
|
||||
"\t</table>\n"
|
||||
"\t</td>\n"
|
||||
"</tr>"
|
||||
"</table>";
|
||||
}
|
||||
|
||||
static const QString
|
||||
html_tail("<div class=\"footer\">%1</div>\n"
|
||||
"</body>\n"
|
||||
"</html>");
|
||||
|
||||
|
||||
QString AptProtocol::make_html_tail(const QString& note, bool with_form)
|
||||
{
|
||||
with_form = m_search && with_form;
|
||||
|
||||
QString ret;
|
||||
if (with_form)
|
||||
ret = "<hr>\n" + make_html_form();
|
||||
|
||||
if (!note.isEmpty())
|
||||
ret += html_tail.arg(note + ". " + i18n("Page generated by kio_apt."));
|
||||
else ret += html_tail.arg(i18n("Page generated by kio_apt."));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**********************************************************************************
|
||||
* Search form
|
||||
*/
|
||||
|
||||
static const QString
|
||||
html_form_begin("\n<form action=\"apt:/\" method=\"GET\">\n"
|
||||
"<table class=\"query\">\n");
|
||||
static const QString
|
||||
html_form_end("<tr>\n"
|
||||
"\t<td class=\"button\" colspan=\"2\"><input type=\"submit\" value=\"%1\"></td>\n"
|
||||
"</tr>\n"
|
||||
"</table>\n"
|
||||
"</form>\n");
|
||||
|
||||
static const QString
|
||||
html_form_line("<tr>\n"
|
||||
"\t<td><label for=\"%1\">%2</label></td>\n"
|
||||
"\t<td><input type=\"text\" name=\"%3\" id=\"%4\"></td>\n"
|
||||
"</tr>\n");
|
||||
|
||||
static QString make_html_form_line(const QString& type, const QString& label)
|
||||
{ return html_form_line.arg(type).arg(label).arg(type).arg(type); }
|
||||
|
||||
|
||||
static QString make_extform_cmd(bool ext_form, const KURL& query)
|
||||
{
|
||||
QString cmd = ext_form ? "0" : "1";
|
||||
QString msg = ext_form ? i18n("Hide extended form") : i18n("Show extended form");
|
||||
|
||||
KURL url(query);
|
||||
url.addQueryItem("extended_form", cmd);
|
||||
url.setRef("extformcmd");
|
||||
|
||||
return
|
||||
"<div class=\"command\" id=\"extformcmd\">\n"
|
||||
"\t<a href=\"" + url.htmlURL() + "\">[" + msg + "]</a>\n"
|
||||
"</div>\n";
|
||||
}
|
||||
|
||||
/** Prints the HTML code for the query form */
|
||||
QString AptProtocol::make_html_form() const
|
||||
{
|
||||
bool can_fsearch = false;
|
||||
bool ext_form = KGlobal::config() -> readBoolEntry("extended_form", true);
|
||||
// Only in config-file. Needed for some dpkg-based distros that are not Debian
|
||||
can_fsearch = can_searchfile(true);
|
||||
|
||||
bool online = false;
|
||||
bool online_form = KGlobal::config() -> readBoolEntry("online_form", true);
|
||||
if (m_adept_batch)
|
||||
online = online_form && (!m_internal) && ext_form && m_adept_batch -> capabilities(PackageManager::ONLINE);
|
||||
|
||||
QString ret;
|
||||
QTextOStream stream(&ret);
|
||||
stream << make_extform_cmd(ext_form, m_query);
|
||||
|
||||
if (online)
|
||||
stream << "<table class=\"queryform\"><tr><td>\n";
|
||||
|
||||
stream << html_form_begin;
|
||||
stream << "<tr><td colspan=\"2\" class=\"title\">" + i18n("Offline search") + "</td></tr>" << endl;
|
||||
stream << make_html_form_line("search", i18n("Package search"));
|
||||
if (ext_form)
|
||||
{
|
||||
if (can_fsearch)
|
||||
stream << make_html_form_line("fsearch", i18n("File search"));
|
||||
stream << make_html_form_line("show", i18n("Package info"));
|
||||
}
|
||||
stream << html_form_end.arg( i18n("Search") );
|
||||
|
||||
if (online)
|
||||
{
|
||||
stream << "\n</td><td>\n";
|
||||
stream << m_adept_batch -> getOnlineForm();
|
||||
stream << "\n</td></tr>\n</table>";
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/****************************************************************************************/
|
||||
|
||||
AptProtocol::AptProtocol( const QCString &pool_socket, const QCString &app_socket )
|
||||
: SlaveBase( "kio_apt", pool_socket, app_socket ),
|
||||
m_adept_batch(0), m_parser(0)
|
||||
|
||||
{
|
||||
KStandardDirs* dirs = KGlobal::dirs();
|
||||
m_stylesheet = dirs->findResource( "data", "kio_apt/kio_apt.css" );
|
||||
|
||||
m_logo = dirs->findResource( "data", "kio_apt/"
|
||||
+ KGlobal::config() -> readEntryUntranslated("logo", "kdedeb_logo.png" ) );
|
||||
|
||||
m_header_background = dirs->findResource( "data", "kio_apt/"
|
||||
+ KGlobal::config() -> readEntryUntranslated("background", "headerbg.png" ) );
|
||||
|
||||
m_logo_alt = KGlobal::config() -> readEntryUntranslated("alt_tag", i18n("KDE on Debian") );
|
||||
|
||||
connect(&m_process, SIGNAL(token(const QString&, const QString&)),
|
||||
this, SLOT(token_dispatch(const QString&, const QString&)));
|
||||
|
||||
m_adept_batch = new Dpkg(this);
|
||||
|
||||
if (m_adept_batch)
|
||||
{
|
||||
connect(m_adept_batch, SIGNAL(token(const QString&, const QString&)),
|
||||
this, SLOT(token_dispatch(const QString&, const QString&)));
|
||||
}
|
||||
}
|
||||
|
||||
AptProtocol::~AptProtocol() {}
|
||||
|
||||
QString AptProtocol::stylesheet() const { return m_stylesheet; }
|
||||
QString AptProtocol::logo() const { return m_logo; }
|
||||
QString AptProtocol::logo_alt() const { return m_logo_alt; }
|
||||
QString AptProtocol::header_background() const { return m_header_background; }
|
||||
|
||||
void AptProtocol::token_dispatch(const QString& name, const QString& val)
|
||||
{
|
||||
if (m_parser.get())
|
||||
(*m_parser)(this, name, val);
|
||||
}
|
||||
|
||||
void AptProtocol::data(const QCString& string)
|
||||
{
|
||||
using namespace Parsers;
|
||||
(*this) << string;
|
||||
}
|
||||
|
||||
void AptProtocol::data(const QString& string)
|
||||
{
|
||||
using namespace Parsers;
|
||||
(*this) << string;
|
||||
}
|
||||
|
||||
void AptProtocol::data(const char* string)
|
||||
{
|
||||
using namespace Parsers;
|
||||
(*this) << string;
|
||||
}
|
||||
|
||||
void AptProtocol::data(const QByteArray& array)
|
||||
{ SlaveBase::data(array); }
|
||||
|
||||
void AptProtocol::mimetype( const KURL & /*url*/ )
|
||||
{
|
||||
mimeType( "text/html" );
|
||||
finished();
|
||||
}
|
||||
|
||||
bool AptProtocol::check_validpackage(const QString& query)
|
||||
{
|
||||
static QRegExp rx_pkgname(rxs_pkgname);
|
||||
if (!rx_pkgname.exactMatch(query))
|
||||
{
|
||||
error( ERR_SLAVE_DEFINED, i18n("\"%1\" is not a valid package name").arg(query) );
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/********************************************************************
|
||||
* Main entry point
|
||||
*/
|
||||
|
||||
static QString read_option(QMap<QString, QString>& map, const QString& name, const QString& def)
|
||||
{
|
||||
if (!map.contains(name)) return def;
|
||||
QString ret = map[name];
|
||||
map.remove(name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void AptProtocol::get ( const KURL& url )
|
||||
{
|
||||
/* The queries have two possible formats :
|
||||
|
||||
- clean way to call a command
|
||||
apt:/command?query&option=value&option=value&...
|
||||
- needed to simplify forms
|
||||
apt:/?command=query&command2=&command3=&option=value&option=value&...
|
||||
- calls only the query form page
|
||||
apt:/
|
||||
*/
|
||||
|
||||
typedef void (AptProtocol::*Command)(const QString&, const QueryOptions&);
|
||||
static const QString commands[] =
|
||||
{ "search", "show", "policy",
|
||||
"fsearch", "list", "online",
|
||||
"get", QString::null };
|
||||
static const Command methods[] =
|
||||
{ &AptProtocol::search, &AptProtocol::show, &AptProtocol::policy,
|
||||
&AptProtocol::searchfile, &AptProtocol::listfiles, &AptProtocol::online,
|
||||
&AptProtocol::adept_batch };
|
||||
|
||||
QString command, query;
|
||||
Command method = 0;
|
||||
QueryOptions options = url.queryItems(KURL::CaseInsensitiveKeys);
|
||||
|
||||
// canonize the part before ? : remove the first /
|
||||
QString path = url.path();
|
||||
QString host = url.host();
|
||||
|
||||
if ( path.isEmpty() && !host.isEmpty() )
|
||||
{
|
||||
path = host;
|
||||
}
|
||||
|
||||
if (path [0] == '/')
|
||||
path = path.right(path.length() - 1);
|
||||
|
||||
for (int cmd_idx = 0; !commands[cmd_idx].isNull(); ++cmd_idx)
|
||||
{
|
||||
const QString cmd_it = commands[cmd_idx];
|
||||
|
||||
// Look if the command is in the path part
|
||||
if (command.isEmpty() && cmd_it == path)
|
||||
{
|
||||
command = cmd_it;
|
||||
method = methods[cmd_idx];
|
||||
}
|
||||
if (options.contains(cmd_it))
|
||||
{
|
||||
|
||||
if (options[cmd_it].isEmpty() && !options[cmd_it].isNull())
|
||||
{ // we have a &command=& format, we remove it
|
||||
options.remove(cmd_it);
|
||||
}
|
||||
else if (command.isEmpty() && !options[cmd_it].isEmpty())
|
||||
{ // the command is set in the options map
|
||||
command = cmd_it;
|
||||
method = methods[cmd_idx];
|
||||
query = options[cmd_it];
|
||||
options.remove(cmd_it);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Well, we have no query for now, let's find it
|
||||
if (query.isEmpty())
|
||||
{
|
||||
for (QueryOptions::Iterator i = options.begin(); i != options.end(); ++i)
|
||||
{
|
||||
if ((*i).isNull())
|
||||
{
|
||||
query = KURL::decode_string(i.key());
|
||||
options.remove(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Interpret the ioslave config options
|
||||
// and remove them from the options map
|
||||
QString opt = read_option(options, "extended_form", QString::null);
|
||||
if (!opt.isNull())
|
||||
{
|
||||
bool ext_form = (opt != "0");
|
||||
KGlobal::config() -> writeEntry("extended_form", ext_form);
|
||||
}
|
||||
|
||||
// Enable install/remove/upgrade/...
|
||||
opt = read_option(options, "enable_actions", "1");
|
||||
m_act = (opt != "0");
|
||||
|
||||
opt = read_option(options, "enable_search", "1");
|
||||
m_search = (opt != "0");
|
||||
|
||||
// Allow links outside of apt:/ hierarchy
|
||||
opt = read_option(options, "stay_internal", "0");
|
||||
m_internal = (opt == "1");
|
||||
|
||||
// Sync the config (must use kcfg sometime :p)
|
||||
KGlobal::config() -> sync();
|
||||
|
||||
if (command.isEmpty() || query.isEmpty())
|
||||
{
|
||||
//If path isn't empty, then a package is to be installed via an apt:/ link
|
||||
if ( !path.isEmpty())
|
||||
{
|
||||
query = "install";
|
||||
options["package"] = path;
|
||||
options["weblinkinstall"] = 1;
|
||||
adept_batch(query, options);
|
||||
return;
|
||||
}
|
||||
|
||||
// No query or no command, we go in help mode
|
||||
m_query = buildURL(KURL("apt:/"));
|
||||
help();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_query = buildURL(command, query);
|
||||
m_query.setHTMLRef(url.htmlRef());
|
||||
for (QueryOptions::ConstIterator i = options.begin(); i != options.end(); ++i)
|
||||
m_query.addQueryItem(i.key(), i.data());
|
||||
|
||||
kdDebug() << "Old url " << url << ", new url " << m_query << endl;
|
||||
|
||||
if (m_query != url)
|
||||
{
|
||||
redirection(m_query);
|
||||
data(QByteArray());
|
||||
finished();
|
||||
return;
|
||||
}
|
||||
|
||||
(this->*method)(query, options);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
*
|
||||
* form
|
||||
*
|
||||
*/
|
||||
|
||||
void AptProtocol::help()
|
||||
{
|
||||
mimeType("text/html");
|
||||
|
||||
QString buffer;
|
||||
QTextOStream stream(&buffer);
|
||||
stream
|
||||
<< open_html_head(i18n("Search Form"), false, *this)
|
||||
<< make_html_form()
|
||||
<< make_html_tail(QString::null, false);
|
||||
data(buffer);
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* apt-cache search
|
||||
*/
|
||||
|
||||
void AptProtocol::search( const QString& query, const QueryOptions& /*options*/ )
|
||||
{
|
||||
mimeType("text/html");
|
||||
|
||||
data(open_html_head(i18n("Package search result for \"%1\"").arg(query), false, *this));
|
||||
|
||||
m_parser.reset(new Parsers::Search);
|
||||
(*m_parser)(this, "begin", query);
|
||||
if (!m_process.search( query ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Error launching the search").arg(query));
|
||||
return;
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
data(make_html_tail( i18n("%1 results").arg(m_parser -> result_count())) );
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* apt-cache show
|
||||
*/
|
||||
|
||||
static QString filelist_cmd(bool show_filelist, const KURL& query)
|
||||
{
|
||||
QString value = show_filelist ? "0" : "1";
|
||||
QString msg = show_filelist ? i18n("Hide file list") : i18n("Show file list");
|
||||
|
||||
KURL url(query);
|
||||
url.addQueryItem("show_filelist", value);
|
||||
url.setRef("filelistcmd");
|
||||
|
||||
return
|
||||
"<div class=\"command\" id=\"filelistcmd\">\n"
|
||||
"\t<a href=\"" + url.htmlURL() + "\">"
|
||||
"[" + msg + "]"
|
||||
"</a>\n"
|
||||
"</div>";
|
||||
}
|
||||
|
||||
void AptProtocol::show(const QString& package, const QueryOptions& options)
|
||||
{
|
||||
if (!check_validpackage(package)) return;
|
||||
|
||||
if (options.contains("show_filelist"))
|
||||
{
|
||||
KGlobal::config() -> writeEntry("show_filelist", options["show_filelist"] != "0");
|
||||
KGlobal::config() -> sync();
|
||||
}
|
||||
|
||||
mimeType("text/html");
|
||||
|
||||
QString installed_version;
|
||||
|
||||
/** First, we parse policy
|
||||
* We use here the fact that HTML is generated
|
||||
* during the call of (*policy)(...,"end",...),
|
||||
* since the header changes when the package
|
||||
* is installed or not */
|
||||
Parsers::Policy* policy = new Parsers::Policy(package, m_act);
|
||||
m_parser.reset(policy);
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
{
|
||||
if (!m_process.policy( package ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch \"apt-cache policy %1\"").arg(package));
|
||||
return;
|
||||
}
|
||||
|
||||
installed_version = policy->getInstalled();
|
||||
bool can_list = can_listfiles(!installed_version.isEmpty());
|
||||
QString buffer;
|
||||
QTextOStream s(&buffer);
|
||||
if (can_list)
|
||||
{
|
||||
KURL url = buildURL("list", package);
|
||||
s << open_html_head(i18n("Package description for \"%1\"").arg(package), true, *this)
|
||||
<< add_html_head_link(url.htmlURL(), i18n("List package files"), "")
|
||||
<< close_html_head();
|
||||
}
|
||||
else
|
||||
{
|
||||
s << open_html_head(i18n("Package description for \"%1\"").arg(package), false, *this);
|
||||
}
|
||||
data(buffer);
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
|
||||
/** Add package description section */
|
||||
m_parser.reset(new Parsers::Show(package, installed_version, m_act));
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
{
|
||||
if (!m_process.show(package))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch \"apt-cache show %1\"").arg(package));
|
||||
return;
|
||||
}
|
||||
if (!m_parser -> result_count())
|
||||
{
|
||||
data("<div class=\"error\">" + i18n("No package found named \"%1\"").arg(package) + "</div>\n");
|
||||
data(make_html_tail());
|
||||
data(QByteArray());
|
||||
finished();
|
||||
return;
|
||||
}
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
|
||||
|
||||
/** Add file list (if enabled) */
|
||||
bool show_filelist = KGlobal::config() -> readBoolEntry("show_filelist", false);
|
||||
if ( show_filelist )
|
||||
{
|
||||
if (can_listfiles(!installed_version.isEmpty()))
|
||||
{
|
||||
data(
|
||||
"<hr>\n"
|
||||
+ filelist_cmd(show_filelist, m_query)
|
||||
+ "<div class=\"filelist\">\n");
|
||||
|
||||
m_parser.reset(new Parsers::List(!m_internal));
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
if (!m_adept_batch -> list(package))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Error listing files of %1").arg(package));
|
||||
return;
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
data("\n</div>\n");
|
||||
}
|
||||
else // cannot list files
|
||||
{
|
||||
data(
|
||||
"<hr>\n"
|
||||
+ filelist_cmd(show_filelist, m_query)
|
||||
+ "<div class=\"error\">" + i18n("Cannot list files for non-installed packages") + "</div>\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
data("<hr>\n" + filelist_cmd(show_filelist, m_query));
|
||||
}
|
||||
|
||||
|
||||
data(make_html_tail());
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* apt-cache policy
|
||||
*/
|
||||
|
||||
void AptProtocol::policy( const QString& query, const QueryOptions& /*options*/ )
|
||||
{
|
||||
if (!check_validpackage(query)) return;
|
||||
|
||||
mimeType("text/html");
|
||||
|
||||
data( open_html_head(i18n("Apt policy for \"%1\"").arg(query), false, *this) );
|
||||
|
||||
m_parser.reset(new Parsers::Policy(query, m_act));
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
if (!m_process.policy( query ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch the policy for %1").arg(query));
|
||||
return;
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
data(make_html_tail());
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* Search the package which contains a specific file
|
||||
*/
|
||||
|
||||
static const QString
|
||||
html_dpkgs_begin("\n\n<table>\n"),
|
||||
html_dpkgs_end("\n\n</table>\n");
|
||||
|
||||
|
||||
bool AptProtocol::can_searchfile(bool is_installed) const
|
||||
{
|
||||
if (!m_adept_batch) return false;
|
||||
int caps = m_adept_batch -> capabilities(PackageManager::SEARCH_FILE | PackageManager::OFFLINE);
|
||||
if (!caps) return false;
|
||||
return is_installed || !(caps & PackageManager::INSTALLED_ONLY);
|
||||
}
|
||||
void AptProtocol::searchfile(const QString& query, const QueryOptions& /*options*/)
|
||||
{
|
||||
if (!can_searchfile(true)) return;
|
||||
|
||||
mimeType("text/html");
|
||||
data( open_html_head(i18n("File search for \"%1\"").arg(query), false, *this) + html_dpkgs_begin );
|
||||
|
||||
m_parser.reset(new Parsers::FileSearch);
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
if (!m_adept_batch -> search( query ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch the package manager").arg(query));
|
||||
return;
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
data( html_dpkgs_end + make_html_tail(i18n("%1 files found").arg(m_parser -> result_count())) );
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* List the files of a package
|
||||
*/
|
||||
|
||||
bool AptProtocol::can_listfiles(bool is_installed) const
|
||||
{
|
||||
if (!m_adept_batch) return false;
|
||||
int caps = m_adept_batch -> capabilities(PackageManager::LIST_FILES | PackageManager::OFFLINE);
|
||||
if (!caps) return false;
|
||||
return is_installed || !(caps & PackageManager::INSTALLED_ONLY);
|
||||
}
|
||||
|
||||
void AptProtocol::listfiles(const QString& query, const QueryOptions& /*options*/)
|
||||
{
|
||||
if (!can_listfiles(true)) return;
|
||||
if (!check_validpackage(query)) return;
|
||||
|
||||
mimeType("text/html");
|
||||
|
||||
KURL ret_url = buildURL("show", query);
|
||||
|
||||
QString buffer;
|
||||
QTextOStream stream(&buffer);
|
||||
stream
|
||||
<< open_html_head(i18n("Files in \"%1\"").arg(query), true, *this)
|
||||
<< add_html_head_link(ret_url.htmlURL(), i18n("Show package info"), "")
|
||||
<< close_html_head()
|
||||
<< endl;
|
||||
data(buffer);
|
||||
|
||||
m_parser.reset(new Parsers::List(!m_internal));
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
if (!m_adept_batch -> list( query ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch the package manager").arg(query));
|
||||
return;
|
||||
}
|
||||
(*m_parser)(this, "end", QString::null);
|
||||
|
||||
data(make_html_tail());
|
||||
data(QByteArray());
|
||||
finished();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* Go use online search services (like packages.debian.org for instance)
|
||||
*/
|
||||
|
||||
//bool AptProtocol::can_online(int mode) const
|
||||
//{
|
||||
//// if (!m_adept_batch) return false;
|
||||
//// return m_adept_batch -> capabilities(PackageManager::ONLINE | mode);
|
||||
// return false;
|
||||
//}
|
||||
|
||||
void AptProtocol::online(const QString& query, const QueryOptions& options)
|
||||
{
|
||||
QString url = m_adept_batch -> getOnlineURL(query, options);
|
||||
redirection(url);
|
||||
finished();
|
||||
return;
|
||||
}
|
||||
|
||||
/***********************************************************************************
|
||||
* Send commands for adept_batch
|
||||
*/
|
||||
void AptProtocol::adept_batch(const QString& query, const QueryOptions& options)
|
||||
{
|
||||
p=NULL;
|
||||
|
||||
QString command;
|
||||
QString url;
|
||||
QStringList plist;
|
||||
QStringList puninst;
|
||||
QStringList pinst;
|
||||
int pcount;
|
||||
int ip;
|
||||
|
||||
if (query == "install" || query.isEmpty()) {
|
||||
command = "kdesu adept_batch install ";
|
||||
} else if (query == "remove") {
|
||||
command = "kdesu adept_batch remove ";
|
||||
}
|
||||
|
||||
if (command.isEmpty())
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("No package manager command specified"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!options.contains("package"))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("No package specified"));
|
||||
return;
|
||||
}
|
||||
|
||||
plist = QStringList::split(", ", options["package"], false);
|
||||
pcount = plist.count();
|
||||
command += plist.join(" ");
|
||||
|
||||
if (pcount == 1)
|
||||
{
|
||||
if (query == "install")
|
||||
ip = SlaveBase::messageBox(QuestionYesNo, i18n("Do you want to install %1 ?").arg(plist[0]), i18n("Package Installation"));
|
||||
else
|
||||
ip = SlaveBase::messageBox(QuestionYesNo, i18n("Do you want to remove %1 ?").arg(plist[0]), i18n("Package Removal"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (query == "install")
|
||||
ip = SlaveBase::messageBox(QuestionYesNo,i18n("Do you want to install the following %1 packages ?\n%2").arg(pcount).arg(options["package"]));
|
||||
else
|
||||
ip = SlaveBase::messageBox(QuestionYesNo,i18n("Do you want to remove the following %1 packages ?\n").arg(pcount).arg(options["package"]));
|
||||
}
|
||||
|
||||
kdDebug(DEBUG_ZONE) << command << endl;
|
||||
|
||||
if (ip == KMessageBox::Yes)
|
||||
{
|
||||
p = new KShellProcess;
|
||||
p->clearArguments();
|
||||
*p << command;
|
||||
p->start( KProcess::Block, KProcess::All );
|
||||
|
||||
for(int i = 0; i != pcount; ++i)
|
||||
{
|
||||
QString installed_version;
|
||||
|
||||
Parsers::Policy* policy = new Parsers::Policy(plist[i], m_act);
|
||||
m_parser.reset(policy);
|
||||
(*m_parser)(this, "begin", QString::null);
|
||||
{
|
||||
if (!m_process.policy( plist[i] ))
|
||||
{
|
||||
error(ERR_SLAVE_DEFINED, i18n("Can't launch \"apt-cache policy %1\"").arg(plist[i]));
|
||||
return;
|
||||
}
|
||||
|
||||
installed_version = policy->getInstalled();
|
||||
if (installed_version.isEmpty())
|
||||
{
|
||||
puninst += plist[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
pinst += plist[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (options.contains("weblinkinstall"))
|
||||
{
|
||||
if (puninst.count() == 0)
|
||||
{
|
||||
messageBox(Information,i18n("Installation successfull."));
|
||||
}
|
||||
else
|
||||
{
|
||||
QString toto = puninst.join(" ");
|
||||
messageBox(Information,i18n("There was a problem installing %1.").arg(toto));
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
url = "apt:/show?";
|
||||
// Outside of a weblink, only one package can be installed at time
|
||||
url += plist[0];
|
||||
redirection(url);
|
||||
data(QByteArray());
|
||||
finished();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
KURL AptProtocol::buildURL( const QString & command, const QString & query ) const
|
||||
{
|
||||
KURL url;
|
||||
url.setProtocol("apt");
|
||||
if (!command.startsWith("/"))
|
||||
url.setPath("/" + command);
|
||||
else
|
||||
url.setPath(command);
|
||||
url.setQuery(query);
|
||||
return buildURL(url);
|
||||
}
|
||||
|
||||
KURL AptProtocol::buildURL( const KURL& query ) const
|
||||
{
|
||||
KURL url(query);
|
||||
|
||||
if (!m_act)
|
||||
url.addQueryItem("enable_actions", "0");
|
||||
if (!m_search)
|
||||
url.addQueryItem("enable_search", "0");
|
||||
if (m_internal)
|
||||
url.addQueryItem("stay_internal", "1");
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
/***********************************************************************************
|
||||
*
|
||||
* kdemain
|
||||
*
|
||||
*/
|
||||
|
||||
extern "C" {
|
||||
int kdemain( int argc, char **argv ) {
|
||||
KInstance instance( "kio_apt" );
|
||||
|
||||
if ( argc != 4 ) {
|
||||
kdDebug( DEBUG_ZONE ) << "Usage: kio_apt protocol domain-socket1 domain-socket2" << endl;
|
||||
exit ( -1 );
|
||||
}
|
||||
|
||||
AptProtocol slave( argv[ 2 ], argv[ 3 ] );
|
||||
slave.dispatchLoop();
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#include "apt.moc"
|
@ -0,0 +1,137 @@
|
||||
#ifndef KIOAPT_APTPROTOCOL_H
|
||||
#define KIOAPT_APTPROTOCOL_H
|
||||
|
||||
#include <qstring.h>
|
||||
#include <qcstring.h>
|
||||
|
||||
#include <kurl.h>
|
||||
#include <kio/global.h>
|
||||
#include <kio/slavebase.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "aptcache.h"
|
||||
#include "packagemanager.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
class QCString;
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
class Parser;
|
||||
}
|
||||
|
||||
class AptProtocol : public QObject, public KIO::SlaveBase {
|
||||
Q_OBJECT
|
||||
|
||||
friend class AptCache;
|
||||
|
||||
AptCache m_process;
|
||||
PackageManager* m_adept_batch;
|
||||
|
||||
typedef QMap<QString, QString> QueryOptions;
|
||||
|
||||
/** This this the URL that should be used if we want
|
||||
* to get the same output again. It is especially
|
||||
* used in the make_html_form for the command link.
|
||||
*
|
||||
* The get() method sets it to apt:/command?query
|
||||
* the various methods should add the relevant options,
|
||||
* that is options which modify the query itself.
|
||||
* The GUI-related options (like show_filelist in the
|
||||
* show command) should NOT be added
|
||||
*/
|
||||
KURL m_query;
|
||||
|
||||
/** if m_act is false, the ioslave is in browse-only
|
||||
* mode (for forbidding install, for instance) */
|
||||
bool m_act, m_search, m_internal;
|
||||
|
||||
QString m_stylesheet;
|
||||
QString m_header_background;
|
||||
QString m_logo;
|
||||
QString m_logo_alt;
|
||||
|
||||
|
||||
public:
|
||||
AptProtocol( const QCString &pool_socket, const QCString &app_socket );
|
||||
virtual ~AptProtocol();
|
||||
virtual void mimetype( const KURL& url );
|
||||
virtual void get ( const KURL& url );
|
||||
|
||||
/** Sends the string to the ioslave's master
|
||||
* SlaveBase::data() sends a byte array as is. Since we
|
||||
* definitely don't want to send \0 to the master,
|
||||
* we redefine data() for strings */
|
||||
void data(const QCString& string);
|
||||
|
||||
/** @overload */
|
||||
void data(const QString& string);
|
||||
|
||||
/** @overload */
|
||||
void data(const char* string);
|
||||
|
||||
void data(const QByteArray& array);
|
||||
|
||||
KURL buildURL(const QString& command, const QString& query) const;
|
||||
KURL buildURL(const KURL& query) const;
|
||||
|
||||
QString stylesheet() const;
|
||||
QString header_background() const;
|
||||
QString logo() const;
|
||||
QString logo_alt() const;
|
||||
|
||||
private slots:
|
||||
void token_dispatch(const QString& tag, const QString& value);
|
||||
|
||||
private:
|
||||
std::auto_ptr<Parsers::Parser> m_parser;
|
||||
|
||||
/** apt-cache search
|
||||
* Performs apt-cache search, with the query encoded in url.query()
|
||||
* and sends the result as an HTML file */
|
||||
void search( const QString& url, const QueryOptions& options );
|
||||
|
||||
/** apt-cache show
|
||||
* Performs apt-cache search, with the package name encoded in url.query()
|
||||
* and sends the result as an HTML file.
|
||||
* It checks that the query contains a valid package name */
|
||||
void show( const QString& url, const QueryOptions& options );
|
||||
|
||||
/** apt-cache policy
|
||||
* Performs apt-cache policy, with the package name encoded in url.query()
|
||||
* and sends the result as an HTML file.
|
||||
* It checks that the query contains a valid package name */
|
||||
void policy( const QString& url, const QueryOptions& options );
|
||||
|
||||
/**
|
||||
* Sends an application/x-adept_batch file with commands
|
||||
* understandable by adept_batch */
|
||||
void adept_batch( const QString& url, const QueryOptions& options );
|
||||
|
||||
/**
|
||||
* Shows a form where one can enter parameters for some queries
|
||||
**/
|
||||
void help();
|
||||
|
||||
/** Offline listing of the file of a package */
|
||||
bool can_listfiles(bool is_installed) const;
|
||||
void listfiles( const QString& query, const QueryOptions& options);
|
||||
|
||||
/** Offline file search.
|
||||
* Searches the package which contains the specified file */
|
||||
bool can_searchfile(bool is_installed) const;
|
||||
void searchfile( const QString& query, const QueryOptions& options);
|
||||
|
||||
bool can_online(int mode) const;
|
||||
void online( const QString& query, const QueryOptions& options);
|
||||
|
||||
bool check_validpackage(const QString& query);
|
||||
QString make_html_form() const;
|
||||
QString make_html_tail(const QString& note = QString::null, bool with_form = true);
|
||||
|
||||
KShellProcess * p;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,11 @@
|
||||
[Protocol]
|
||||
exec=kio_apt
|
||||
protocol=apt
|
||||
input=none
|
||||
output=stream
|
||||
reading=true
|
||||
defaultMimetype=text/html
|
||||
Icon=kioapt
|
||||
Description=A kioslave for using apt-cache functionalities inside konqueror
|
||||
determineMimetypeFromExtension=false
|
||||
DocPath=kio_apt/index.html
|
@ -0,0 +1,292 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#include "aptcache.h"
|
||||
#include "apt.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include "regexps.h"
|
||||
|
||||
#include <qstringlist.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
#include <kdebug.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <errno.h>
|
||||
|
||||
|
||||
AptCache::AptCache()
|
||||
{
|
||||
connect(&m_process, SIGNAL(receivedStderr(KProcess*, char*, int)),
|
||||
this, SLOT(receivedStdErr(KProcess*, char*, int )));
|
||||
connect(&m_process, SIGNAL(receivedStdout(KProcess*, char*, int)),
|
||||
this, SLOT(receivedStdOut(KProcess*, char*, int )));
|
||||
}
|
||||
AptCache::~AptCache() {}
|
||||
|
||||
|
||||
|
||||
|
||||
static QStringList received(QString& buffer, char* input, int input_len)
|
||||
{
|
||||
buffer += QString::fromLatin1(input, input_len);
|
||||
QStringList ret = QStringList::split('\n', buffer, true);
|
||||
if (!buffer.endsWith("\n"))
|
||||
{
|
||||
buffer = ret.last();
|
||||
ret.pop_back();
|
||||
}
|
||||
else
|
||||
buffer = "";
|
||||
|
||||
return ret;
|
||||
}
|
||||
void AptCache::receivedStdErr( KProcess * /*process*/, char * buffer, int len )
|
||||
{
|
||||
static QRegExp rx_we("(W|E):\\s+(.*)");
|
||||
|
||||
QStringList lines = received(m_received_err, buffer, len);
|
||||
for (QStringList::ConstIterator i = lines.begin(); i != lines.end(); ++i)
|
||||
{
|
||||
if (rx_we.exactMatch(*i))
|
||||
{
|
||||
if (rx_we.cap(1) == "E") emit token("error", rx_we.cap(2));
|
||||
else emit token("warning", rx_we.cap(2));
|
||||
}
|
||||
else
|
||||
{
|
||||
kdDebug() << "Unmatched error : " << *i << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
void AptCache::receivedStdOut( KProcess * /*process*/, char * buffer, int len )
|
||||
{
|
||||
QStringList lines = received(m_received_out, buffer, len);
|
||||
(this->*m_receive)(lines);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AptCache::clear()
|
||||
{
|
||||
m_process.clearArguments();
|
||||
m_attribute = "";
|
||||
m_received_err = "";
|
||||
m_received_out = "";
|
||||
}
|
||||
|
||||
bool AptCache::search(const QString& expression)
|
||||
{
|
||||
clear();
|
||||
|
||||
m_process.setEnvironment("LANGUAGE", "C");
|
||||
m_process << "apt-cache" << "search";
|
||||
m_process << QStringList::split(" ", expression);
|
||||
m_receive = &AptCache::receiveSearch;
|
||||
return m_process.start(KProcess::Block, KProcess::Stdout );
|
||||
}
|
||||
|
||||
void AptCache::receiveSearch(const QStringList& lines)
|
||||
{
|
||||
static QRegExp rx_parse("([^ ]+) - (.*)");
|
||||
|
||||
QStringList::ConstIterator i;
|
||||
for (i = lines.begin(); i != lines.end(); ++i)
|
||||
{
|
||||
if ((*i).isEmpty()) continue;
|
||||
|
||||
if (!rx_parse.exactMatch(*i))
|
||||
{
|
||||
kdDebug(DEBUG_ZONE) << "Parsing error. Line is " << *i << endl;
|
||||
continue;
|
||||
}
|
||||
|
||||
emit token("package", rx_parse.cap(1));
|
||||
emit token("short_desc", rx_parse.cap(2));
|
||||
|
||||
kdDebug(DEBUG_ZONE) << "Found package : " << rx_parse.cap(1) << " - " << rx_parse.cap(2) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
bool AptCache::show(const QString& package)
|
||||
{
|
||||
clear();
|
||||
|
||||
m_process.setEnvironment("LANGUAGE", "C");
|
||||
m_process << "apt-cache" << "show" << package;
|
||||
m_receive = &AptCache::receiveShow;
|
||||
return m_process.start(KProcess::Block, KProcess::Stdout );
|
||||
}
|
||||
|
||||
void AptCache::receiveShow(const QStringList& lines)
|
||||
{
|
||||
static bool pkgfield = false, insert_newline = false;
|
||||
static int indent = 0;
|
||||
|
||||
static QRegExp rx_attribute("([\\w-]+): (.*)");
|
||||
static const QString pkg_fields[] =
|
||||
{ "Suggests", "Replaces", "Depends", "Conflicts", QString::null };
|
||||
|
||||
QStringList::ConstIterator i;
|
||||
for (i = lines.begin(); i != lines.end(); ++i)
|
||||
{
|
||||
QString data(*i);
|
||||
if (data.isEmpty()) continue;
|
||||
|
||||
if (rx_attribute.exactMatch(*i))
|
||||
{
|
||||
m_attribute = rx_attribute.cap(1);
|
||||
data = rx_attribute.cap(2);
|
||||
|
||||
if (m_attribute != "Package")
|
||||
emit token("field", m_attribute);
|
||||
|
||||
insert_newline = pkgfield = false;
|
||||
indent = 0;
|
||||
|
||||
const QString * test_field;
|
||||
for (test_field = pkg_fields; !test_field -> isNull(); ++test_field)
|
||||
if (*test_field == m_attribute)
|
||||
{
|
||||
pkgfield = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (m_attribute == "Package")
|
||||
emit token("package", data);
|
||||
else if (pkgfield)
|
||||
parse_pkgfield(data);
|
||||
else
|
||||
{
|
||||
int new_indent = data.find( QRegExp("[^\\s]") );
|
||||
|
||||
// new_indent > 0 means that we are in a multi-line
|
||||
// field. Those lines always begin with " ", so we want
|
||||
// to drop it.
|
||||
if (new_indent > 0) --new_indent;
|
||||
|
||||
if (new_indent != indent)
|
||||
{
|
||||
emit token("indent", QString::number(new_indent) );
|
||||
indent = new_indent;
|
||||
insert_newline = false;
|
||||
}
|
||||
|
||||
if (data == " .")
|
||||
{
|
||||
if (insert_newline)
|
||||
emit token("data", "\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (insert_newline)
|
||||
emit token("data", "\n" + data);
|
||||
else
|
||||
emit token("data", data);
|
||||
}
|
||||
|
||||
insert_newline = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AptCache::parse_pkgfield(const QString& data)
|
||||
{
|
||||
QStringList split(QStringList::split(",", data));
|
||||
for (QStringList::ConstIterator i = split.begin(); i != split.end(); ++i)
|
||||
{
|
||||
if (i != split.begin()) emit token("data", ", ");
|
||||
|
||||
QStringList bar(QStringList::split("|", *i));
|
||||
for (QStringList::ConstIterator j = bar.begin(); j != bar.end(); ++j)
|
||||
{
|
||||
if (j != bar.begin()) emit token("data", " | ");
|
||||
QString pkg, remaining;
|
||||
|
||||
int paren = (*j).find('(');
|
||||
if (paren != -1)
|
||||
{
|
||||
pkg = (*j).left(paren - 1);
|
||||
remaining = (*j).right((*j).length() - paren + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
pkg = (*j);
|
||||
}
|
||||
|
||||
pkg = pkg.stripWhiteSpace();
|
||||
remaining = remaining.stripWhiteSpace();
|
||||
|
||||
emit token("package_link", pkg);
|
||||
if (!remaining.isEmpty()) emit token("data", " " + remaining);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool AptCache::policy( const QString & package )
|
||||
{
|
||||
clear();
|
||||
|
||||
m_process.setEnvironment("LANGUAGE", "C");
|
||||
m_process << "apt-cache" << "policy" << package;
|
||||
m_receive = &AptCache::receivePolicy;
|
||||
return m_process.start(KProcess::Block, KProcess::Stdout );
|
||||
}
|
||||
|
||||
void AptCache::receivePolicy(const QStringList& lines)
|
||||
{
|
||||
static QRegExp rx_pkgname("(\\w[\\w+-.]+):");
|
||||
static QRegExp rx_location("^\\s*\\d+\\s[^\\d]");
|
||||
|
||||
for(QStringList::ConstIterator l = lines.begin(); l != lines.end(); ++l)
|
||||
{
|
||||
if ((*l).isEmpty()) continue;
|
||||
|
||||
QString data( (*l).stripWhiteSpace() );
|
||||
if (rx_pkgname.exactMatch(*l))
|
||||
emit token("package", rx_pkgname.cap(1));
|
||||
else if (data.startsWith("Installed:", false))
|
||||
{
|
||||
data = data.right(data.length() - 11);
|
||||
emit token("installed", data);
|
||||
m_installed = data;
|
||||
}
|
||||
else if (data.startsWith("Candidate:", false))
|
||||
{
|
||||
data = data.right(data.length() - 11);
|
||||
emit token("candidate", data);
|
||||
m_candidate = data;
|
||||
}
|
||||
else if (data.startsWith("Version table:", false))
|
||||
emit token("version_table", QString::null);
|
||||
else if (rx_location.search(data) > -1)
|
||||
emit token("location", data);
|
||||
else
|
||||
{
|
||||
if (data.startsWith("*** "))
|
||||
data = data.right( data.length() - 4 );
|
||||
|
||||
if (match_dversion(data.section(' ', 0, 0)))
|
||||
emit token("version", data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QString AptCache::policy_installed() const
|
||||
{ return m_installed; }
|
||||
QString AptCache::policy_candidate() const
|
||||
{ return m_candidate; }
|
||||
|
||||
|
||||
#include "aptcache.moc"
|
||||
|
@ -0,0 +1,81 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#ifndef KIOAPT_APTCACHE_H
|
||||
#define KIOAPT_APTCACHE_H
|
||||
|
||||
#include <qvaluelist.h>
|
||||
#include <qmap.h>
|
||||
#include <qstring.h>
|
||||
#include <kprocess.h>
|
||||
|
||||
class AptProtocol;
|
||||
|
||||
/**
|
||||
@author Sylvain Joyeux
|
||||
*/
|
||||
class AptCache : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
typedef void (AptCache::*ReceiveMethod) (const QStringList& lines);
|
||||
ReceiveMethod m_receive;
|
||||
|
||||
// KProcIO messes the stderr and the stdout lines :(
|
||||
KProcess m_process;
|
||||
QString m_received_out, m_received_err;
|
||||
|
||||
QString m_attribute;
|
||||
|
||||
QString m_installed, m_candidate;
|
||||
|
||||
private slots:
|
||||
void receivedStdErr(KProcess* process, char* buffer, int len);
|
||||
void receivedStdOut(KProcess* process, char* buffer, int len);
|
||||
|
||||
private:
|
||||
void clear();
|
||||
void receiveSearch(const QStringList& lines);
|
||||
void receiveShow(const QStringList& lines);
|
||||
void receivePolicy(const QStringList& lines);
|
||||
void parse_pkgfield(const QString& data);
|
||||
|
||||
public:
|
||||
AptCache();
|
||||
~AptCache();
|
||||
|
||||
bool search(const QString& expression);
|
||||
bool show(const QString& package);
|
||||
bool policy(const QString& package);
|
||||
|
||||
QString policy_installed() const;
|
||||
QString policy_candidate() const;
|
||||
|
||||
signals:
|
||||
/** Tags:
|
||||
* warning (warning text)
|
||||
* error (error text)
|
||||
* package (package_name)
|
||||
* short_desc (description)
|
||||
* field (field_name)
|
||||
* package_link (package_name)
|
||||
* data (plain_data)
|
||||
* indent (value)
|
||||
* policy
|
||||
* installed (version)
|
||||
* candidate (version)
|
||||
* version_table
|
||||
* version (version_desc)
|
||||
* location (location_desc)
|
||||
* file (file_name) [for dpkg]
|
||||
* end
|
||||
*/
|
||||
void token(const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,17 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef KIOAPT_DEBUG
|
||||
#define KIOAPT_DEBUG
|
||||
|
||||
#define DEBUG_ZONE 7000
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,210 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "dpkg.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include <klocale.h>
|
||||
#include <kdebug.h>
|
||||
|
||||
#include <qstringlist.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
|
||||
|
||||
Dpkg::Dpkg(QObject *parent, const char *name)
|
||||
: PackageManager(parent, name)
|
||||
{
|
||||
connect(&m_process, SIGNAL(readReady (KProcIO *)), this, SLOT(readReady(KProcIO*)));
|
||||
}
|
||||
|
||||
Dpkg::~Dpkg()
|
||||
{
|
||||
}
|
||||
|
||||
int Dpkg::capabilities( int query ) const
|
||||
{
|
||||
if ( (query & SEARCH_FILE) && (query & OFFLINE) )
|
||||
return query | INSTALLED_ONLY;
|
||||
if ( (query & LIST_FILES) && (query & OFFLINE) )
|
||||
return query | INSTALLED_ONLY;
|
||||
if ( query & ONLINE )
|
||||
return query;
|
||||
return NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
void Dpkg::readReady(KProcIO*)
|
||||
{
|
||||
bool partial;
|
||||
|
||||
QString newline;
|
||||
QStringList lines;
|
||||
while(m_process.readln(newline, true, &partial) != -1)
|
||||
{
|
||||
if (partial) m_buffer += newline;
|
||||
else
|
||||
{
|
||||
newline.truncate(newline.length());
|
||||
QString line(m_buffer + newline);
|
||||
lines << line;
|
||||
m_buffer = "";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
(this->*m_receive)(lines);
|
||||
}
|
||||
|
||||
bool Dpkg::search( const QString & file )
|
||||
{
|
||||
m_process.resetAll();
|
||||
m_buffer = QString::null;
|
||||
|
||||
m_process.clearArguments();
|
||||
m_process << "dpkg" << "-S" << file;
|
||||
m_receive = &Dpkg::receiveSearch;
|
||||
return m_process.start(KProcess::Block, KProcess::Stdout );
|
||||
}
|
||||
|
||||
void Dpkg::receiveSearch( const QStringList & line )
|
||||
{
|
||||
static QRegExp rx_notfound("dpkg: (.*) not found");
|
||||
// the format of the dpkg -S answer is
|
||||
// package1[, package2[, package3...]]: file
|
||||
for (QStringList::ConstIterator i = line.begin(); i != line.end(); ++i)
|
||||
{
|
||||
//kdDebug(DEBUG_ZONE) << *i << endl;
|
||||
if ((*i).isEmpty()) continue;
|
||||
if (rx_notfound.exactMatch(*i))
|
||||
{
|
||||
emit token("error", i18n("%1 not found").arg(rx_notfound.cap(1)));
|
||||
continue;
|
||||
}
|
||||
|
||||
int semicolon = (*i).find(':');
|
||||
if (semicolon == -1)
|
||||
{
|
||||
kdDebug(DEBUG_ZONE) << "receiveSearch unmatched line : " << *i << endl;
|
||||
continue;
|
||||
}
|
||||
QStringList packages = QStringList::split(',', (*i).left(semicolon));
|
||||
QString file = (*i).right( (*i).length() - semicolon - 1 );
|
||||
|
||||
emit token("file", file.stripWhiteSpace());
|
||||
|
||||
for (QStringList::ConstIterator j = packages.begin(); j != packages.end(); ++j)
|
||||
emit token("package", (*j).stripWhiteSpace());
|
||||
}
|
||||
}
|
||||
|
||||
bool Dpkg::list( const QString & package )
|
||||
{
|
||||
m_process.resetAll();
|
||||
m_buffer = QString::null;
|
||||
|
||||
m_process.clearArguments();
|
||||
m_process << "dpkg" << "-L" << package;
|
||||
m_receive = &Dpkg::receiveList;
|
||||
return m_process.start(KProcess::Block, KProcess::Stdout );
|
||||
}
|
||||
|
||||
void Dpkg::receiveList( const QStringList & line )
|
||||
{
|
||||
static QRegExp rx_notfound("Package (.*) is not installed");
|
||||
for (QStringList::ConstIterator i = line.begin(); i != line.end(); ++i)
|
||||
{
|
||||
if (rx_notfound.search(*i) > -1)
|
||||
emit token("error", i18n("Package %1 is not installed").arg(rx_notfound.cap(1)));
|
||||
else if ((*i).startsWith("/"))
|
||||
emit token("file", *i);
|
||||
}
|
||||
}
|
||||
|
||||
static const QString
|
||||
html_form_begin("\n<form action=\"http://packages.ubuntu.com/cgi-bin/search_contents.pl\" method=\"GET\">\n"
|
||||
"<table class=\"query\">\n");
|
||||
|
||||
static QString make_title(const QString& title)
|
||||
{ return "\t<tr><td class=\"title\" colspan=\"2\">" + title + "</td></tr>\n"; }
|
||||
static const QString
|
||||
html_form_end("<tr>\n"
|
||||
"\t<td class=\"button\" colspan=\"2\">\n"
|
||||
"\t\t<input type=\"submit\" value=\"%1\">\n"
|
||||
"\t\t<input type=\"hidden\" name=\"searchmode\" value=\"searchfilesanddirs\">\n"
|
||||
"\t\t<input type=\"hidden\" name=\"case\" value=\"insensitive\">\n"
|
||||
"\t</td>\n"
|
||||
"</tr>\n"
|
||||
"</table>\n"
|
||||
"</form>\n");
|
||||
|
||||
static const QString
|
||||
html_form_line_begin("<tr>\n"
|
||||
"\t<td><label for=\"%1\">%2</label></td>\n"
|
||||
"\t<td>\n");
|
||||
static const QString
|
||||
html_form_line_end("</td>\n</tr>\n");
|
||||
|
||||
static const QString html_form_combo("<select name=\"%1\" id=\"%2\">");
|
||||
|
||||
static QString make_form_text(const QString& type, const QString& label)
|
||||
{
|
||||
return
|
||||
html_form_line_begin.arg(type).arg(label)
|
||||
+ QString("<input type=\"text\" name=\"%1\" id=\"%2\">").arg(type).arg(type)
|
||||
+ html_form_line_end;
|
||||
}
|
||||
|
||||
static QString begin_form_combo(const QString& type, const QString& label)
|
||||
{
|
||||
return
|
||||
html_form_line_begin.arg(type).arg(label)
|
||||
+ QString("\t<select name=\"%1\" id=\"%2\">\n").arg(type).arg(type);
|
||||
}
|
||||
static QString make_form_option(const QString& name, const QString& text)
|
||||
{ return "\t\t<option value=" + name + ">" + text + "</option>\n"; }
|
||||
static QString end_form_combo()
|
||||
{ return "\t</select>\n\t</td>\n</tr>\n"; }
|
||||
|
||||
QString Dpkg::getOnlineForm()
|
||||
{
|
||||
QString buffer;
|
||||
QTextOStream stream(&buffer);
|
||||
stream
|
||||
<< html_form_begin
|
||||
<< make_title( i18n("packages.ubuntu.com"))
|
||||
|
||||
<< make_form_text("word", i18n("File to search"))
|
||||
<< begin_form_combo("arch", i18n("Architecture"))
|
||||
<< make_form_option("i386", i18n("Intel x86"))
|
||||
<< make_form_option("amd64", i18n("AMD64"))
|
||||
<< make_form_option("sparc", i18n("SPARC"))
|
||||
<< make_form_option("powerpc", i18n("PowerPC"))
|
||||
<< make_form_option("hppa", i18n("HP PA/RISC"))
|
||||
<< make_form_option("ia64", i18n("Intel IA-64"))
|
||||
<< end_form_combo()
|
||||
<< begin_form_combo("version", i18n("Version"))
|
||||
<< make_form_option("gutsy", "gutsy")
|
||||
<< make_form_option("feisty", "feisty")
|
||||
<< make_form_option("edgy", "edgy")
|
||||
<< make_form_option("dapper", "dapper")
|
||||
<< make_form_option("breezy", "breezy")
|
||||
<< make_form_option("hoary", "hoary")
|
||||
<< make_form_option("warty", "warty")
|
||||
<< end_form_combo()
|
||||
|
||||
<< html_form_end.arg(i18n("Go online!"));
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
#include "dpkg.moc"
|
||||
|
@ -0,0 +1,50 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#ifndef DPKG_H
|
||||
#define DPKG_H
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include "packagemanager.h"
|
||||
#include <kprocio.h>
|
||||
|
||||
/**
|
||||
@author Sylvain Joyeux
|
||||
*/
|
||||
class Dpkg : public PackageManager
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
typedef void (Dpkg::*ReceiveMethod) (const QStringList& lines);
|
||||
ReceiveMethod m_receive;
|
||||
|
||||
KProcIO m_process;
|
||||
QString m_buffer;
|
||||
|
||||
private slots:
|
||||
void readReady(KProcIO* io);
|
||||
|
||||
private:
|
||||
void receiveSearch(const QStringList& line);
|
||||
void receiveList(const QStringList& line);
|
||||
|
||||
public:
|
||||
Dpkg(QObject *parent = 0, const char *name = 0);
|
||||
~Dpkg();
|
||||
|
||||
virtual bool list(const QString& package);
|
||||
virtual bool search(const QString& file);
|
||||
|
||||
virtual int capabilities(int query) const;
|
||||
|
||||
virtual QString getOnlineForm();
|
||||
};
|
||||
|
||||
#endif
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,250 @@
|
||||
/** This is the stylesheet for the
|
||||
* HTML code produced by the apt:/ ioslave
|
||||
* (c) 2003 Sylvain Joyeux <sylvain.joyeux@m4x.org>
|
||||
* Provided under the GPL licenses */
|
||||
|
||||
BODY {
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
table { margin-top: 1em; }
|
||||
table.header {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1em;
|
||||
width: 90%;
|
||||
font-weight: bold;
|
||||
/* font-variant: small-caps; */
|
||||
font-size: x-large;
|
||||
|
||||
color: #0855C5;
|
||||
|
||||
/*vertical-align: middle;*/
|
||||
|
||||
height: 85px;
|
||||
background-color: #FFFFFF;
|
||||
background-image: url("headerbg.png");
|
||||
}
|
||||
|
||||
table.header td.logo {
|
||||
width: 92px;
|
||||
}
|
||||
|
||||
H2 { text-align: justify; }
|
||||
table.version TR { padding-top: 1em; }
|
||||
table.version TD { padding-top: 1em; vertical-align: top; }
|
||||
table.version TD.attname { font-weight: bold; }
|
||||
|
||||
.footer {
|
||||
margin-top: 3em;
|
||||
font-size: small;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
td.header-title {
|
||||
vertical-align: top;
|
||||
text-align: center;
|
||||
padding-top: 1.5em;
|
||||
font-size: 15pt;
|
||||
}
|
||||
td.links {
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
/* global lind buttons at bottom of decorative header */
|
||||
table.links {
|
||||
float: right;
|
||||
border:0;
|
||||
padding: 1px 0 0 0;
|
||||
margin: 0;
|
||||
}
|
||||
table.links td a {
|
||||
color: white
|
||||
}
|
||||
table.links td:hover {
|
||||
background-color:#0C4293;
|
||||
}
|
||||
table.links td a:hover {
|
||||
color: white;
|
||||
background-color:#0C4293
|
||||
}
|
||||
table.links td {
|
||||
border-left: 1px solid #4A81D5;
|
||||
padding: 0px 12px 0px 12px;
|
||||
background-color:#0E4EAF;
|
||||
font-size:9pt;
|
||||
margin: 0;
|
||||
/*font-weight: bold;*/
|
||||
}
|
||||
/******************************************
|
||||
* Forms
|
||||
*/
|
||||
|
||||
table.queryform {
|
||||
margin: auto;
|
||||
width: 80%;
|
||||
}
|
||||
table.query {
|
||||
margin: auto;
|
||||
margin-top: 1em;
|
||||
}
|
||||
table.queryform form {
|
||||
margin: 2em;
|
||||
}
|
||||
table.query td.button {
|
||||
text-align: center;
|
||||
padding-top: .7em;
|
||||
}
|
||||
|
||||
table.query td.title {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
padding-bottom: .7em;
|
||||
}
|
||||
|
||||
table.query td.button input[type="submit"] {
|
||||
width: 40%;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
* Show
|
||||
*/
|
||||
|
||||
.error {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: larger;
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
/*h3.version, h3.installed-version {
|
||||
padding-left: 1em;
|
||||
margin-top: 4em;
|
||||
text-align: left;
|
||||
background-color: #0855C5;
|
||||
color: white;
|
||||
}
|
||||
h3.installed-version {
|
||||
background-color: #FF3333;
|
||||
}*/
|
||||
|
||||
.version-header, .version-header-installed {
|
||||
font-size: larger;
|
||||
font-weight: bold;
|
||||
/*padding-left: 1em;*/
|
||||
margin-top: 4em;
|
||||
text-align: left;
|
||||
color: white;
|
||||
background-color: #0855C5;
|
||||
}
|
||||
|
||||
.version-header-installed {
|
||||
background-color: #F03333;
|
||||
}
|
||||
|
||||
.version-header .links, .version-header-installed .links {
|
||||
float: left;
|
||||
|
||||
color: white;
|
||||
|
||||
font-size:9pt;
|
||||
background-color:#0C4293;
|
||||
|
||||
padding: 0px 12px 0px 12px;
|
||||
margin: 0 1em 0 0;
|
||||
|
||||
border-left: 1px solid #4A81D5;
|
||||
}
|
||||
|
||||
.version-header-installed .links {
|
||||
background-color: #CC2222;
|
||||
border-left: 1px solid #FF7D7F;
|
||||
}
|
||||
|
||||
table.version {
|
||||
margin-left: 3%;
|
||||
width: 90%;
|
||||
border-width: thin;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
.command
|
||||
{
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
text-align: center;
|
||||
font-size: medium;
|
||||
}
|
||||
.filelist
|
||||
{
|
||||
margin-left: 5%;
|
||||
}
|
||||
|
||||
|
||||
/***************************
|
||||
* Policy classes
|
||||
*/
|
||||
|
||||
div.policy
|
||||
{ margin-top: 1em; }
|
||||
table.policy
|
||||
{ margin: auto; }
|
||||
table.policy TD
|
||||
{ vertical-align: middle; }
|
||||
|
||||
table.curver {
|
||||
border: solid thin;
|
||||
margin-left: auto;
|
||||
margin-right: 2em;
|
||||
}
|
||||
.curver form p {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.vtable {
|
||||
border: solid thin;
|
||||
margin-right: auto;
|
||||
margin-left: 2em;
|
||||
padding: .5em;
|
||||
}
|
||||
.vtable .header {
|
||||
border-bottom: solid thin black;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.vtable-version {
|
||||
font-weight: bold;
|
||||
margin-right: 1em;
|
||||
}
|
||||
.vtable .version-pin {
|
||||
font-weight: bold;
|
||||
}
|
||||
.vtable .location-pin {
|
||||
font-weight: bold;
|
||||
margin-left: 1em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
table.curver TD, table.vtable TD
|
||||
{ width: auto;
|
||||
vertical-align: top; }
|
||||
|
||||
|
||||
table.vtable thead td {
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
border-bottom: solid thin;
|
||||
}
|
||||
|
||||
table.curver form {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.pin
|
||||
{ font-weight: bold; }
|
||||
.file
|
||||
{ font-weight: bold; }
|
@ -0,0 +1,31 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#include "packagemanager.h"
|
||||
|
||||
PackageManager::PackageManager(QObject *parent, const char *name)
|
||||
: QObject(parent, name) {}
|
||||
|
||||
|
||||
PackageManager::~PackageManager() {}
|
||||
|
||||
bool PackageManager::list( const QString & /*package*/ ) { return false; }
|
||||
bool PackageManager::search( const QString & /*file*/ ) { return false; }
|
||||
|
||||
int PackageManager::capabilities( int /*query*/ ) const { return 0; }
|
||||
|
||||
QString PackageManager::getOnlineForm()
|
||||
{ return QString::null; }
|
||||
QString PackageManager::getOnlineURL
|
||||
( const QString& /* query */
|
||||
, const QMap<QString, QString>& /*options*/ )
|
||||
{ return QString::null; }
|
||||
|
||||
#include "packagemanager.moc"
|
||||
|
@ -0,0 +1,76 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#ifndef PACKAGEMANAGER_H
|
||||
#define PACKAGEMANAGER_H
|
||||
|
||||
#include <qobject.h>
|
||||
|
||||
/** Base class for accessing package-manager specific
|
||||
* functionalities. ATM, it supports listing files in a
|
||||
* package and searching the package which owns a file.
|
||||
*
|
||||
* Support for online-search support is also included.
|
||||
*
|
||||
* @author Sylvain Joyeux
|
||||
*/
|
||||
|
||||
class PackageManager : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
PackageManager(QObject *parent = 0, const char *name = 0);
|
||||
virtual ~PackageManager();
|
||||
|
||||
virtual bool search(const QString& file);
|
||||
virtual bool list(const QString& package);
|
||||
|
||||
/** Checks what the package manager is capable of.
|
||||
* The \c cap parameter should be a or of exactly
|
||||
* one function (SEARCH, LIST, ...) and one access
|
||||
* (ONLINE, OFFLINE).
|
||||
* The function returns NOT_SUPPORTED if the specified query is not
|
||||
* supported. Otherwise, it returns cap with some
|
||||
* restrictions (EXHAUSTIVE, INSTALLED_ONLY, ...) if
|
||||
* they apply
|
||||
*
|
||||
* INSTALLED_ONLY meaning changes with the function considered.
|
||||
* With SEARCH_FILE, it means that SEARCH_FILE only finds
|
||||
* installed files. With LIST_FILES, it means that listing the
|
||||
* files of a package is possible only if the package is already
|
||||
* installed */
|
||||
virtual int capabilities(int query) const;
|
||||
|
||||
virtual QString getOnlineForm();
|
||||
virtual QString getOnlineURL(const QString& query, const QMap<QString, QString>& options);
|
||||
|
||||
enum Capabilities
|
||||
{
|
||||
NOT_SUPPORTED = 0,
|
||||
|
||||
SEARCH_FILE = 0x01,
|
||||
LIST_FILES = 0x02,
|
||||
SHOW = 0x04,
|
||||
OFFLINE = 0x10,
|
||||
ONLINE = 0x20,
|
||||
|
||||
INSTALLED_ONLY = 0x200
|
||||
};
|
||||
|
||||
signals:
|
||||
/** Tags:
|
||||
* warning (warning text)
|
||||
* error (error text)
|
||||
* file (file_name) [for dpkg]
|
||||
* end
|
||||
*/
|
||||
void token(const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
#endif
|
@ -0,0 +1,7 @@
|
||||
INCLUDES = $(all_includes)
|
||||
METASOURCES = AUTO
|
||||
libparsers_la_LDFLAGS = -avoid-version $(all_libraries)
|
||||
noinst_LTLIBRARIES = libparsers.la
|
||||
noinst_HEADERS = parsers.h qhtmlstream.h
|
||||
libparsers_la_SOURCES = list.cpp search.cpp policy.cpp show.cpp parsers.cpp filesearch.cpp
|
||||
libparsers_la_LIBADD = $(LIB_KIO)
|
@ -0,0 +1,52 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#include "parsers.h"
|
||||
#include "../apt.h"
|
||||
|
||||
static QString
|
||||
html_dpkgs_line_begin("<tr><td class=\"file\">%1</td><td>\n\t"),
|
||||
html_dpkgs_line_end("\n</td></tr>\n");
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
|
||||
void FileSearch::operator() (AptProtocol* slave, const QString & tag, const QString & value )
|
||||
{
|
||||
static QString buffer;
|
||||
if (tag == "begin")
|
||||
{
|
||||
m_result_count = 0;
|
||||
}
|
||||
else if (tag == "error")
|
||||
{
|
||||
*slave << "<div class=\"error\">" + value + "</div>";
|
||||
}
|
||||
else if (tag == "file")
|
||||
{
|
||||
if (m_result_count)
|
||||
*slave << buffer + html_dpkgs_line_end;
|
||||
|
||||
*slave << html_dpkgs_line_begin.arg(value);
|
||||
++m_result_count;
|
||||
buffer = "";
|
||||
}
|
||||
else if (tag == "package")
|
||||
{
|
||||
if (!buffer.isEmpty()) buffer = buffer + ", ";
|
||||
buffer += "<a href=\"apt:/show?" + value + "\">" + value + "</a>";
|
||||
}
|
||||
else if (tag == "end")
|
||||
{
|
||||
*slave << buffer + html_dpkgs_line_end;
|
||||
buffer="";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "parsers.h"
|
||||
#include "../apt.h"
|
||||
|
||||
#include <kio/slavebase.h>
|
||||
#include <klocale.h>
|
||||
#include <qregexp.h>
|
||||
#include <kurl.h>
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
List::List(bool links)
|
||||
: m_links(links) {}
|
||||
|
||||
/** Parses the tokens sent by PackageManager::list */
|
||||
void List::operator() (AptProtocol* slave, const QString& tag, const QString& value )
|
||||
{
|
||||
static QRegExp rx_manpage("/man/.*\\.\\d[^/]*$");
|
||||
|
||||
static QStringList files;
|
||||
|
||||
if (tag == "begin")
|
||||
{
|
||||
m_result_count = 0;
|
||||
}
|
||||
else if (tag == "error")
|
||||
{
|
||||
*slave << "<div class=\"error\">" + value + "</div>";
|
||||
}
|
||||
else if (tag == "file" && value != "/.")
|
||||
{
|
||||
if (m_links)
|
||||
{
|
||||
KURL url;
|
||||
if (rx_manpage.search(value) >= 0)
|
||||
url.setProtocol("man");
|
||||
else
|
||||
url.setProtocol("file");
|
||||
|
||||
url.setPath(value);
|
||||
|
||||
files += "<a href=\"" + url.htmlURL() + "\">" + value + "</a>";
|
||||
}
|
||||
else
|
||||
{
|
||||
files += value;
|
||||
}
|
||||
|
||||
++m_result_count;
|
||||
}
|
||||
else if (tag == "end")
|
||||
{
|
||||
files.sort();
|
||||
*slave <<
|
||||
"<div class=\"filelist\">\n" + files.join("\n<br>") + "\n</div>\n"
|
||||
"<div class=\"footer\">" + i18n("%1 files in the package").arg(result_count()) + "</div>\n";
|
||||
files.clear();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "parsers.h"
|
||||
|
||||
#include <kuserprofile.h>
|
||||
|
||||
#include <kio/slavebase.h>
|
||||
#include <qhtmlstream.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
static void print_czstring(KIO::SlaveBase& slave, const char* data, int len)
|
||||
{
|
||||
QByteArray nonull;
|
||||
nonull.setRawData(data, len);
|
||||
slave.data(nonull);
|
||||
nonull.resetRawData(data, len);
|
||||
}
|
||||
void operator << (KIO::SlaveBase& slave, const QCString& string)
|
||||
{ print_czstring(slave, string.data(), string.size() - 1); }
|
||||
void operator << (KIO::SlaveBase& slave, const QString& string)
|
||||
{ slave << string.utf8(); }
|
||||
void operator << (KIO::SlaveBase& slave, const char* string)
|
||||
{ print_czstring(slave, string, strlen(string)); }
|
||||
|
||||
|
||||
|
||||
Parser::Parser( ) {}
|
||||
Parser::~Parser( ) {}
|
||||
|
||||
void Parser::attribute_begin(QHtmlStream& stream, const QString& text)
|
||||
{
|
||||
stream
|
||||
<< block("tr") << endl
|
||||
<< block("td") << param("class") << "attname" << data()
|
||||
<< text
|
||||
<< close() << endl
|
||||
<< block("td");
|
||||
}
|
||||
void Parser::attribute_end(QHtmlStream& stream)
|
||||
{ stream << close() << endl << close(); }
|
||||
|
||||
// void Parser::operator ( )( KIO::SlaveBase * /*slave*/,
|
||||
// const QString & /*tag*/, const QString & /*value*/ )
|
||||
// {}
|
||||
|
||||
QString mangle_version(QString version)
|
||||
{ return "version_" + version.replace(QRegExp("[-:\\.\\+]"), QString("_")); }
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,91 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef PARSERS_H
|
||||
#define PARSERS_H
|
||||
|
||||
#include <qstring.h>
|
||||
|
||||
namespace KIO
|
||||
{
|
||||
class SlaveBase;
|
||||
}
|
||||
class QHtmlStream;
|
||||
class AptProtocol;
|
||||
|
||||
/** Here are defined the functional objects that takes the tokens
|
||||
* sent by AptCache and PackageManager objects, and produces HTML */
|
||||
namespace Parsers
|
||||
{
|
||||
class Parser
|
||||
{
|
||||
protected:
|
||||
int m_result_count;
|
||||
|
||||
static void attribute_begin(QHtmlStream& stream, const QString& text);
|
||||
static void attribute_end(QHtmlStream& stream);
|
||||
|
||||
public:
|
||||
Parser();
|
||||
virtual ~Parser();
|
||||
int result_count() const { return m_result_count; }
|
||||
virtual void operator () (AptProtocol* slave, const QString& tag, const QString& value) = 0;
|
||||
};
|
||||
|
||||
class Search : public Parser
|
||||
{
|
||||
public:
|
||||
void operator () (AptProtocol* slave, const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
class List : public Parser
|
||||
{
|
||||
bool m_links;
|
||||
public:
|
||||
List(bool show_links);
|
||||
void operator () (AptProtocol* slave, const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
class FileSearch : public Parser
|
||||
{
|
||||
public:
|
||||
void operator () (AptProtocol* slave, const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
class Show : public Parser
|
||||
{
|
||||
QString m_package, m_installed;
|
||||
bool m_act;
|
||||
|
||||
public:
|
||||
Show(const QString& package, const QString& installed, bool act);
|
||||
void operator () (AptProtocol* slave, const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
class Policy : public Parser
|
||||
{
|
||||
QString m_package, m_installed;
|
||||
bool m_has_adept_batch;
|
||||
bool m_act;
|
||||
|
||||
public:
|
||||
Policy(const QString& package, bool act);
|
||||
QString getInstalled() const { return m_installed; }
|
||||
void operator () (AptProtocol* slave, const QString& tag, const QString& value);
|
||||
};
|
||||
|
||||
void operator << (KIO::SlaveBase& slave, const QCString& string);
|
||||
void operator << (KIO::SlaveBase& slave, const QString& string);
|
||||
void operator << (KIO::SlaveBase& slave, const char* string);
|
||||
|
||||
QString mangle_version(QString version);
|
||||
}
|
||||
|
||||
#endif
|
@ -0,0 +1,202 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "parsers.h"
|
||||
#include "../apt.h"
|
||||
|
||||
#include <klocale.h>
|
||||
#include <kdebug.h>
|
||||
#include <qhtmlstream.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
static void policy_begin(QHtmlStream& stream)
|
||||
{
|
||||
stream
|
||||
<< block("div") << endl
|
||||
<< block("table", "policy") << endl
|
||||
<< block("tr") << block("td") << endl
|
||||
<< block("table", "curver") << endl
|
||||
<< block("tbody");
|
||||
}
|
||||
|
||||
static void add_button(QHtmlStream& stream, const QString& mode, const QString& text, const QString& package)
|
||||
{
|
||||
stream
|
||||
<< block("form")
|
||||
<< param("action") << "apt:/"
|
||||
<< param("method") << "get" << endl
|
||||
<< block("p") << endl
|
||||
<< tag("input")
|
||||
<< param("type") << "hidden"
|
||||
<< param("name") << "get"
|
||||
<< param("value") << mode << endl
|
||||
<< tag("input")
|
||||
<< param("type") << "hidden"
|
||||
<< param("name") << "package"
|
||||
<< param("value") << package << endl
|
||||
<< tag("input")
|
||||
<< param("type") << "submit"
|
||||
<< param("value") << text << endl
|
||||
<< close()
|
||||
<< close() << endl;
|
||||
}
|
||||
|
||||
static void add_version_link(QHtmlStream& stream, AptProtocol* slave, const QString& package, const QString& version)
|
||||
{
|
||||
KURL url(slave->buildURL("show", package));
|
||||
url.setHTMLRef(Parsers::mangle_version(version));
|
||||
|
||||
stream
|
||||
<< block("a", "vtable-version")
|
||||
<< param("href") << url.htmlURL()
|
||||
<< data() << version
|
||||
<< close();
|
||||
}
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
|
||||
Policy::Policy(const QString& package, bool act)
|
||||
: m_package(package), m_act(false)
|
||||
{
|
||||
m_act = act;
|
||||
}
|
||||
|
||||
void Policy::operator() (AptProtocol* slave, const QString& type, const QString& value)
|
||||
{
|
||||
static bool first_version = false, received_sth = false;
|
||||
static QString buffer;
|
||||
static QHtmlStream* stream;
|
||||
|
||||
static QRegExp rx_notinstalled("(none)");
|
||||
|
||||
kdDebug() << "policy : " << type << " " << value << endl;
|
||||
|
||||
if (type == "begin")
|
||||
{
|
||||
stream = new QHtmlStream(&buffer);
|
||||
policy_begin(*stream);
|
||||
}
|
||||
else if (type == "installed")
|
||||
{
|
||||
received_sth = true;
|
||||
|
||||
attribute_begin(*stream, i18n("Installed"));
|
||||
if (rx_notinstalled.match(value) >= 0)
|
||||
{
|
||||
m_installed = QString::null;
|
||||
*stream << i18n("no");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_installed = value.stripWhiteSpace();
|
||||
add_version_link(*stream, slave, m_package, m_installed);
|
||||
}
|
||||
attribute_end(*stream);
|
||||
}
|
||||
else if (type == "candidate")
|
||||
{
|
||||
received_sth = true;
|
||||
|
||||
bool has_candidate = (rx_notinstalled.match(value) == -1);
|
||||
|
||||
if (m_act && has_candidate)
|
||||
{
|
||||
*stream
|
||||
<< block("tr") << endl
|
||||
<< block("td") << param("colspan") << 2 << endl;
|
||||
|
||||
if (m_installed.isEmpty())
|
||||
add_button(*stream, "install", i18n("Install"), m_package);
|
||||
else
|
||||
add_button(*stream, "remove", i18n("Remove"), m_package);
|
||||
*stream << close() << close() << endl;
|
||||
}
|
||||
|
||||
attribute_begin(*stream, i18n("Candidate"));
|
||||
if (has_candidate)
|
||||
add_version_link(*stream, slave, m_package, value);
|
||||
else
|
||||
*stream << i18n("none");
|
||||
attribute_end(*stream);
|
||||
|
||||
if (m_act && has_candidate
|
||||
&& !m_installed.isEmpty() && m_installed != value)
|
||||
{
|
||||
*stream
|
||||
<< block("tr") << endl
|
||||
<< block("td") << param("colspan") << 2 << endl;
|
||||
add_button(*stream, "install", i18n("Upgrade"), m_package);
|
||||
*stream << close() << close() << endl;
|
||||
}
|
||||
}
|
||||
else if (type == "version_table")
|
||||
{
|
||||
received_sth = true;
|
||||
|
||||
*stream
|
||||
<< close() << close() << endl // tbody, table, form
|
||||
<< close() << endl; // td
|
||||
|
||||
first_version = true;
|
||||
}
|
||||
else if (type == "version")
|
||||
{
|
||||
QString version = value.section(' ', 0, 0);
|
||||
QString pin = value.section(' ', 1, 1);
|
||||
|
||||
if (first_version)
|
||||
{
|
||||
*stream
|
||||
<< block("td") << endl
|
||||
<< block("div", "vtable") << endl
|
||||
<< block("div", "header") << i18n("Version Table") << close() << endl
|
||||
<< block("div", "versions") << endl;
|
||||
} /*else {
|
||||
*stream << close() << close();
|
||||
}*/
|
||||
|
||||
QString version_link;
|
||||
version_link = "<a href=\"apt:/show?" + m_package + "#" + mangle_version(version) + "\">"
|
||||
+ version + "</a>";
|
||||
|
||||
*stream << tag("br") << endl;
|
||||
add_version_link(*stream, slave, m_package, version);
|
||||
*stream << "[Pin " << block("span", "version-pin") << pin << close() << "]";
|
||||
|
||||
first_version = false;
|
||||
}
|
||||
else if (type == "location")
|
||||
{
|
||||
QStringList sections = QStringList::split(' ', value);
|
||||
QString pin = sections.first();
|
||||
sections.pop_front();
|
||||
// remove the "Packages" field if it is here
|
||||
if (sections.last() == "Packages")
|
||||
sections.pop_back();
|
||||
|
||||
*stream << tag("br") << endl;
|
||||
*stream << block("span", "location-pin") << pin << close() << sections.join(" ") << endl;
|
||||
}
|
||||
else if (type == "end")
|
||||
{
|
||||
if (received_sth)
|
||||
{
|
||||
*stream << close_all() << endl;
|
||||
*slave << buffer;
|
||||
}
|
||||
|
||||
buffer = QString::null;
|
||||
received_sth = false;
|
||||
delete stream;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,286 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
#ifndef QHtmlStream_H
|
||||
#define QHtmlStream_H
|
||||
|
||||
#include <qtextstream.h>
|
||||
#include <qstringlist.h>
|
||||
|
||||
class QHtmlStream;
|
||||
class QHtmlStreamManip;
|
||||
|
||||
/**
|
||||
@author Sylvain Joyeux
|
||||
*/
|
||||
|
||||
class QHtmlStreamManip
|
||||
{
|
||||
protected:
|
||||
virtual void apply(QHtmlStream& stream) const = 0;
|
||||
|
||||
public:
|
||||
virtual ~QHtmlStreamManip() {};
|
||||
void operator () (QHtmlStream& stream) const
|
||||
{ apply(stream); }
|
||||
};
|
||||
|
||||
class QHtmlStream
|
||||
{
|
||||
QTextOStream m_stream;
|
||||
|
||||
enum States
|
||||
{
|
||||
NORMAL_FLOW,
|
||||
TAG,
|
||||
BLOCK,
|
||||
PARAM
|
||||
};
|
||||
int m_state, m_enclosing_state;
|
||||
|
||||
bool m_newline;
|
||||
QString m_indent;
|
||||
QStringList m_blockstack;
|
||||
|
||||
void finalize_open()
|
||||
{
|
||||
if (m_state == PARAM)
|
||||
m_state = m_enclosing_state;
|
||||
|
||||
if (m_state == BLOCK)
|
||||
m_stream << ">";
|
||||
else if (m_state == TAG)
|
||||
m_stream << " />";
|
||||
|
||||
m_state = NORMAL_FLOW;
|
||||
}
|
||||
|
||||
void indent()
|
||||
{
|
||||
if (m_newline)
|
||||
{
|
||||
m_stream << m_indent;
|
||||
m_newline = false;
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
QHtmlStream& output(const T& o)
|
||||
{
|
||||
indent();
|
||||
|
||||
if (m_state == PARAM)
|
||||
{
|
||||
m_stream << "=\"" << o << "\"";
|
||||
m_state = m_enclosing_state;
|
||||
return *this;
|
||||
}
|
||||
|
||||
if (m_state == BLOCK)
|
||||
{
|
||||
m_stream << ">";
|
||||
m_state = NORMAL_FLOW;
|
||||
}
|
||||
else if (m_state == TAG)
|
||||
{
|
||||
m_stream << "/>";
|
||||
m_state = NORMAL_FLOW;
|
||||
}
|
||||
m_stream << o;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
public:
|
||||
QHtmlStream(QString* buffer)
|
||||
: m_stream(buffer), m_state(NORMAL_FLOW), m_newline(true) {}
|
||||
~QHtmlStream() {}
|
||||
|
||||
void tag(const QString& name, const QString& cl, const QString& id)
|
||||
{
|
||||
finalize_open();
|
||||
indent();
|
||||
|
||||
m_stream << '<' << name;
|
||||
m_state = TAG;
|
||||
|
||||
if (!cl.isEmpty())
|
||||
m_stream << " class=\"" << cl << "\"";
|
||||
if (!id.isEmpty())
|
||||
m_stream << " id=\"" << id << "\"";
|
||||
}
|
||||
|
||||
void block(const QString& name, const QString& cl, const QString& id)
|
||||
{
|
||||
finalize_open();
|
||||
indent();
|
||||
|
||||
m_stream << '<' << name;
|
||||
m_indent += '\t';
|
||||
m_blockstack.push_front(name);
|
||||
m_state = BLOCK;
|
||||
|
||||
if (!cl.isEmpty())
|
||||
m_stream << " class=\"" << cl << "\"";
|
||||
if (!id.isEmpty())
|
||||
m_stream << " id=\"" << id << "\"";
|
||||
}
|
||||
|
||||
void parameter(const QString& param_name)
|
||||
{
|
||||
if (m_state == NORMAL_FLOW) return;
|
||||
|
||||
m_stream << " " << param_name;
|
||||
m_enclosing_state = m_state;
|
||||
m_state = PARAM;
|
||||
}
|
||||
|
||||
void close()
|
||||
{
|
||||
finalize_open();
|
||||
|
||||
m_indent.truncate(m_indent.length() - 1);
|
||||
indent();
|
||||
m_stream << "</" << m_blockstack.first() << ">";
|
||||
m_blockstack.pop_front();
|
||||
}
|
||||
void close_all(bool indent)
|
||||
{
|
||||
while( ! m_blockstack.empty() )
|
||||
{
|
||||
if (indent)
|
||||
(*this) << endl;
|
||||
close();
|
||||
}
|
||||
}
|
||||
|
||||
void data()
|
||||
{
|
||||
finalize_open();
|
||||
}
|
||||
|
||||
QHtmlStream & operator<< ( QChar c ) { return output(c); }
|
||||
QHtmlStream & operator<< ( char c ) { return output(c); }
|
||||
QHtmlStream & operator<< ( signed short i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( unsigned short i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( signed int i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( unsigned int i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( signed long i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( unsigned long i ) { return output(i); }
|
||||
QHtmlStream & operator<< ( float f ) { return output(f); }
|
||||
QHtmlStream & operator<< ( double f ) { return output(f); }
|
||||
QHtmlStream & operator<< ( const char * s ) { return output(s); }
|
||||
QHtmlStream & operator<< ( const QString & s ) { return output(s); }
|
||||
QHtmlStream & operator<< ( const QCString & s ) { return output(s); }
|
||||
|
||||
QHtmlStream & operator<< ( const QHtmlStreamManip& op )
|
||||
{
|
||||
op(*this);
|
||||
return *this;
|
||||
}
|
||||
|
||||
QHtmlStream & operator<< (QTSManip m)
|
||||
{
|
||||
finalize_open();
|
||||
m_stream << m;
|
||||
return (*this);
|
||||
}
|
||||
|
||||
QHtmlStream & operator<< (QTSFUNC f)
|
||||
{
|
||||
finalize_open();
|
||||
int old_flags = m_stream.flags();
|
||||
m_stream << f;
|
||||
if (old_flags == m_stream.flags())
|
||||
m_newline = true;
|
||||
return (*this);
|
||||
}
|
||||
};
|
||||
|
||||
/***************************************************************************************
|
||||
* Stream manipulators
|
||||
*/
|
||||
|
||||
class QHtmlStreamManip0 : public QHtmlStreamManip
|
||||
{
|
||||
public:
|
||||
typedef void (QHtmlStream::*Method)();
|
||||
|
||||
private:
|
||||
Method m_method;
|
||||
|
||||
void apply (QHtmlStream& stream) const
|
||||
{ (stream.*m_method)(); }
|
||||
|
||||
public:
|
||||
QHtmlStreamManip0(Method m)
|
||||
: m_method(m) {}
|
||||
};
|
||||
|
||||
class QHtmlStreamManip1 : public QHtmlStreamManip
|
||||
{
|
||||
public:
|
||||
typedef void (QHtmlStream::*Method)(const QString& param);
|
||||
|
||||
private:
|
||||
Method m_method;
|
||||
QString m_param;
|
||||
|
||||
void apply(QHtmlStream& stream) const
|
||||
{ (stream.*m_method)(m_param); }
|
||||
|
||||
public:
|
||||
QHtmlStreamManip1(Method m, const QString& param)
|
||||
: m_method(m), m_param(param) {}
|
||||
};
|
||||
|
||||
class QHtmlStreamManip3 : public QHtmlStreamManip
|
||||
{
|
||||
public:
|
||||
typedef void (QHtmlStream::*Method)(const QString& param0, const QString& param1, const QString& param2);
|
||||
|
||||
private:
|
||||
Method m_method;
|
||||
QString m_param0, m_param1, m_param2;
|
||||
|
||||
void apply(QHtmlStream& stream) const
|
||||
{ (stream.*m_method)(m_param0, m_param1, m_param2); }
|
||||
|
||||
public:
|
||||
QHtmlStreamManip3(Method m, const QString& param0, const QString& param1, const QString& param2)
|
||||
: m_method(m),
|
||||
m_param0(param0), m_param1(param1), m_param2(param2) {}
|
||||
};
|
||||
|
||||
class CloseAll : public QHtmlStreamManip
|
||||
{
|
||||
private:
|
||||
bool m_indent;
|
||||
void apply(QHtmlStream& stream) const
|
||||
{ stream.close_all(m_indent); }
|
||||
public:
|
||||
CloseAll(bool indent) : m_indent(indent) {}
|
||||
};
|
||||
|
||||
inline QHtmlStreamManip3 tag(const QString& name, const QString& cl = QString::null, const QString& id = QString::null)
|
||||
{ return QHtmlStreamManip3(&QHtmlStream::tag, name, cl, id); }
|
||||
inline QHtmlStreamManip3 block(const QString& name, const QString& cl = QString::null, const QString& id = QString::null)
|
||||
{ return QHtmlStreamManip3(&QHtmlStream::block, name, cl, id); }
|
||||
|
||||
inline QHtmlStreamManip1 param(const QString& name)
|
||||
{ return QHtmlStreamManip1(&QHtmlStream::parameter, name); }
|
||||
|
||||
inline QHtmlStreamManip0 close()
|
||||
{ return QHtmlStreamManip0(&QHtmlStream::close); }
|
||||
inline QHtmlStreamManip0 data()
|
||||
{ return QHtmlStreamManip0(&QHtmlStream::data); }
|
||||
inline CloseAll close_all(bool indent = true)
|
||||
{ return CloseAll(indent); }
|
||||
|
||||
#endif
|
@ -0,0 +1,76 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "parsers.h"
|
||||
#include "../apt.h"
|
||||
|
||||
#include "qhtmlstream.h"
|
||||
|
||||
#include <kio/slavebase.h>
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
/** Parses the output of apt-cache search */
|
||||
void Search::operator() (AptProtocol* slave, const QString& tag, const QString& value)
|
||||
{
|
||||
static QMap<QString, QString> results;
|
||||
static QString cur_package;
|
||||
static QString query;
|
||||
|
||||
if (tag == "begin")
|
||||
{
|
||||
query = value;
|
||||
m_result_count = 0;
|
||||
}
|
||||
else if (tag == "package")
|
||||
{
|
||||
++m_result_count;
|
||||
cur_package = value;
|
||||
}
|
||||
else if (tag == "short_desc")
|
||||
{
|
||||
results[cur_package] = value;
|
||||
}
|
||||
else if (tag == "end")
|
||||
{
|
||||
// We separate results whose package name matches the query
|
||||
// and those who matches only with the description
|
||||
QString normal, special;
|
||||
QHtmlStream sstream(&special), nstream(&normal);
|
||||
|
||||
// QMap iteration sorts wrt the key < operator
|
||||
// with QStrings, it means case insensitive sort
|
||||
QMap<QString, QString>::ConstIterator i;
|
||||
for (i = results.begin(); i != results.end(); ++i)
|
||||
{
|
||||
const QString key = i.key();
|
||||
QHtmlStream* stream = &nstream;
|
||||
if (key == query)
|
||||
stream = &sstream;
|
||||
|
||||
(*stream)
|
||||
<< block("tr")
|
||||
<< block("td")
|
||||
<< block("a") << param("href") << "apt:/show?" + key
|
||||
<< key
|
||||
<< close()
|
||||
<< close() << block("td") << *i << close() << endl
|
||||
<< close() << endl;
|
||||
}
|
||||
|
||||
if (!special.isEmpty())
|
||||
*slave << QString("<table>") + special + QString("</table>\n<hr>\n");
|
||||
*slave << QString("<table>") + normal + QString("</table>");
|
||||
|
||||
results.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,194 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "parsers.h"
|
||||
#include "../apt.h"
|
||||
|
||||
#include <klocale.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
static const QString
|
||||
html_attribute_begin("<tr><td class=\"attname\">%1</td>\n\t<td>\n\t\t"),
|
||||
html_attribute_classed("<tr class=\"%1\"><td class=\"attname\">%2</td>\n\t<td>\n\t\t"),
|
||||
html_attribute_end("\n\t</td>\n</tr>\n");
|
||||
|
||||
// Converts the special chars in orig into its HTML equivalents
|
||||
static QString text2html(const QString& orig)
|
||||
{ QString ret(orig);
|
||||
ret = ret.replace("<(?!a href)", "<");
|
||||
//ret = ret.replace( QRegExp("\n"), "<br />\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void close_indent(int indent, QString& buffer)
|
||||
{
|
||||
if (buffer.isEmpty()) return;
|
||||
if (indent)
|
||||
buffer += "\n\t\t</div>";
|
||||
}
|
||||
static void close_item(int indent, QString& buffer)
|
||||
{
|
||||
if (buffer.isEmpty()) return;
|
||||
close_indent(indent, buffer);
|
||||
buffer += html_attribute_end;
|
||||
}
|
||||
|
||||
static void close_table(const QString& version, int indent, QString& buffer)
|
||||
{
|
||||
if (buffer.isEmpty()) return;
|
||||
close_item(indent, buffer);
|
||||
buffer = version + "<table class=\"version\">\n" + buffer + "</table>\n";
|
||||
}
|
||||
|
||||
static QString version_header_link(const KURL& url, const QString& name)
|
||||
{ return QString("\t<a class=\"links\" href=\"" + url.htmlURL() + "\">" + name + "</a>\n"); }
|
||||
|
||||
namespace Parsers
|
||||
{
|
||||
|
||||
Show::Show(const QString& package, const QString& installed_version, bool act)
|
||||
: m_package(package), m_installed(installed_version), m_act(false)
|
||||
{
|
||||
m_act = act;
|
||||
}
|
||||
|
||||
void Show::operator() (AptProtocol* slave, const QString& tag, const QString& value)
|
||||
{
|
||||
// Since we want to show the version first, we should wait for it
|
||||
// before sending anything
|
||||
static QString version;
|
||||
static QString buffer;
|
||||
static QString attribute;
|
||||
static int indent;
|
||||
static bool multiline = false;
|
||||
static bool first_line = false, new_paragraph = true;
|
||||
|
||||
if (tag == "begin" || tag == "package" || tag == "end")
|
||||
{
|
||||
if (multiline && !new_paragraph)
|
||||
buffer += "</p>";
|
||||
|
||||
if (tag == "begin")
|
||||
m_result_count = 0;
|
||||
else
|
||||
{
|
||||
m_result_count += (tag == "package");
|
||||
|
||||
close_table(version, indent, buffer);
|
||||
if (!buffer.isEmpty()) *slave << buffer;
|
||||
}
|
||||
|
||||
// init the state variables for the next package
|
||||
buffer = "";
|
||||
indent = 0;
|
||||
first_line = false;
|
||||
new_paragraph = true;
|
||||
}
|
||||
else if (tag == "field")
|
||||
{
|
||||
if (multiline && !new_paragraph)
|
||||
buffer += "</p>";
|
||||
|
||||
attribute = value;
|
||||
if (value == "Depends" || value == "Description")
|
||||
{
|
||||
close_item(indent, buffer);
|
||||
buffer +=
|
||||
html_attribute_begin.arg(value)
|
||||
+ " ";
|
||||
|
||||
close_item(indent, buffer);
|
||||
buffer += html_attribute_begin.arg(" ");
|
||||
}
|
||||
else if (value != "Version" && value != "Package")
|
||||
{
|
||||
close_item(indent, buffer);
|
||||
buffer += html_attribute_begin.arg(value);
|
||||
}
|
||||
|
||||
if (value == "Description")
|
||||
{
|
||||
multiline = true;
|
||||
new_paragraph = true;
|
||||
first_line = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
multiline = false;
|
||||
}
|
||||
}
|
||||
else if (tag == "indent")
|
||||
{
|
||||
close_indent(indent, buffer);
|
||||
|
||||
int new_indent = value.toInt();
|
||||
if (new_indent)
|
||||
buffer += "\n\t<div style=\"margin-left: " + value + "em\">";
|
||||
indent = new_indent;
|
||||
}
|
||||
else if (tag == "data" && attribute == "Version")
|
||||
{
|
||||
KURL action ("apt:/get");
|
||||
|
||||
QString item_id = mangle_version(value);
|
||||
if (value == m_installed)
|
||||
{
|
||||
action.setQuery("remove");
|
||||
version = QString("<div class=\"version-header-installed\" id=\"%1\">").arg(item_id)
|
||||
+ i18n("Installed version %1").arg(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
action.setQuery("install");
|
||||
version = QString("<div class=\"version-header\" id=\"%1\">").arg(item_id)
|
||||
+ i18n("Version %1").arg(value);
|
||||
}
|
||||
|
||||
action.addQueryItem("package", m_package);
|
||||
action.addQueryItem("version", value);
|
||||
|
||||
if (m_act)
|
||||
{
|
||||
if (value == m_installed)
|
||||
version += version_header_link(action, i18n("Remove"));
|
||||
else
|
||||
version += version_header_link(action, i18n("Install"));
|
||||
}
|
||||
version += "</div>\n";
|
||||
|
||||
}
|
||||
else if (tag == "data")
|
||||
{
|
||||
if (multiline)
|
||||
{
|
||||
static const QRegExp rx_empty("^\\s*$");
|
||||
if (rx_empty.exactMatch(value))
|
||||
{
|
||||
buffer += "</p>";
|
||||
new_paragraph = true;
|
||||
}
|
||||
else if (first_line)
|
||||
{
|
||||
new_paragraph = true;
|
||||
first_line = false;
|
||||
}
|
||||
else if (new_paragraph)
|
||||
{
|
||||
buffer += "<p>";
|
||||
new_paragraph = false;
|
||||
}
|
||||
}
|
||||
buffer += text2html(QString(value).replace(QRegExp("(http://\\S+)"),QString("<a href=\"\\1\">\\1</a>")));
|
||||
}
|
||||
else if (tag == "package_link")
|
||||
buffer += "<a href=\"" + slave->buildURL("show", value).htmlURL() + "\">" + value + "</a>";
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#include "regexps.h"
|
||||
#include "debug.h"
|
||||
|
||||
#include <kdebug.h>
|
||||
|
||||
bool match_dversion(QString version)
|
||||
{
|
||||
static QRegExp rx_revision(rxs_revision);
|
||||
QString allowed_vchars = ".+\\w";
|
||||
|
||||
kdDebug(DEBUG_ZONE) << version << endl;
|
||||
if (version[1] == ':')
|
||||
{
|
||||
allowed_vchars += ":";
|
||||
if (! version[0].isDigit()) return false;
|
||||
kdDebug(DEBUG_ZONE) << "Matched epoch" << endl;
|
||||
version = version.right( version.length() - 2 );
|
||||
}
|
||||
|
||||
kdDebug(DEBUG_ZONE) << version << endl;
|
||||
int rev_pos = version.findRev('-');
|
||||
if (rev_pos > -1)
|
||||
{
|
||||
allowed_vchars += "-";
|
||||
QString revision = version.right( version.length() - rev_pos - 1);
|
||||
if (! rx_revision.exactMatch(revision))
|
||||
return false;
|
||||
|
||||
kdDebug(DEBUG_ZONE) << "Matched revision" << endl;
|
||||
version.truncate( version.length() - rev_pos - 1 );
|
||||
}
|
||||
|
||||
QRegExp rx_version("\\d[" + allowed_vchars + "]*");
|
||||
return rx_version.exactMatch(version);
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
||||
|
||||
#ifndef REGEXPS_H
|
||||
#define REGEXPS_H
|
||||
|
||||
#include <qstring.h>
|
||||
#include <qregexp.h>
|
||||
|
||||
static const QString rxs_pkgname("\\w[\\w+-.]+");
|
||||
static const QString rxs_revision("\\w[.+\\w]*");
|
||||
|
||||
bool match_dversion(QString version);
|
||||
|
||||
#endif
|
||||
|
@ -0,0 +1,9 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
@ -0,0 +1,9 @@
|
||||
/***************************************************************************
|
||||
* Copyright (C) 2003 by Sylvain Joyeux *
|
||||
* sylvain.joyeux@m4x.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 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
***************************************************************************/
|
Loading…
Reference in new issue