mirror of
				https://gitlab.archlinux.org/pacman/pacman.git
				synced 2025-11-04 09:24:45 +01:00 
			
		
		
		
	Compare commits
	
		
			31 Commits
		
	
	
		
			release/6.
			...
			release/5.
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					f55c9f30a3 | ||
| 
						 | 
					5537881b25 | ||
| 
						 | 
					027c87ae3f | ||
| 
						 | 
					b2c97ad762 | ||
| 
						 | 
					c834a75718 | ||
| 
						 | 
					82d4b98ddc | ||
| 
						 | 
					50f5e484f2 | ||
| 
						 | 
					1e9cd30e48 | ||
| 
						 | 
					2a345604cd | ||
| 
						 | 
					f4da297de2 | ||
| 
						 | 
					22e6daa794 | ||
| 
						 | 
					d69da08abe | ||
| 
						 | 
					12503767c0 | ||
| 
						 | 
					03cfe9e21c | ||
| 
						 | 
					b3be0ce99b | ||
| 
						 | 
					68418c5442 | ||
| 
						 | 
					bb50e8d73a | ||
| 
						 | 
					b9d397c731 | ||
| 
						 | 
					39ce2b7663 | ||
| 
						 | 
					01d5a68c1a | ||
| 
						 | 
					08aa3d97ea | ||
| 
						 | 
					0bf4779cda | ||
| 
						 | 
					d61c398b2c | ||
| 
						 | 
					7faa795268 | ||
| 
						 | 
					0d0a4bd680 | ||
| 
						 | 
					76c50e3439 | ||
| 
						 | 
					c2fa9f85cc | ||
| 
						 | 
					6f1a9e6ea8 | ||
| 
						 | 
					41c3b1d78c | ||
| 
						 | 
					d6dcc93645 | ||
| 
						 | 
					019f9386ef | 
@@ -16,9 +16,5 @@ indent_style = tab
 | 
			
		||||
[{NEWS,HACKING}]
 | 
			
		||||
indent_style = space
 | 
			
		||||
 | 
			
		||||
[meson.build]
 | 
			
		||||
indent_style = space
 | 
			
		||||
indent_size = 2
 | 
			
		||||
 | 
			
		||||
[*.py]
 | 
			
		||||
indent_style = space
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,24 @@
 | 
			
		||||
*~
 | 
			
		||||
*.o
 | 
			
		||||
ABOUT-NLS
 | 
			
		||||
aclocal.m4
 | 
			
		||||
autom4te.cache
 | 
			
		||||
config.h
 | 
			
		||||
config.h.in
 | 
			
		||||
config.log
 | 
			
		||||
config.status
 | 
			
		||||
config.status.lineno
 | 
			
		||||
configure
 | 
			
		||||
configure.lineno
 | 
			
		||||
cov-int
 | 
			
		||||
cscope.in.out
 | 
			
		||||
cscope.out
 | 
			
		||||
cscope.po.out
 | 
			
		||||
intl
 | 
			
		||||
libtool
 | 
			
		||||
Makefile
 | 
			
		||||
Makefile.in
 | 
			
		||||
pacman-*.tar.gz
 | 
			
		||||
root
 | 
			
		||||
stamp-h1
 | 
			
		||||
tags
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										132
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@@ -1,132 +0,0 @@
 | 
			
		||||
variables:
 | 
			
		||||
  MAKEFLAGS: "-j10"
 | 
			
		||||
  VERBOSE: 1
 | 
			
		||||
 | 
			
		||||
default:
 | 
			
		||||
  after_script:
 | 
			
		||||
    - build-aux/print-failed-test-output build/meson-logs/testlog.json
 | 
			
		||||
 | 
			
		||||
.arch-test:
 | 
			
		||||
  image: archlinux:base-devel
 | 
			
		||||
  before_script:
 | 
			
		||||
    - >
 | 
			
		||||
      pacman -Syu --needed --noconfirm
 | 
			
		||||
      git
 | 
			
		||||
      gpgme libarchive curl
 | 
			
		||||
      python
 | 
			
		||||
      fakeroot fakechroot
 | 
			
		||||
      meson
 | 
			
		||||
  artifacts:
 | 
			
		||||
      when: always
 | 
			
		||||
      paths:
 | 
			
		||||
        - build/meson-logs/meson-log.txt
 | 
			
		||||
 | 
			
		||||
arch:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-debug:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup --buildtype=debug --werror build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-docs:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - pacman -Syu --needed --noconfirm asciidoc
 | 
			
		||||
    - meson setup -Ddoc=enabled build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
 | 
			
		||||
arch-clang:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - pacman -Syu --needed --noconfirm clang
 | 
			
		||||
    - CC=clang meson setup build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
#arch-valgrind:
 | 
			
		||||
#  extends: .arch-test
 | 
			
		||||
#  script:
 | 
			
		||||
#    - pacman -Syu --needed --noconfirm valgrind
 | 
			
		||||
#    - pacman -U --noconfirm https://geo.mirror.pkgbuild.com/core-debug/os/x86_64/glibc-debug-$(pacman -S --print-format %v glibc)-x86_64.pkg.tar.zst
 | 
			
		||||
#    - meson setup build
 | 
			
		||||
#    - ninja -C build
 | 
			
		||||
#    - PACTEST_VALGRIND=1 fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-nettle:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup -Dcrypto=nettle --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-no-gpg:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup -Dgpgme=disabled --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-no-curl:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup -Dcurl=disabled --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
arch-no-nls:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup -Di18n=false --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
debian:
 | 
			
		||||
  image: debian:bullseye
 | 
			
		||||
  before_script:
 | 
			
		||||
    - apt update
 | 
			
		||||
    - >
 | 
			
		||||
      apt -y install --no-install-recommends
 | 
			
		||||
      git pkg-config meson gcc libtool
 | 
			
		||||
      libgpgme-dev libarchive-dev libcurl4-openssl-dev libssl-dev curl
 | 
			
		||||
      gettext python3 python3-setuptools dash gawk ca-certificates
 | 
			
		||||
      fakeroot fakechroot
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
fedora:
 | 
			
		||||
  image: fedora
 | 
			
		||||
  before_script:
 | 
			
		||||
    - >
 | 
			
		||||
      dnf -y install
 | 
			
		||||
      git findutils patch sed
 | 
			
		||||
      meson gcc libtool bsdtar
 | 
			
		||||
      gpgme-devel libarchive-devel libcurl-devel openssl-devel gettext-devel
 | 
			
		||||
      asciidoc python3 dash gawk
 | 
			
		||||
      fakeroot fakechroot
 | 
			
		||||
      perl-Module-Load-Conditional
 | 
			
		||||
  script:
 | 
			
		||||
    - meson setup --buildtype=debug build
 | 
			
		||||
    - ninja -C build
 | 
			
		||||
    - fakechroot meson test -C build
 | 
			
		||||
 | 
			
		||||
pages:
 | 
			
		||||
  extends: .arch-test
 | 
			
		||||
  script:
 | 
			
		||||
    - pacman -Syu --needed --noconfirm asciidoc
 | 
			
		||||
    - meson setup -Ddoc=enabled build
 | 
			
		||||
    - ninja -C build html
 | 
			
		||||
  artifacts:
 | 
			
		||||
    paths:
 | 
			
		||||
      - build/doc
 | 
			
		||||
  publish: build/doc
 | 
			
		||||
  rules:
 | 
			
		||||
    - if: $CI_COMMIT_BRANCH == "release/6.1.x"
 | 
			
		||||
							
								
								
									
										1
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								.mailmap
									
									
									
									
									
								
							@@ -20,7 +20,6 @@ Juan Pablo González Tognarelli <lord_jotape@yahoo.com.ar> <jotapesan@gmail.com>
 | 
			
		||||
Manuel Tortosa <manutortosa@chakra-project.org> <manutortosa@gmail.com>
 | 
			
		||||
Marc - A. Dahlhaus <mad@wol.de>
 | 
			
		||||
Matthias Gorissen <matthias@archlinux.de> <siquame@web.de>
 | 
			
		||||
morganamilo <morganamilo@archlinux.org> <morganamilo@gmail.com>
 | 
			
		||||
Laszlo Papp <djszapi@archlinux.us> <djszapi2@gmail.com>
 | 
			
		||||
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba@petra.hos.u-szeged.hu>
 | 
			
		||||
Nagy Gabor <ngaba@bibl.u-szeged.hu> <ngaba at bibl.u-szeged.hu>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +1,17 @@
 | 
			
		||||
[main]
 | 
			
		||||
host = https://www.transifex.com
 | 
			
		||||
 | 
			
		||||
[o:toofishes:p:archlinux-pacman:r:libalpm-pot]
 | 
			
		||||
[archlinux-pacman.libalpm-pot]
 | 
			
		||||
file_filter = lib/libalpm/po/<lang>.po
 | 
			
		||||
source_file = lib/libalpm/po/libalpm.pot
 | 
			
		||||
source_lang = en
 | 
			
		||||
 | 
			
		||||
[o:toofishes:p:archlinux-pacman:r:pacman-pot]
 | 
			
		||||
[archlinux-pacman.pacman-pot]
 | 
			
		||||
file_filter = src/pacman/po/<lang>.po
 | 
			
		||||
source_file = src/pacman/po/pacman.pot
 | 
			
		||||
source_lang = en
 | 
			
		||||
 | 
			
		||||
[o:toofishes:p:archlinux-pacman:r:pacman-scripts-pot]
 | 
			
		||||
[archlinux-pacman.pacman-scripts-pot]
 | 
			
		||||
file_filter = scripts/po/<lang>.po
 | 
			
		||||
source_file = scripts/po/pacman-scripts.pot
 | 
			
		||||
source_lang = en
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										250
									
								
								.ycm_extra_conf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								.ycm_extra_conf.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,250 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
# SPDX-License-Identifier: Unlicense
 | 
			
		||||
#
 | 
			
		||||
# Based on the template file provided by the 'YCM-Generator' project authored by
 | 
			
		||||
# Reuben D'Netto.
 | 
			
		||||
# Jiahui Xie has re-reformatted and expanded the original script in accordance
 | 
			
		||||
# to the requirements of the PEP 8 style guide and 'systemd' project,
 | 
			
		||||
# respectively.
 | 
			
		||||
#
 | 
			
		||||
# The original license is preserved as it is.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# This is free and unencumbered software released into the public domain.
 | 
			
		||||
#
 | 
			
		||||
# Anyone is free to copy, modify, publish, use, compile, sell, or
 | 
			
		||||
# distribute this software, either in source code form or as a compiled
 | 
			
		||||
# binary, for any purpose, commercial or non-commercial, and by any
 | 
			
		||||
# means.
 | 
			
		||||
#
 | 
			
		||||
# In jurisdictions that recognize copyright laws, the author or authors
 | 
			
		||||
# of this software dedicate any and all copyright interest in the
 | 
			
		||||
# software to the public domain. We make this dedication for the benefit
 | 
			
		||||
# of the public at large and to the detriment of our heirs and
 | 
			
		||||
# successors. We intend this dedication to be an overt act of
 | 
			
		||||
# relinquishment in perpetuity of all present and future rights to this
 | 
			
		||||
# software under copyright law.
 | 
			
		||||
#
 | 
			
		||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 | 
			
		||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 | 
			
		||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 | 
			
		||||
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
 | 
			
		||||
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 | 
			
		||||
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 | 
			
		||||
# OTHER DEALINGS IN THE SOFTWARE.
 | 
			
		||||
#
 | 
			
		||||
# For more information, please refer to <http://unlicense.org/>
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
YouCompleteMe configuration file tailored to support the 'meson' build system
 | 
			
		||||
used by the 'systemd' project.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
import glob
 | 
			
		||||
import os
 | 
			
		||||
import ycm_core
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SOURCE_EXTENSIONS = (".C", ".cpp", ".cxx", ".cc", ".c", ".m", ".mm")
 | 
			
		||||
HEADER_EXTENSIONS = (".H", ".h", ".hxx", ".hpp", ".hh")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def DirectoryOfThisScript():
 | 
			
		||||
    """
 | 
			
		||||
    Return the absolute path of the parent directory containing this
 | 
			
		||||
    script.
 | 
			
		||||
    """
 | 
			
		||||
    return os.path.dirname(os.path.abspath(__file__))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def GuessBuildDirectory():
 | 
			
		||||
    """
 | 
			
		||||
    Guess the build directory using the following heuristics:
 | 
			
		||||
 | 
			
		||||
    1. Returns the current directory of this script plus 'build'
 | 
			
		||||
    subdirectory in absolute path if this subdirectory exists.
 | 
			
		||||
 | 
			
		||||
    2. Otherwise, probes whether there exists any directory
 | 
			
		||||
    containing '.ninja_log' file two levels above the current directory;
 | 
			
		||||
    returns this single directory only if there is one candidate.
 | 
			
		||||
    """
 | 
			
		||||
    result = os.path.join(DirectoryOfThisScript(), "build")
 | 
			
		||||
 | 
			
		||||
    if os.path.exists(result):
 | 
			
		||||
        return result
 | 
			
		||||
 | 
			
		||||
    result = glob.glob(os.path.join(DirectoryOfThisScript(),
 | 
			
		||||
                                    "..", "..", "*", ".ninja_log"))
 | 
			
		||||
 | 
			
		||||
    if not result:
 | 
			
		||||
        return ""
 | 
			
		||||
 | 
			
		||||
    if 1 != len(result):
 | 
			
		||||
        return ""
 | 
			
		||||
 | 
			
		||||
    return os.path.split(result[0])[0]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def TraverseByDepth(root, include_extensions):
 | 
			
		||||
    """
 | 
			
		||||
    Return a set of child directories of the 'root' containing file
 | 
			
		||||
    extensions specified in 'include_extensions'.
 | 
			
		||||
 | 
			
		||||
    NOTE:
 | 
			
		||||
        1. The 'root' directory itself is excluded from the result set.
 | 
			
		||||
        2. No subdirectories would be excluded if 'include_extensions' is left
 | 
			
		||||
           to 'None'.
 | 
			
		||||
        3. Each entry in 'include_extensions' must begin with string '.'.
 | 
			
		||||
    """
 | 
			
		||||
    is_root = True
 | 
			
		||||
    result = set()
 | 
			
		||||
    # Perform a depth first top down traverse of the given directory tree.
 | 
			
		||||
    for root_dir, subdirs, file_list in os.walk(root):
 | 
			
		||||
        if not is_root:
 | 
			
		||||
            # print("Relative Root: ", root_dir)
 | 
			
		||||
            # print(subdirs)
 | 
			
		||||
            if include_extensions:
 | 
			
		||||
                get_ext = os.path.splitext
 | 
			
		||||
                subdir_extensions = {
 | 
			
		||||
                    get_ext(f)[-1] for f in file_list if get_ext(f)[-1]
 | 
			
		||||
                }
 | 
			
		||||
                if subdir_extensions & include_extensions:
 | 
			
		||||
                    result.add(root_dir)
 | 
			
		||||
            else:
 | 
			
		||||
                result.add(root_dir)
 | 
			
		||||
        else:
 | 
			
		||||
            is_root = False
 | 
			
		||||
 | 
			
		||||
    return result
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
_project_src_dir = os.path.join(DirectoryOfThisScript(), "src")
 | 
			
		||||
_include_dirs_set = TraverseByDepth(_project_src_dir, frozenset({".h"}))
 | 
			
		||||
flags = [
 | 
			
		||||
    "-x",
 | 
			
		||||
    "c"
 | 
			
		||||
    # The following flags are partially redundant due to the existence of
 | 
			
		||||
    # 'compile_commands.json'.
 | 
			
		||||
    #    '-Wall',
 | 
			
		||||
    #    '-Wextra',
 | 
			
		||||
    #    '-Wfloat-equal',
 | 
			
		||||
    #    '-Wpointer-arith',
 | 
			
		||||
    #    '-Wshadow',
 | 
			
		||||
    #    '-std=gnu99',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
for include_dir in _include_dirs_set:
 | 
			
		||||
    flags.append("-I" + include_dir)
 | 
			
		||||
 | 
			
		||||
# Set this to the absolute path to the folder (NOT the file!) containing the
 | 
			
		||||
# compile_commands.json file to use that instead of 'flags'. See here for
 | 
			
		||||
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
 | 
			
		||||
#
 | 
			
		||||
# You can get CMake to generate this file for you by adding:
 | 
			
		||||
#   set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
 | 
			
		||||
# to your CMakeLists.txt file.
 | 
			
		||||
#
 | 
			
		||||
# Most projects will NOT need to set this to anything; you can just change the
 | 
			
		||||
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
 | 
			
		||||
compilation_database_folder = GuessBuildDirectory()
 | 
			
		||||
 | 
			
		||||
if os.path.exists(compilation_database_folder):
 | 
			
		||||
    database = ycm_core.CompilationDatabase(compilation_database_folder)
 | 
			
		||||
else:
 | 
			
		||||
    database = None
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def MakeRelativePathsInFlagsAbsolute(flags, working_directory):
 | 
			
		||||
    """
 | 
			
		||||
    Iterate through 'flags' and replace the relative paths prefixed by
 | 
			
		||||
    '-isystem', '-I', '-iquote', '--sysroot=' with absolute paths
 | 
			
		||||
    start with 'working_directory'.
 | 
			
		||||
    """
 | 
			
		||||
    if not working_directory:
 | 
			
		||||
        return list(flags)
 | 
			
		||||
    new_flags = []
 | 
			
		||||
    make_next_absolute = False
 | 
			
		||||
    path_flags = ["-isystem", "-I", "-iquote", "--sysroot="]
 | 
			
		||||
    for flag in flags:
 | 
			
		||||
        new_flag = flag
 | 
			
		||||
 | 
			
		||||
        if make_next_absolute:
 | 
			
		||||
            make_next_absolute = False
 | 
			
		||||
            if not flag.startswith("/"):
 | 
			
		||||
                new_flag = os.path.join(working_directory, flag)
 | 
			
		||||
 | 
			
		||||
        for path_flag in path_flags:
 | 
			
		||||
            if flag == path_flag:
 | 
			
		||||
                make_next_absolute = True
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
            if flag.startswith(path_flag):
 | 
			
		||||
                path = flag[len(path_flag):]
 | 
			
		||||
                new_flag = path_flag + os.path.join(working_directory, path)
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
        if new_flag:
 | 
			
		||||
            new_flags.append(new_flag)
 | 
			
		||||
    return new_flags
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def IsHeaderFile(filename):
 | 
			
		||||
    """
 | 
			
		||||
    Check whether 'filename' is considered as a header file.
 | 
			
		||||
    """
 | 
			
		||||
    extension = os.path.splitext(filename)[1]
 | 
			
		||||
    return extension in HEADER_EXTENSIONS
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def GetCompilationInfoForFile(filename):
 | 
			
		||||
    """
 | 
			
		||||
    Helper function to look up compilation info of 'filename' in the 'database'.
 | 
			
		||||
    """
 | 
			
		||||
    # The compilation_commands.json file generated by CMake does not have
 | 
			
		||||
    # entries for header files. So we do our best by asking the db for flags for
 | 
			
		||||
    # a corresponding source file, if any. If one exists, the flags for that
 | 
			
		||||
    # file should be good enough.
 | 
			
		||||
    if not database:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    if IsHeaderFile(filename):
 | 
			
		||||
        basename = os.path.splitext(filename)[0]
 | 
			
		||||
        for extension in SOURCE_EXTENSIONS:
 | 
			
		||||
            replacement_file = basename + extension
 | 
			
		||||
            if os.path.exists(replacement_file):
 | 
			
		||||
                compilation_info = \
 | 
			
		||||
                    database.GetCompilationInfoForFile(replacement_file)
 | 
			
		||||
                if compilation_info.compiler_flags_:
 | 
			
		||||
                    return compilation_info
 | 
			
		||||
        return None
 | 
			
		||||
    return database.GetCompilationInfoForFile(filename)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def FlagsForFile(filename, **kwargs):
 | 
			
		||||
    """
 | 
			
		||||
    Callback function to be invoked by YouCompleteMe in order to get the
 | 
			
		||||
    information necessary to compile 'filename'.
 | 
			
		||||
 | 
			
		||||
    It returns a dictionary with a single element 'flags'. This element is a
 | 
			
		||||
    list of compiler flags to pass to libclang for the file 'filename'.
 | 
			
		||||
    """
 | 
			
		||||
    if database:
 | 
			
		||||
        # Bear in mind that compilation_info.compiler_flags_ does NOT return a
 | 
			
		||||
        # python list, but a "list-like" StringVec object
 | 
			
		||||
        compilation_info = GetCompilationInfoForFile(filename)
 | 
			
		||||
        if not compilation_info:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        final_flags = MakeRelativePathsInFlagsAbsolute(
 | 
			
		||||
            compilation_info.compiler_flags_,
 | 
			
		||||
            compilation_info.compiler_working_dir_)
 | 
			
		||||
 | 
			
		||||
    else:
 | 
			
		||||
        relative_to = DirectoryOfThisScript()
 | 
			
		||||
        final_flags = MakeRelativePathsInFlagsAbsolute(flags, relative_to)
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
        "flags": final_flags,
 | 
			
		||||
        "do_cache": True
 | 
			
		||||
    }
 | 
			
		||||
							
								
								
									
										13
									
								
								HACKING
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								HACKING
									
									
									
									
									
								
							@@ -176,3 +176,16 @@ For pacman:
 | 
			
		||||
-------------------------------------------
 | 
			
		||||
 | 
			
		||||
Never directly include config.h. This will always be added via Makefiles.
 | 
			
		||||
 | 
			
		||||
GDB and Valgrind Usage
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
When using GDB or valgrind on pacman, you will want to run it on the actual
 | 
			
		||||
binary rather than the shell script wrapper produced by libtool. The actual
 | 
			
		||||
binary lives at `src/pacman/.libs/lt-pacman`, and will exist after running
 | 
			
		||||
`./src/pacman/pacman` at least once.
 | 
			
		||||
 | 
			
		||||
For example, to run valgrind:
 | 
			
		||||
 | 
			
		||||
    ./src/pacman/pacman
 | 
			
		||||
    valgrind --leak-check=full -- src/pacman/.libs/lt-pacman -Syu
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										370
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										370
									
								
								INSTALL
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,370 @@
 | 
			
		||||
Installation Instructions
 | 
			
		||||
*************************
 | 
			
		||||
 | 
			
		||||
Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
 | 
			
		||||
Inc.
 | 
			
		||||
 | 
			
		||||
   Copying and distribution of this file, with or without modification,
 | 
			
		||||
are permitted in any medium without royalty provided the copyright
 | 
			
		||||
notice and this notice are preserved.  This file is offered as-is,
 | 
			
		||||
without warranty of any kind.
 | 
			
		||||
 | 
			
		||||
Basic Installation
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
   Briefly, the shell commands `./configure; make; make install' should
 | 
			
		||||
configure, build, and install this package.  The following
 | 
			
		||||
more-detailed instructions are generic; see the `README' file for
 | 
			
		||||
instructions specific to this package.  Some packages provide this
 | 
			
		||||
`INSTALL' file but do not implement all of the features documented
 | 
			
		||||
below.  The lack of an optional feature in a given package is not
 | 
			
		||||
necessarily a bug.  More recommendations for GNU packages can be found
 | 
			
		||||
in *note Makefile Conventions: (standards)Makefile Conventions.
 | 
			
		||||
 | 
			
		||||
   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, and a
 | 
			
		||||
file `config.log' containing compiler output (useful mainly for
 | 
			
		||||
debugging `configure').
 | 
			
		||||
 | 
			
		||||
   It can also use an optional file (typically called `config.cache'
 | 
			
		||||
and enabled with `--cache-file=config.cache' or simply `-C') that saves
 | 
			
		||||
the results of its tests to speed up reconfiguring.  Caching is
 | 
			
		||||
disabled by default to prevent problems with accidental use of stale
 | 
			
		||||
cache files.
 | 
			
		||||
 | 
			
		||||
   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 you are using the cache, and at
 | 
			
		||||
some point `config.cache' contains results you don't want to keep, you
 | 
			
		||||
may remove or edit it.
 | 
			
		||||
 | 
			
		||||
   The file `configure.ac' (or `configure.in') is used to create
 | 
			
		||||
`configure' by a program called `autoconf'.  You need `configure.ac' 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.
 | 
			
		||||
 | 
			
		||||
     Running `configure' might take a while.  While running, it prints
 | 
			
		||||
     some messages telling which features it is checking for.
 | 
			
		||||
 | 
			
		||||
  2. Type `make' to compile the package.
 | 
			
		||||
 | 
			
		||||
  3. Optionally, type `make check' to run any self-tests that come with
 | 
			
		||||
     the package, generally using the just-built uninstalled binaries.
 | 
			
		||||
 | 
			
		||||
  4. Type `make install' to install the programs and any data files and
 | 
			
		||||
     documentation.  When installing into a prefix owned by root, it is
 | 
			
		||||
     recommended that the package be configured and built as a regular
 | 
			
		||||
     user, and only the `make install' phase executed with root
 | 
			
		||||
     privileges.
 | 
			
		||||
 | 
			
		||||
  5. Optionally, type `make installcheck' to repeat any self-tests, but
 | 
			
		||||
     this time using the binaries in their final installed location.
 | 
			
		||||
     This target does not install anything.  Running this target as a
 | 
			
		||||
     regular user, particularly if the prior `make install' required
 | 
			
		||||
     root privileges, verifies that the installation completed
 | 
			
		||||
     correctly.
 | 
			
		||||
 | 
			
		||||
  6. You can remove the program binaries and object files from the
 | 
			
		||||
     source code directory by typing `make clean'.  To also remove the
 | 
			
		||||
     files that `configure' created (so you can compile the package for
 | 
			
		||||
     a different kind of computer), type `make distclean'.  There is
 | 
			
		||||
     also a `make maintainer-clean' target, but that is intended mainly
 | 
			
		||||
     for the package's developers.  If you use it, you may have to get
 | 
			
		||||
     all sorts of other programs in order to regenerate files that came
 | 
			
		||||
     with the distribution.
 | 
			
		||||
 | 
			
		||||
  7. Often, you can also type `make uninstall' to remove the installed
 | 
			
		||||
     files again.  In practice, not all packages have tested that
 | 
			
		||||
     uninstallation works correctly, even though it is required by the
 | 
			
		||||
     GNU Coding Standards.
 | 
			
		||||
 | 
			
		||||
  8. Some packages, particularly those that use Automake, provide `make
 | 
			
		||||
     distcheck', which can by used by developers to test that all other
 | 
			
		||||
     targets like `make install' and `make uninstall' work correctly.
 | 
			
		||||
     This target is generally not run by end users.
 | 
			
		||||
 | 
			
		||||
Compilers and Options
 | 
			
		||||
=====================
 | 
			
		||||
 | 
			
		||||
   Some systems require unusual options for compilation or linking that
 | 
			
		||||
the `configure' script does not know about.  Run `./configure --help'
 | 
			
		||||
for details on some of the pertinent environment variables.
 | 
			
		||||
 | 
			
		||||
   You can give `configure' initial values for configuration parameters
 | 
			
		||||
by setting variables in the command line or in the environment.  Here
 | 
			
		||||
is an example:
 | 
			
		||||
 | 
			
		||||
     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
 | 
			
		||||
 | 
			
		||||
   *Note Defining Variables::, for more details.
 | 
			
		||||
 | 
			
		||||
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 can use 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 `..'.  This
 | 
			
		||||
is known as a "VPATH" build.
 | 
			
		||||
 | 
			
		||||
   With a non-GNU `make', it is safer 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.
 | 
			
		||||
 | 
			
		||||
   On MacOS X 10.5 and later systems, you can create libraries and
 | 
			
		||||
executables that work on multiple system types--known as "fat" or
 | 
			
		||||
"universal" binaries--by specifying multiple `-arch' options to the
 | 
			
		||||
compiler but only a single `-arch' option to the preprocessor.  Like
 | 
			
		||||
this:
 | 
			
		||||
 | 
			
		||||
     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
 | 
			
		||||
                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
 | 
			
		||||
                 CPP="gcc -E" CXXCPP="g++ -E"
 | 
			
		||||
 | 
			
		||||
   This is not guaranteed to produce working output in all cases, you
 | 
			
		||||
may have to build one architecture at a time and combine the results
 | 
			
		||||
using the `lipo' tool if you have problems.
 | 
			
		||||
 | 
			
		||||
Installation Names
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
   By default, `make install' installs the package's commands under
 | 
			
		||||
`/usr/local/bin', include files under `/usr/local/include', etc.  You
 | 
			
		||||
can specify an installation prefix other than `/usr/local' by giving
 | 
			
		||||
`configure' the option `--prefix=PREFIX', where PREFIX must be an
 | 
			
		||||
absolute file name.
 | 
			
		||||
 | 
			
		||||
   You can specify separate installation prefixes for
 | 
			
		||||
architecture-specific files and architecture-independent files.  If you
 | 
			
		||||
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
 | 
			
		||||
PREFIX as the prefix for installing programs and libraries.
 | 
			
		||||
Documentation and other data files still use the regular prefix.
 | 
			
		||||
 | 
			
		||||
   In addition, if you use an unusual directory layout you can give
 | 
			
		||||
options like `--bindir=DIR' to specify different values for particular
 | 
			
		||||
kinds of files.  Run `configure --help' for a list of the directories
 | 
			
		||||
you can set and what kinds of files go in them.  In general, the
 | 
			
		||||
default for these options is expressed in terms of `${prefix}', so that
 | 
			
		||||
specifying just `--prefix' will affect all of the other directory
 | 
			
		||||
specifications that were not explicitly provided.
 | 
			
		||||
 | 
			
		||||
   The most portable way to affect installation locations is to pass the
 | 
			
		||||
correct locations to `configure'; however, many packages provide one or
 | 
			
		||||
both of the following shortcuts of passing variable assignments to the
 | 
			
		||||
`make install' command line to change installation locations without
 | 
			
		||||
having to reconfigure or recompile.
 | 
			
		||||
 | 
			
		||||
   The first method involves providing an override variable for each
 | 
			
		||||
affected directory.  For example, `make install
 | 
			
		||||
prefix=/alternate/directory' will choose an alternate location for all
 | 
			
		||||
directory configuration variables that were expressed in terms of
 | 
			
		||||
`${prefix}'.  Any directories that were specified during `configure',
 | 
			
		||||
but not in terms of `${prefix}', must each be overridden at install
 | 
			
		||||
time for the entire installation to be relocated.  The approach of
 | 
			
		||||
makefile variable overrides for each directory variable is required by
 | 
			
		||||
the GNU Coding Standards, and ideally causes no recompilation.
 | 
			
		||||
However, some platforms have known limitations with the semantics of
 | 
			
		||||
shared libraries that end up requiring recompilation when using this
 | 
			
		||||
method, particularly noticeable in packages that use GNU Libtool.
 | 
			
		||||
 | 
			
		||||
   The second method involves providing the `DESTDIR' variable.  For
 | 
			
		||||
example, `make install DESTDIR=/alternate/directory' will prepend
 | 
			
		||||
`/alternate/directory' before all installation names.  The approach of
 | 
			
		||||
`DESTDIR' overrides is not required by the GNU Coding Standards, and
 | 
			
		||||
does not work on platforms that have drive letters.  On the other hand,
 | 
			
		||||
it does better at avoiding recompilation issues, and works well even
 | 
			
		||||
when some directory options were not specified in terms of `${prefix}'
 | 
			
		||||
at `configure' time.
 | 
			
		||||
 | 
			
		||||
Optional Features
 | 
			
		||||
=================
 | 
			
		||||
 | 
			
		||||
   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'.
 | 
			
		||||
 | 
			
		||||
   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.
 | 
			
		||||
 | 
			
		||||
   Some packages offer the ability to configure how verbose the
 | 
			
		||||
execution of `make' will be.  For these packages, running `./configure
 | 
			
		||||
--enable-silent-rules' sets the default to minimal output, which can be
 | 
			
		||||
overridden with `make V=1'; while running `./configure
 | 
			
		||||
--disable-silent-rules' sets the default to verbose, which can be
 | 
			
		||||
overridden with `make V=0'.
 | 
			
		||||
 | 
			
		||||
Particular systems
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
 | 
			
		||||
CC is not installed, it is recommended to use the following options in
 | 
			
		||||
order to use an ANSI C compiler:
 | 
			
		||||
 | 
			
		||||
     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
 | 
			
		||||
 | 
			
		||||
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 | 
			
		||||
 | 
			
		||||
   HP-UX `make' updates targets which have the same time stamps as
 | 
			
		||||
their prerequisites, which makes it generally unusable when shipped
 | 
			
		||||
generated files such as `configure' are involved.  Use GNU `make'
 | 
			
		||||
instead.
 | 
			
		||||
 | 
			
		||||
   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
 | 
			
		||||
parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
 | 
			
		||||
a workaround.  If GNU CC is not installed, it is therefore recommended
 | 
			
		||||
to try
 | 
			
		||||
 | 
			
		||||
     ./configure CC="cc"
 | 
			
		||||
 | 
			
		||||
and if that doesn't work, try
 | 
			
		||||
 | 
			
		||||
     ./configure CC="cc -nodtk"
 | 
			
		||||
 | 
			
		||||
   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
 | 
			
		||||
directory contains several dysfunctional programs; working variants of
 | 
			
		||||
these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
 | 
			
		||||
in your `PATH', put it _after_ `/usr/bin'.
 | 
			
		||||
 | 
			
		||||
   On Haiku, software installed for all users goes in `/boot/common',
 | 
			
		||||
not `/usr/local'.  It is recommended to use the following options:
 | 
			
		||||
 | 
			
		||||
     ./configure --prefix=/boot/common
 | 
			
		||||
 | 
			
		||||
Specifying the System Type
 | 
			
		||||
==========================
 | 
			
		||||
 | 
			
		||||
   There may be some features `configure' cannot figure out
 | 
			
		||||
automatically, but needs to determine by the type of machine the package
 | 
			
		||||
will run on.  Usually, assuming the package is built to be run on the
 | 
			
		||||
_same_ architectures, `configure' can figure that out, but if it prints
 | 
			
		||||
a message saying it cannot guess the machine type, give it the
 | 
			
		||||
`--build=TYPE' option.  TYPE can either be a short name for the system
 | 
			
		||||
type, such as `sun4', or a canonical name which has the form:
 | 
			
		||||
 | 
			
		||||
     CPU-COMPANY-SYSTEM
 | 
			
		||||
 | 
			
		||||
where SYSTEM can have one of these forms:
 | 
			
		||||
 | 
			
		||||
     OS
 | 
			
		||||
     KERNEL-OS
 | 
			
		||||
 | 
			
		||||
   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 machine type.
 | 
			
		||||
 | 
			
		||||
   If you are _building_ compiler tools for cross-compiling, you should
 | 
			
		||||
use the option `--target=TYPE' to select the type of system they will
 | 
			
		||||
produce code for.
 | 
			
		||||
 | 
			
		||||
   If you want to _use_ a cross compiler, that generates code for a
 | 
			
		||||
platform different from the build platform, you should specify the
 | 
			
		||||
"host" platform (i.e., that on which the generated programs will
 | 
			
		||||
eventually be run) with `--host=TYPE'.
 | 
			
		||||
 | 
			
		||||
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.
 | 
			
		||||
 | 
			
		||||
Defining Variables
 | 
			
		||||
==================
 | 
			
		||||
 | 
			
		||||
   Variables not defined in a site shell script can be set in the
 | 
			
		||||
environment passed to `configure'.  However, some packages may run
 | 
			
		||||
configure again during the build, and the customized values of these
 | 
			
		||||
variables may be lost.  In order to avoid this problem, you should set
 | 
			
		||||
them in the `configure' command line, using `VAR=value'.  For example:
 | 
			
		||||
 | 
			
		||||
     ./configure CC=/usr/local2/bin/gcc
 | 
			
		||||
 | 
			
		||||
causes the specified `gcc' to be used as the C compiler (unless it is
 | 
			
		||||
overridden in the site shell script).
 | 
			
		||||
 | 
			
		||||
Unfortunately, this technique does not work for `CONFIG_SHELL' due to
 | 
			
		||||
an Autoconf limitation.  Until the limitation is lifted, you can use
 | 
			
		||||
this workaround:
 | 
			
		||||
 | 
			
		||||
     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 | 
			
		||||
 | 
			
		||||
`configure' Invocation
 | 
			
		||||
======================
 | 
			
		||||
 | 
			
		||||
   `configure' recognizes the following options to control how it
 | 
			
		||||
operates.
 | 
			
		||||
 | 
			
		||||
`--help'
 | 
			
		||||
`-h'
 | 
			
		||||
     Print a summary of all of the options to `configure', and exit.
 | 
			
		||||
 | 
			
		||||
`--help=short'
 | 
			
		||||
`--help=recursive'
 | 
			
		||||
     Print a summary of the options unique to this package's
 | 
			
		||||
     `configure', and exit.  The `short' variant lists options used
 | 
			
		||||
     only in the top level, while the `recursive' variant lists options
 | 
			
		||||
     also present in any nested packages.
 | 
			
		||||
 | 
			
		||||
`--version'
 | 
			
		||||
`-V'
 | 
			
		||||
     Print the version of Autoconf used to generate the `configure'
 | 
			
		||||
     script, and exit.
 | 
			
		||||
 | 
			
		||||
`--cache-file=FILE'
 | 
			
		||||
     Enable the cache: use and save the results of the tests in FILE,
 | 
			
		||||
     traditionally `config.cache'.  FILE defaults to `/dev/null' to
 | 
			
		||||
     disable caching.
 | 
			
		||||
 | 
			
		||||
`--config-cache'
 | 
			
		||||
`-C'
 | 
			
		||||
     Alias for `--cache-file=config.cache'.
 | 
			
		||||
 | 
			
		||||
`--quiet'
 | 
			
		||||
`--silent'
 | 
			
		||||
`-q'
 | 
			
		||||
     Do not print messages saying which checks are being made.  To
 | 
			
		||||
     suppress all normal output, redirect it to `/dev/null' (any error
 | 
			
		||||
     messages will still be shown).
 | 
			
		||||
 | 
			
		||||
`--srcdir=DIR'
 | 
			
		||||
     Look for the package's source code in directory DIR.  Usually
 | 
			
		||||
     `configure' can determine that directory automatically.
 | 
			
		||||
 | 
			
		||||
`--prefix=DIR'
 | 
			
		||||
     Use DIR as the installation prefix.  *note Installation Names::
 | 
			
		||||
     for more details, including other options available for fine-tuning
 | 
			
		||||
     the installation locations.
 | 
			
		||||
 | 
			
		||||
`--no-create'
 | 
			
		||||
`-n'
 | 
			
		||||
     Run the configure checks, but stop before creating any output
 | 
			
		||||
     files.
 | 
			
		||||
 | 
			
		||||
`configure' also accepts some other, not widely useful, options.  Run
 | 
			
		||||
`configure --help' for more details.
 | 
			
		||||
							
								
								
									
										85
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
			
		||||
SUBDIRS = lib/libalpm src/util src/pacman scripts etc test/pacman test/util test/scripts
 | 
			
		||||
if WANT_DOC
 | 
			
		||||
SUBDIRS += doc
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
DIST_SUBDIRS = $(SUBDIRS) src/common
 | 
			
		||||
 | 
			
		||||
ACLOCAL_AMFLAGS = -I m4 --install
 | 
			
		||||
AM_MAKEFLAGS = --no-print-directory
 | 
			
		||||
 | 
			
		||||
# Make sure we test and build manpages when doing distcheck
 | 
			
		||||
DISTCHECK_CONFIGURE_FLAGS = --enable-doc --disable-git-version \
 | 
			
		||||
		bashcompdir='$${prefix}/share/bash-completion/completions'
 | 
			
		||||
 | 
			
		||||
# Some files automatically included, so they aren't specified below:
 | 
			
		||||
#   AUTHORS, COPYING, NEWS, README
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	HACKING test/tap.sh \
 | 
			
		||||
	meson.build meson_options.txt \
 | 
			
		||||
	build-aux/edit-script.sh.in \
 | 
			
		||||
	build-aux/meson-install-script.sh \
 | 
			
		||||
	build-aux/meson-make-symlink.sh \
 | 
			
		||||
	build-aux/script-wrapper.sh.in
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Sample makepkg prototype files
 | 
			
		||||
pkgdatadir = ${datadir}/${PACKAGE}
 | 
			
		||||
dist_pkgdata_DATA = \
 | 
			
		||||
	proto/PKGBUILD.proto \
 | 
			
		||||
	proto/PKGBUILD-split.proto \
 | 
			
		||||
	proto/PKGBUILD-vcs.proto \
 | 
			
		||||
	proto/proto.install
 | 
			
		||||
 | 
			
		||||
$(top_srcdir)/test/pacman/tests/TESTS: $(wildcard test/pacman/tests/*.py)
 | 
			
		||||
	@printf "TESTS += %s\n" $^ | LC_ALL=C sort -u > "$@"
 | 
			
		||||
 | 
			
		||||
TESTS =  test/scripts/parseopts_test.sh \
 | 
			
		||||
				 test/scripts/human_to_size_test.sh \
 | 
			
		||||
				 test/scripts/makepkg-template_test.sh \
 | 
			
		||||
				 test/scripts/pacman-db-upgrade-v9.py \
 | 
			
		||||
				 test/util/vercmptest.sh
 | 
			
		||||
include $(top_srcdir)/test/pacman/tests/TESTS
 | 
			
		||||
 | 
			
		||||
TEST_SUITE_LOG = test/test-suite.log
 | 
			
		||||
TEST_EXTENSIONS = .py
 | 
			
		||||
AM_TESTS_ENVIRONMENT = \
 | 
			
		||||
	PMTEST_UTIL_DIR=$(top_builddir)/src/util/; export PMTEST_UTIL_DIR; \
 | 
			
		||||
	PMTEST_SCRIPT_DIR=$(top_builddir)/scripts/; export PMTEST_SCRIPT_DIR; \
 | 
			
		||||
	PMTEST_SCRIPTLIB_DIR=$(top_srcdir)/scripts/library/; export PMTEST_SCRIPTLIB_DIR; \
 | 
			
		||||
	PMTEST_LIBMAKEPKG_DIR=$(top_builddir)/scripts/libmakepkg/; export PMTEST_LIBMAKEPKG_DIR;
 | 
			
		||||
LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
 | 
			
		||||
								 $(top_srcdir)/build-aux/tap-driver.sh
 | 
			
		||||
PY_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
 | 
			
		||||
								 $(top_srcdir)/build-aux/tap-driver.sh
 | 
			
		||||
PY_LOG_COMPILER = $(PYTHON) $(top_srcdir)/test/pacman/pactest.py
 | 
			
		||||
AM_PY_LOG_FLAGS = \
 | 
			
		||||
		--scriptlet-shell $(SCRIPTLET_SHELL) \
 | 
			
		||||
		--ldconfig $(LDCONFIG) \
 | 
			
		||||
		--bindir $(top_builddir)/src/pacman \
 | 
			
		||||
		--bindir $(top_builddir)/scripts
 | 
			
		||||
if !HAVE_LIBGPGME
 | 
			
		||||
AM_PY_LOG_FLAGS += --without-gpg
 | 
			
		||||
endif
 | 
			
		||||
if !HAVE_LIBCURL
 | 
			
		||||
AM_PY_LOG_FLAGS += --without-curl
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# create the pacman DB, cache, makepkg-template and system hook directories upon install
 | 
			
		||||
install-data-local:
 | 
			
		||||
	for dir in "$(DESTDIR)$(localstatedir)/lib/pacman" "$(DESTDIR)$(localstatedir)/cache/pacman/pkg" \
 | 
			
		||||
	           "$(DESTDIR)$(datarootdir)/makepkg-template" "$(DESTDIR)$(datarootdir)/libalpm/hooks"; do \
 | 
			
		||||
	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
update-po:
 | 
			
		||||
	$(MAKE) -C lib/libalpm/po update-po
 | 
			
		||||
	$(MAKE) -C scripts/po update-po
 | 
			
		||||
	$(MAKE) -C src/pacman/po update-po
 | 
			
		||||
 | 
			
		||||
update-copyright:
 | 
			
		||||
	for file in $(shell sh -c 'git grep -l "Copyright .* Pacman Development" | grep -v "\.po"'); do \
 | 
			
		||||
	  sed -i -e "/Copyright (/s/-$(OLD)/-$(NEW)/" -e "/Copyright (/s/ $(OLD)/ $(OLD)-$(NEW)/" "$$file"; \
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
.PHONY: update-po update-copyright
 | 
			
		||||
							
								
								
									
										106
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										106
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,109 +1,5 @@
 | 
			
		||||
VERSION         DESCRIPTION
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
6.1.0         - Add cache server support
 | 
			
		||||
              - Improvements to --sysroot option - NOTE: targets to -U are no
 | 
			
		||||
                longer interpreted relative to sysroot
 | 
			
		||||
              - Add more format specifiers for --print operations
 | 
			
		||||
              - Add extended data field for arbitrary package data
 | 
			
		||||
              - Do not run hooks with --dbonly
 | 
			
		||||
              - Provide more details when encountering file conflicts or
 | 
			
		||||
                corrupt packages
 | 
			
		||||
              - Improved WKD support (FS#73703, FS#73534)
 | 
			
		||||
              - Improved handling of malformed download headers (FS#73704)
 | 
			
		||||
              - Use openssl interfaces for calculating sha256 and md5 sums
 | 
			
		||||
              - Fix multi download bar chomps
 | 
			
		||||
              - makepkg:
 | 
			
		||||
                - Replace libdepends and libprovides with autodeps
 | 
			
		||||
                - Support configuration via makepkg.conf.d drop-ins
 | 
			
		||||
                - Add GITFLAGS environmental variable to customize checkouts
 | 
			
		||||
                - Add -D option to change directory before building
 | 
			
		||||
                - Implement verify() function for custom source verificaton
 | 
			
		||||
                - Add checksum support for git/mercurial/bzr sources
 | 
			
		||||
                - Improved stripping and debug package support
 | 
			
		||||
                - Configurable LTO support
 | 
			
		||||
                - Add source signing PGP keys to package if available
 | 
			
		||||
                - Store "pkgtype" in xdata
 | 
			
		||||
                - Remove md5sum from mtree files
 | 
			
		||||
                - Document MAKEPKG_LIBRARY
 | 
			
		||||
              - repo-add:
 | 
			
		||||
                - Do not include package signature details in the repo. Add
 | 
			
		||||
                  the --include-sigs to revert to old behaviour.
 | 
			
		||||
                - Do not add md5sum to the repo database
 | 
			
		||||
6.0.1         - Prevent download error pages ending up in package files
 | 
			
		||||
                (FS#71083)
 | 
			
		||||
              - Give -U downloads a random .part file name if needed
 | 
			
		||||
                (FS#71464)
 | 
			
		||||
              - Fix downloading signatures with redirecting URLs (FS#71148)
 | 
			
		||||
              - Fix double free when importing PGP keys (FS#71107)
 | 
			
		||||
              - Ensure signature files are named after original file
 | 
			
		||||
                following redirects (FS#71274)
 | 
			
		||||
              - Order downloads by size - largest to smallest (FS#70172)
 | 
			
		||||
              - Fix reproducibility of man pages (FS#71154)
 | 
			
		||||
              - makepkg:
 | 
			
		||||
                - Fix stripping debug symbols with binutils 2.37 (FS#71722)
 | 
			
		||||
                - Export PYTHONHASHSEED for reproducible python packages
 | 
			
		||||
              - pacman-key:
 | 
			
		||||
                - Quieten trust db checks.
 | 
			
		||||
6.0.0         - internal downloader can retrieve files in parallel (FS#20056)
 | 
			
		||||
              - an additional progress bar is added to track total download
 | 
			
		||||
                progress.  This replaces the previous TotalDownload option.
 | 
			
		||||
              - fix download rates becoming negative
 | 
			
		||||
              - skip mirror servers with too many errors (FS#29293)
 | 
			
		||||
              - package signatures are always retrieved even if signature is
 | 
			
		||||
                embedded in repo database or package is in cache (FS#33992)
 | 
			
		||||
              - detached package signatures found in CacheDir can be used to
 | 
			
		||||
                verify packages if signature is not in the database. Also
 | 
			
		||||
                verify packages checksums from repo db when using detached
 | 
			
		||||
                signatures.
 | 
			
		||||
              - add support for multiple 'Architecture' values
 | 
			
		||||
              - -Qkk now validates file checksums in addition to date/size
 | 
			
		||||
              - colored upgrade summary now dulls version numbers for contrast
 | 
			
		||||
              - libalpm frontends can now supply context to callbacks (FS#12721)
 | 
			
		||||
              - support xattr when extracting packages
 | 
			
		||||
              - allow setting --noprogressbar in pacman.conf
 | 
			
		||||
              - fix output alignment for CJK translated text (FS#59229)
 | 
			
		||||
              - fix reading targets from stdin when using --sysroot (FS#68630)
 | 
			
		||||
              - fix deleting signatures for existing databases with -Sc
 | 
			
		||||
              - check for and forbid duplicate download filenames (FS#67850)
 | 
			
		||||
              - -Fx now reports error for invalid regex
 | 
			
		||||
              - remove support for the autotools build system
 | 
			
		||||
              - meson: properly compile internal symbols as hidden
 | 
			
		||||
              - meson: make -uninstalled.pc correct
 | 
			
		||||
              - fix build errors on systems like FreeBSD
 | 
			
		||||
              - makepkg:
 | 
			
		||||
                - add link time optimization support to makepkg
 | 
			
		||||
                - add support for sources using the fossil VCS
 | 
			
		||||
                - allow specifying alternative authentication commands when
 | 
			
		||||
                  running pacman as root (FS#32621)
 | 
			
		||||
                - support zstd decompression for sources
 | 
			
		||||
                - strip: fix removing file attributes such as xattr
 | 
			
		||||
                - switch to CRC as default integrity checksum
 | 
			
		||||
                - record $startdir for reproducible builds
 | 
			
		||||
                - record name of build orchestration tool for reproducible builds
 | 
			
		||||
                - fix signing of source packages
 | 
			
		||||
                - add optional argument support to parseopts
 | 
			
		||||
                - reduce dependency on file for detecting ELF files
 | 
			
		||||
                - remove dependency on GNU sed
 | 
			
		||||
                - avoid trailing whitespace in --printsrcinfo output
 | 
			
		||||
                - libprovides: don't provide both versioned and unversioned
 | 
			
		||||
                  sonames
 | 
			
		||||
                - don't double-layer distcc on ccache
 | 
			
		||||
                - fix detection of source file names for debug packages with
 | 
			
		||||
                  gcc 11
 | 
			
		||||
                - strip: silence warnings emitted by readelf while detecting
 | 
			
		||||
                  source filenames
 | 
			
		||||
                - fix use of spaces in source file renaming (FS#70254)
 | 
			
		||||
              - pacman-key:
 | 
			
		||||
                - --refresh-keys queries WKD before keyserver
 | 
			
		||||
                - be less noisy when populating the keyring (FS#64142)
 | 
			
		||||
                - warn about time taken for master key generation
 | 
			
		||||
              - repo-add:
 | 
			
		||||
                - support the same compression methods as makepkg
 | 
			
		||||
              - zsh completion: add pacman-conf support
 | 
			
		||||
              - various documentation updates
 | 
			
		||||
              - after a decade and a half of promising libalpm.3 documentation
 | 
			
		||||
                "once we get around to doing good Doxygen documentation", it
 | 
			
		||||
                has happened!
 | 
			
		||||
5.2.2         - fix pacman test suite under python 3.8
 | 
			
		||||
              - only prompt to import new keys once in a transaction
 | 
			
		||||
              - fix handling of fully downloaded .part files
 | 
			
		||||
@@ -144,7 +40,7 @@ VERSION         DESCRIPTION
 | 
			
		||||
                - do not warn about PACKAGER format if not set
 | 
			
		||||
                - only run --clean when a package is built
 | 
			
		||||
              - repo-add:
 | 
			
		||||
                - fix compression of databases with zstd (FS#64213)
 | 
			
		||||
                - fix compression of databases with zstd
 | 
			
		||||
5.2.0         - completely remove delta support (CVE-2019-18183)
 | 
			
		||||
              - add support to pacman and pacman-key for downloading PGP
 | 
			
		||||
                signing keys using the WKD protocol (FS#63171)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										74
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								README
									
									
									
									
									
								
							@@ -52,6 +52,7 @@ library is initialized.
 | 
			
		||||
* logcb: The callback function for "log" operations.
 | 
			
		||||
* dlcb: The callback function for download progress of each package.
 | 
			
		||||
* fetchcb: Callback for custom download function.
 | 
			
		||||
* totaldlcb: The callback function for overall download progress.
 | 
			
		||||
* eventcb: Callback for transaction messages.
 | 
			
		||||
* questioncb: Callback for selecting amongst choices.
 | 
			
		||||
* progresscb: Callback to handle display of transaction progress.
 | 
			
		||||
@@ -194,8 +195,8 @@ remove.c and sync.c).
 | 
			
		||||
 | 
			
		||||
The frontend is using a configuration file, usually "/etc/pacman.conf".  Some
 | 
			
		||||
of these options are only useful for the frontend only (mainly the ones used to
 | 
			
		||||
control the output like verbosepkglist, or the behavior with cleanmethod).
 | 
			
		||||
The rest is used to configure the library.
 | 
			
		||||
control the output like totaldownload, or the behavior with cleanmethod and
 | 
			
		||||
syncfirst).  The rest is used to configure the library.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[UPGRADE/REMOVE/SYNC]
 | 
			
		||||
@@ -654,72 +655,3 @@ API CHANGES BETWEEN 5.1 AND 5.2
 | 
			
		||||
- alpm_errno_t - added member ALPM_ERR_MISSING_CAPABILITY_SIGNATURES
 | 
			
		||||
- alpm_sync_newversion() replaced with alpm_sync_get_new_version() which
 | 
			
		||||
  does not filter on any ALPM_DB_USAGE_*.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API CHANGES BETWEEN 5.2 AND 6.0
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
[REMOVED]
 | 
			
		||||
- ALPM_EVENT_PKGDOWNLOAD_START, ALPM_EVENT_PKGDOWNLOAD_DONE, ALPM_EVENT_PKGDOWNLOAD_FAILED
 | 
			
		||||
- ALPM_ERR_PKG_REPO_NOT_FOUND
 | 
			
		||||
- old TotalDownload implementation
 | 
			
		||||
 - alpm_cb_totaldl
 | 
			
		||||
 - alpm_option_get_totaldlcb()
 | 
			
		||||
 - alpm_option_set_totaldlcb()
 | 
			
		||||
 | 
			
		||||
[CHANGED]
 | 
			
		||||
- alpm_db_update() now accepts a list of databases rather than a single database.
 | 
			
		||||
- alpm_fetch_pkgurl() accepts a list of packages to download.
 | 
			
		||||
- alpm_db_search() now has an additional parameter and returns success status
 | 
			
		||||
- ALPM_EVENT_RETRIEVE_* -> ALPM_EVENT_DB_RETRIEVE_* and ALPM_EVENT_PKG_RETRIEVE_*
 | 
			
		||||
- alpm_cb_download pass event and data
 | 
			
		||||
- multi architecture support
 | 
			
		||||
 - alpm_option_get_arch() -> alpm_option_get_architectures()
 | 
			
		||||
 - alpm_option_set_arch() -> alpm_option_set_architectures()
 | 
			
		||||
- alpm_db_get_servers() copies parameter data
 | 
			
		||||
 | 
			
		||||
[ADDED]
 | 
			
		||||
- parallel download support
 | 
			
		||||
 - alpm_option_set_parallel_downloads()
 | 
			
		||||
 - alpm_option_get_parallel_downloads()
 | 
			
		||||
- file download events
 | 
			
		||||
 - alpm_download_event_type_t
 | 
			
		||||
 - alpm_download_event_init_t
 | 
			
		||||
 - alpm_download_event_progress_t
 | 
			
		||||
 - alpm_download_event_completed_t
 | 
			
		||||
- download misc
 | 
			
		||||
 - ALPM_DOWNLOAD_RETRY
 | 
			
		||||
 - alpm_download_event_retry_t
 | 
			
		||||
 - alpm_event_pkg_retrieve_t
 | 
			
		||||
- multiarchitecture support
 | 
			
		||||
 - alpm_option_add_architecture()
 | 
			
		||||
 - alpm_option_remove_architecture()
 | 
			
		||||
- misc
 | 
			
		||||
 - alpm_pkg_get_sig()
 | 
			
		||||
- callbacks add front-end provided context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
API CHANGES BETWEEN 6.0 AND 6.1
 | 
			
		||||
===============================
 | 
			
		||||
 | 
			
		||||
[REMOVED]
 | 
			
		||||
- alpm_trans_t
 | 
			
		||||
 | 
			
		||||
[CHANGED]
 | 
			
		||||
- alpm_conflict_t - full package added as member, removing package name and name
 | 
			
		||||
  hash members
 | 
			
		||||
- alpm_question_import_key_t - holds key uid and fingerprint rather than alpm_pgpkey_t
 | 
			
		||||
- alpm_pkgreason_t - added ALPM_PKG_REASON_UNKNOWN
 | 
			
		||||
- alpm_transflag_t - added ALPM_TRANS_FLAG_NOHOOKS
 | 
			
		||||
 | 
			
		||||
[ADDED]
 | 
			
		||||
- extensible package data type
 | 
			
		||||
 - alpm_pkg_xdata_t
 | 
			
		||||
 - alpm_pkg_get_xdata()
 | 
			
		||||
- accessor functions
 | 
			
		||||
 - alpm_db_get_handle()
 | 
			
		||||
 - alpm_pkg_get_handle()
 | 
			
		||||
- cache server support
 | 
			
		||||
 - alpm_db_get_cache_servers()
 | 
			
		||||
 - alpm_db_set_cache_servers()
 | 
			
		||||
 - alpm_db_add_cache_server()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								RELEASE
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								RELEASE
									
									
									
									
									
								
							@@ -1,24 +1,23 @@
 | 
			
		||||
The following checklist should be used for making a pacman release.
 | 
			
		||||
 | 
			
		||||
- Ensure "ninja dist" succeeds
 | 
			
		||||
- Ensure "make distcheck" succeeds
 | 
			
		||||
- Call a freeze to development.
 | 
			
		||||
- Send translation updates to Transifex at least two weeks before a major
 | 
			
		||||
  release (see below).  At this stage, strings can only be changed for a
 | 
			
		||||
  major issue.
 | 
			
		||||
- Update NEWS and README files
 | 
			
		||||
- Pull translation updates from Transifex
 | 
			
		||||
- Update version in meson.build as described in file
 | 
			
		||||
- Update version in configure.ac as described in file
 | 
			
		||||
- Update doc/index.asciidoc
 | 
			
		||||
- Create a signed git tag (git tag -s vX.Y.Z -m "commit message")
 | 
			
		||||
- Create and sign release tarballs (generate with "ninja dist")
 | 
			
		||||
- Create release on gitlab project page
 | 
			
		||||
- Upload release tarball and signature to gitlab ("glab release upload ...")
 | 
			
		||||
- Create and sign release tarballs (generate with "make distcheck")
 | 
			
		||||
  - In addition to the standard autotools toolchain, autoconf-archive is needed
 | 
			
		||||
- Update pacman website
 | 
			
		||||
 | 
			
		||||
Transifex updates are handled using the transifex client. The basic process is:
 | 
			
		||||
- Pull updates from transifex ("tx pull -f --minimum-perc 75")
 | 
			
		||||
- Update po files ("./build-aux/update-po")
 | 
			
		||||
- Fix all translation errors found (e.g. using "mint-check-translations")
 | 
			
		||||
- Pull updates from transifex ("tx pull -a -f --minimum-perc 75")
 | 
			
		||||
- Update po files ("make update-po")
 | 
			
		||||
- Fix all translation errors found
 | 
			
		||||
- Add any new locales to the relevant LINGUAS file
 | 
			
		||||
- Optional: Make any manual changes needed (e.g. fixing spacing in a string)
 | 
			
		||||
  and update po files again
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								autogen.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/sh -x
 | 
			
		||||
 | 
			
		||||
autoreconf -i
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
#!/usr/bin/python3
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
for path in sys.argv[1:]:
 | 
			
		||||
    print('# -----------------------------------')
 | 
			
		||||
    print('# ' + path + ':')
 | 
			
		||||
    print('# -----------------------------------')
 | 
			
		||||
    with open(path, 'r') as f:
 | 
			
		||||
        for line in f:
 | 
			
		||||
            print('# ' + line, end='')
 | 
			
		||||
@@ -4,14 +4,13 @@ input=$1
 | 
			
		||||
output=$2
 | 
			
		||||
mode=$3
 | 
			
		||||
 | 
			
		||||
sed \
 | 
			
		||||
"@SED@" \
 | 
			
		||||
  -e "s|@rootdir[@]|@ROOTDIR@|g" \
 | 
			
		||||
  -e "s|@localedir[@]|@LOCALEDIR@|g" \
 | 
			
		||||
  -e "s|@sysconfdir[@]|@sysconfdir@|g" \
 | 
			
		||||
  -e "s|@localstatedir[@]|@localstatedir@|g" \
 | 
			
		||||
  -e "s|@libmakepkgdir[@]|@LIBMAKEPKGDIR@|g" \
 | 
			
		||||
  -e "s|@pkgdatadir[@]|@PKGDATADIR@|g" \
 | 
			
		||||
  -e "s|@keyringdir[@]|@KEYRINGDIR@|g" \
 | 
			
		||||
  -e "s|@prefix[@]|@PREFIX@|g" \
 | 
			
		||||
  -e "1s|#!/bin/bash|#!@BASH@|g" \
 | 
			
		||||
  -e "s|@PACKAGE_VERSION[@]|@PACKAGE_VERSION@|g" \
 | 
			
		||||
@@ -21,7 +20,9 @@ sed \
 | 
			
		||||
  -e "s|@DEBUGSUFFIX[@]|@DEBUGSUFFIX@|g" \
 | 
			
		||||
  -e "s|@INODECMD[@]|@INODECMD@|g" \
 | 
			
		||||
  -e "s|@FILECMD[@]|@FILECMD@|g" \
 | 
			
		||||
  -e "s|@BSDTAR_NO_READ_SPARSE[@]|@BSDTAR_NO_READ_SPARSE@|g" \
 | 
			
		||||
  -e "s|@SEDINPLACEFLAGS[@]|@SEDINPLACEFLAGS@|g" \
 | 
			
		||||
  -e "s|@SEDPATH[@]|@SEDPATH@|g" \
 | 
			
		||||
  -e "s|@configure_input[@]|Generated from ${input##*/}; do not edit by hand.|g" \
 | 
			
		||||
  "$input" >"$output"
 | 
			
		||||
 | 
			
		||||
if [[ $mode ]]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								build-aux/meson-install-script.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								build-aux/meson-install-script.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
built_script=$1
 | 
			
		||||
dest_path=$2
 | 
			
		||||
 | 
			
		||||
install -Dm755 "$built_script" "$DESTDIR/$dest_path"
 | 
			
		||||
@@ -5,6 +5,8 @@ set -eu
 | 
			
		||||
# and we need to create the target directory...
 | 
			
		||||
 | 
			
		||||
mkdir -vp "$(dirname "${DESTDIR:-}$2")"
 | 
			
		||||
 | 
			
		||||
rm -f "${DESTDIR:-}$2"
 | 
			
		||||
ln -vs "$1" "${DESTDIR:-}$2"
 | 
			
		||||
if [ "$(dirname $1)" = . ]; then
 | 
			
		||||
        ln -vfs -T "$1" "${DESTDIR:-}$2"
 | 
			
		||||
else
 | 
			
		||||
        ln -vfs -T --relative "${DESTDIR:-}$1" "${DESTDIR:-}$2"
 | 
			
		||||
fi
 | 
			
		||||
 
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
 | 
			
		||||
import json
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
def print_result(result):
 | 
			
		||||
    print('==================================================================')
 | 
			
		||||
    print(result['name'])
 | 
			
		||||
    print(' '.join(result['command']))
 | 
			
		||||
    print('==================================================================')
 | 
			
		||||
    print(result['stdout'])
 | 
			
		||||
 | 
			
		||||
with open(sys.argv[1], 'r') as f:
 | 
			
		||||
    for line in f:
 | 
			
		||||
        result = json.loads(line)
 | 
			
		||||
        if result['result'] == 'FAIL':
 | 
			
		||||
            print_result(result)
 | 
			
		||||
@@ -3,4 +3,4 @@
 | 
			
		||||
# This script serves as a trampoline for running scripts which depend on
 | 
			
		||||
# libmakepkg with the libmakepkg within the build tree.
 | 
			
		||||
 | 
			
		||||
MAKEPKG_LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
 | 
			
		||||
LIBRARY=@BUILDDIR@/libmakepkg exec @BASH@ -$- @REAL_PROGPATH@ "$@"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +0,0 @@
 | 
			
		||||
#! /bin/sh
 | 
			
		||||
 | 
			
		||||
OLD=$1
 | 
			
		||||
NEW=$2
 | 
			
		||||
 | 
			
		||||
for file in $(git grep -l "Copyright .* Pacman Development" | grep -v "\.po"); do \
 | 
			
		||||
	sed -i -e "/Copyright (/s/-${OLD}/-${NEW}/" -e "/Copyright (/s/ ${OLD}/ ${OLD}-${NEW}/" "$file"
 | 
			
		||||
done
 | 
			
		||||
							
								
								
									
										605
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										605
									
								
								configure.ac
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,605 @@
 | 
			
		||||
#                                               -*- Autoconf -*-
 | 
			
		||||
# Process this file with autoconf to produce a configure script.
 | 
			
		||||
# Minimum version of autoconf required
 | 
			
		||||
AC_PREREQ(2.64)
 | 
			
		||||
 | 
			
		||||
# UPDATING VERSION NUMBERS FOR RELEASES
 | 
			
		||||
#
 | 
			
		||||
# libalpm:
 | 
			
		||||
# current
 | 
			
		||||
#   The most recent interface number that this library implements.
 | 
			
		||||
# revision
 | 
			
		||||
#   The implementation number of the current interface.
 | 
			
		||||
# age
 | 
			
		||||
#   The difference between the newest and oldest interfaces that this library
 | 
			
		||||
#   implements. In other words, the library implements all the interface
 | 
			
		||||
#   numbers in the range from number current - age to current.
 | 
			
		||||
#
 | 
			
		||||
# 1. Start with version information of `0:0:0' for each libtool library.
 | 
			
		||||
# 2. Update the version information only immediately before a public release of
 | 
			
		||||
#    your software. More frequent updates are unnecessary, and only guarantee
 | 
			
		||||
#    that the current interface number gets larger faster.
 | 
			
		||||
# 3. If the library source code has changed at all since the last update, then
 | 
			
		||||
#    increment revision (`c:r:a' becomes `c:r+1:a').
 | 
			
		||||
# 4. If any interfaces have been added, removed, or changed since the last
 | 
			
		||||
#    update, increment current, and set revision to 0.
 | 
			
		||||
# 5. If any interfaces have been added since the last public release, then
 | 
			
		||||
#    increment age.
 | 
			
		||||
# 6. If any interfaces have been removed since the last public release, then
 | 
			
		||||
#    set age to 0.
 | 
			
		||||
#
 | 
			
		||||
# pacman:
 | 
			
		||||
#   Extreme huge major changes:
 | 
			
		||||
#     pacman_version_major += 1
 | 
			
		||||
#     pacman_version_minor = 0
 | 
			
		||||
#     pacman_version_micro = 0
 | 
			
		||||
#
 | 
			
		||||
#   Real releases:
 | 
			
		||||
#     pacman_version_minor += 1
 | 
			
		||||
#     pacman_version_micro = 0
 | 
			
		||||
#
 | 
			
		||||
#   Bugfix releases:
 | 
			
		||||
#     pacman_version_micro += 1
 | 
			
		||||
 | 
			
		||||
m4_define([lib_current], [12])
 | 
			
		||||
m4_define([lib_revision], [2])
 | 
			
		||||
m4_define([lib_age], [0])
 | 
			
		||||
 | 
			
		||||
m4_define([pacman_version_major], [5])
 | 
			
		||||
m4_define([pacman_version_minor], [2])
 | 
			
		||||
m4_define([pacman_version_micro], [2])
 | 
			
		||||
m4_define([pacman_version],
 | 
			
		||||
          [pacman_version_major.pacman_version_minor.pacman_version_micro])
 | 
			
		||||
 | 
			
		||||
# Autoconf initialization
 | 
			
		||||
AC_INIT([pacman], [pacman_version], [pacman-dev@archlinux.org])
 | 
			
		||||
AC_CONFIG_SRCDIR([config.h.in])
 | 
			
		||||
AC_CONFIG_HEADERS([config.h])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
AC_CONFIG_AUX_DIR([build-aux])
 | 
			
		||||
AC_REQUIRE_AUX_FILE([tap-driver.sh])
 | 
			
		||||
 | 
			
		||||
AC_CANONICAL_HOST
 | 
			
		||||
AM_INIT_AUTOMAKE([1.11 foreign])
 | 
			
		||||
AM_SILENT_RULES([yes])
 | 
			
		||||
 | 
			
		||||
LT_INIT
 | 
			
		||||
LIB_VERSION=`expr lib_current - lib_age`.lib_age.lib_revision
 | 
			
		||||
LIB_VERSION_INFO="lib_current:lib_revision:lib_age"
 | 
			
		||||
 | 
			
		||||
# Respect empty CFLAGS during compiler tests
 | 
			
		||||
if test "x$CFLAGS" = "x"; then
 | 
			
		||||
  CFLAGS=""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Set substitution values for version stuff in Makefiles and anywhere else,
 | 
			
		||||
# and put LIB_VERSION in config.h
 | 
			
		||||
AC_SUBST(LIB_VERSION)
 | 
			
		||||
AC_SUBST(LIB_VERSION_INFO)
 | 
			
		||||
AC_DEFINE_UNQUOTED([LIB_VERSION], ["$LIB_VERSION"], [libalpm version number])
 | 
			
		||||
 | 
			
		||||
# Help line for root directory
 | 
			
		||||
AC_ARG_WITH(root-dir,
 | 
			
		||||
	AS_HELP_STRING([--with-root-dir=path], [set the location of the root operating directory]),
 | 
			
		||||
	[ROOTDIR=$withval], [ROOTDIR=/])
 | 
			
		||||
 | 
			
		||||
# Help line for package extension
 | 
			
		||||
AC_ARG_WITH(pkg-ext,
 | 
			
		||||
	AS_HELP_STRING([--with-pkg-ext=ext], [set the file extension used by packages]),
 | 
			
		||||
	[PKGEXT=$withval], [PKGEXT=.pkg.tar.gz])
 | 
			
		||||
 | 
			
		||||
# Help line for source package directory
 | 
			
		||||
AC_ARG_WITH(src-ext,
 | 
			
		||||
	AS_HELP_STRING([--with-src-ext=ext], [set the file extension used by source packages]),
 | 
			
		||||
	[SRCEXT=$withval], [SRCEXT=.src.tar.gz])
 | 
			
		||||
 | 
			
		||||
# Help line for buildscript filename
 | 
			
		||||
AC_ARG_WITH(buildscript,
 | 
			
		||||
	AS_HELP_STRING([--with-buildscript=name], [set the build script name used by makepkg]),
 | 
			
		||||
	[BUILDSCRIPT=$withval], [BUILDSCRIPT=PKGBUILD])
 | 
			
		||||
 | 
			
		||||
# Help line for buildscript filename
 | 
			
		||||
AC_ARG_WITH(makepkg-template-dir,
 | 
			
		||||
	AS_HELP_STRING([--with-makepkg-template-dir=name], [set the template dir used by makepkg-template]),
 | 
			
		||||
	[TEMPLATE_DIR=$withval], [TEMPLATE_DIR=${datarootdir}/makepkg-template])
 | 
			
		||||
 | 
			
		||||
# Help line for debug package suffix
 | 
			
		||||
AC_ARG_WITH(debug-suffix,
 | 
			
		||||
	AS_HELP_STRING([--with-debug-suffix=name], [set the suffix for split debugging symbol packages used by makepkg]),
 | 
			
		||||
	[DEBUGSUFFIX=$withval], [DEBUGSUFFIX=debug])
 | 
			
		||||
 | 
			
		||||
# Help line for changing shell used to run install scriptlets
 | 
			
		||||
AC_ARG_WITH(scriptlet-shell,
 | 
			
		||||
	AS_HELP_STRING([--with-scriptlet-shell=shell],
 | 
			
		||||
		[set the full path to the shell used to run install scriptlets]),
 | 
			
		||||
	[SCRIPTLET_SHELL=$withval], [SCRIPTLET_SHELL=/bin/sh])
 | 
			
		||||
 | 
			
		||||
# Help line for ldconfig path
 | 
			
		||||
AC_ARG_WITH(ldconfig,
 | 
			
		||||
	AS_HELP_STRING([--with-ldconfig=path],
 | 
			
		||||
		[set the full path to ldconfig]),
 | 
			
		||||
	[LDCONFIG=$withval], [LDCONFIG=/sbin/ldconfig])
 | 
			
		||||
 | 
			
		||||
# Help line for determining whether file is seccomp-enabled
 | 
			
		||||
AC_ARG_WITH(file-seccomp,
 | 
			
		||||
	AS_HELP_STRING([--with-file-seccomp={yes|no|auto}],
 | 
			
		||||
		[determine whether file is seccomp-enabled @<:@default=auto@:>@]),
 | 
			
		||||
	[with_file_seccomp=$withval], [with_file_seccomp=auto])
 | 
			
		||||
 | 
			
		||||
# Help line for selecting a crypto library
 | 
			
		||||
AC_ARG_WITH(crypto,
 | 
			
		||||
	AS_HELP_STRING([--with-crypto={openssl|nettle}],
 | 
			
		||||
		[select crypto implementation @<:@default=openssl@:>@]),
 | 
			
		||||
	[with_crypto=$withval], [with_crypto=openssl])
 | 
			
		||||
 | 
			
		||||
# Help line for using gpgme
 | 
			
		||||
AC_ARG_WITH(gpgme,
 | 
			
		||||
	AS_HELP_STRING([--with-gpgme], [use GPGME for PGP signature verification]),
 | 
			
		||||
	[], [with_gpgme=check])
 | 
			
		||||
 | 
			
		||||
# Help line for using libcurl
 | 
			
		||||
AC_ARG_WITH(libcurl,
 | 
			
		||||
	AS_HELP_STRING([--with-libcurl], [use libcurl for the internal downloader]),
 | 
			
		||||
	[], [with_libcurl=check])
 | 
			
		||||
 | 
			
		||||
# Help line for documentation
 | 
			
		||||
AC_ARG_ENABLE(doc,
 | 
			
		||||
	AS_HELP_STRING([--disable-doc], [prevent make from looking at doc/ dir]),
 | 
			
		||||
	[wantdoc=$enableval], [wantdoc=yes])
 | 
			
		||||
 | 
			
		||||
# Help line for doxygen
 | 
			
		||||
AC_ARG_ENABLE(doxygen,
 | 
			
		||||
	AS_HELP_STRING([--enable-doxygen], [build your own API docs via Doxygen]),
 | 
			
		||||
	[wantdoxygen=$enableval], [wantdoxygen=no])
 | 
			
		||||
 | 
			
		||||
# Help line for debug
 | 
			
		||||
AC_ARG_ENABLE(debug,
 | 
			
		||||
	AS_HELP_STRING([--enable-debug], [enable debugging support]),
 | 
			
		||||
	[debug=$enableval], [debug=no])
 | 
			
		||||
 | 
			
		||||
# Help line for compiler warning flags
 | 
			
		||||
AC_ARG_ENABLE(warningflags,
 | 
			
		||||
	AS_HELP_STRING([--enable-warningflags], [enable extra compiler warning flags]),
 | 
			
		||||
	[warningflags=$enableval], [warningflags=no])
 | 
			
		||||
 | 
			
		||||
# Help line for using git version in pacman version string
 | 
			
		||||
AC_ARG_ENABLE(git-version,
 | 
			
		||||
	AS_HELP_STRING([--enable-git-version],
 | 
			
		||||
		[enable use of git version in version string if available]),
 | 
			
		||||
	[wantgitver=$enableval], [wantgitver=no])
 | 
			
		||||
 | 
			
		||||
# Enable large file support if available (must be enabled before
 | 
			
		||||
# testing compilation against gpgme).
 | 
			
		||||
AC_SYS_LARGEFILE
 | 
			
		||||
 | 
			
		||||
# Record large file flags in pkgconfig file
 | 
			
		||||
if test "$enable_largefile" != no; then
 | 
			
		||||
	if test "$ac_cv_sys_file_offset_bits" != 'no'; then
 | 
			
		||||
		LFS_CFLAGS="-D_FILE_OFFSET_BITS=$ac_cv_sys_file_offset_bits"
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
AC_SUBST(LFS_CFLAGS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Checks for programs.
 | 
			
		||||
AC_PROG_AWK
 | 
			
		||||
AC_PROG_CC_C99
 | 
			
		||||
AC_PROG_INSTALL
 | 
			
		||||
AC_CHECK_PROGS([PYTHON], [python3 python], [false])
 | 
			
		||||
AC_PATH_PROGS([BASH_SHELL], [bash bash4], [false])
 | 
			
		||||
 | 
			
		||||
# check for perl 5.10.1 (needed by makepkg-template)
 | 
			
		||||
AC_PATH_PROG([PERL],[perl])
 | 
			
		||||
AC_DEFUN([AX_PROG_PERL_VERSION],
 | 
			
		||||
	[AC_CACHE_CHECK([for Perl version $1 or later], [ax_cv_prog_perl_version],
 | 
			
		||||
		[AS_IF(["$PERL" -e 'require v$1;' >/dev/null 2>&1],
 | 
			
		||||
			[ax_cv_prog_perl_version=yes],
 | 
			
		||||
			[ax_cv_prog_perl_version=no])])
 | 
			
		||||
	AS_IF([test x"$ax_cv_prog_perl_version" = xyes], [$2], [$3])])
 | 
			
		||||
AX_PROG_PERL_VERSION([5.10.1], [], [AC_MSG_ERROR([perl is too old])])
 | 
			
		||||
 | 
			
		||||
AS_IF([test "x$BASH_SHELL" = "xfalse"],
 | 
			
		||||
	AC_MSG_WARN([*** bash >= 4.4.0 is required for pacman scripts]),
 | 
			
		||||
	[bash_version_major=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[0]]}"'`
 | 
			
		||||
	bash_version_minor=`$BASH_SHELL -c 'echo "${BASH_VERSINFO[[1]]}"'`
 | 
			
		||||
	ok=yes
 | 
			
		||||
	if test "$bash_version_major" -lt 4; then
 | 
			
		||||
		ok=no
 | 
			
		||||
	fi
 | 
			
		||||
	if test "$bash_version_major" -eq 4 && test "$bash_version_minor" -lt 4; then
 | 
			
		||||
		ok=no
 | 
			
		||||
	fi
 | 
			
		||||
	if test "$ok" = "no"; then
 | 
			
		||||
		AC_MSG_ERROR([*** bash >= 4.4.0 is required for pacman scripts])
 | 
			
		||||
	fi
 | 
			
		||||
	unset bash_version_major bash_version_minor ok])
 | 
			
		||||
 | 
			
		||||
# find installed gettext
 | 
			
		||||
AM_GNU_GETTEXT([external], [need-ngettext])
 | 
			
		||||
AM_GNU_GETTEXT_VERSION(0.13.1)
 | 
			
		||||
 | 
			
		||||
AC_CHECK_LIB([m], [fabs], ,
 | 
			
		||||
	AC_MSG_ERROR([libm is needed to compile pacman!]))
 | 
			
		||||
 | 
			
		||||
PKG_CHECK_VAR(bashcompdir, [bash-completion], [completionsdir], ,
 | 
			
		||||
	bashcompdir="${datarootdir}/bash-completion/completions")
 | 
			
		||||
 | 
			
		||||
# Check for libarchive
 | 
			
		||||
PKG_CHECK_MODULES(LIBARCHIVE, [libarchive >= 3.0.0], ,
 | 
			
		||||
	AC_MSG_ERROR([*** libarchive >= 3.0.0 is needed to compile pacman!]))
 | 
			
		||||
 | 
			
		||||
m4_pattern_forbid([^AX_COMPARE_VERSION$])
 | 
			
		||||
# Check file for seccomp
 | 
			
		||||
if test "x$with_file_seccomp" = "xauto"; then
 | 
			
		||||
	file_version="$(file --version| sed -n 's/^file-\(.*\)/\1/p')"
 | 
			
		||||
	AX_COMPARE_VERSION([$file_version], [ge], [5.38], [with_file_seccomp=yes])
 | 
			
		||||
fi
 | 
			
		||||
if test "x$with_file_seccomp" = "xyes"; then
 | 
			
		||||
	FILECMD="file -S"
 | 
			
		||||
else
 | 
			
		||||
	FILECMD="file"
 | 
			
		||||
fi
 | 
			
		||||
AC_SUBST(FILECMD)
 | 
			
		||||
 | 
			
		||||
# Check for OpenSSL
 | 
			
		||||
have_openssl=no
 | 
			
		||||
have_nettle=no
 | 
			
		||||
if test "x$with_crypto" = "xnettle"; then
 | 
			
		||||
	AC_SUBST(pc_crypto, [nettle])
 | 
			
		||||
	PKG_CHECK_MODULES(NETTLE, [nettle],
 | 
			
		||||
		[AC_DEFINE(HAVE_LIBNETTLE, 1, [Define whether to use nettle]) have_nettle=yes], have_nettle=no)
 | 
			
		||||
	if test "x$have_nettle" = xno -a "x$with_crypto" = xnettle; then
 | 
			
		||||
		AC_MSG_ERROR([*** nettle support requested but libraries not found])
 | 
			
		||||
	fi
 | 
			
		||||
else if test "x$with_crypto" = "xopenssl"; then
 | 
			
		||||
	AC_SUBST(pc_crypto, [libcrypto])
 | 
			
		||||
	PKG_CHECK_MODULES(LIBSSL, [libcrypto],
 | 
			
		||||
		[AC_DEFINE(HAVE_LIBSSL, 1, [Define if libcrypto is available]) have_openssl=yes], have_openssl=no)
 | 
			
		||||
	if test "x$have_openssl" = xno; then
 | 
			
		||||
		AC_MSG_ERROR([*** openssl support requested but libraries not found])
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_ERROR([*** unknown crypto support library requested - $with_crypto])
 | 
			
		||||
fi
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(HAVE_LIBSSL, [test "$have_openssl" = "yes"])
 | 
			
		||||
AM_CONDITIONAL(HAVE_LIBNETTLE, [test "$have_nettle" = "yes"])
 | 
			
		||||
 | 
			
		||||
# Check for libcurl
 | 
			
		||||
have_libcurl=no
 | 
			
		||||
if test "x$with_libcurl" != "xno"; then
 | 
			
		||||
	PKG_CHECK_MODULES(LIBCURL, [libcurl >= 7.32.0],
 | 
			
		||||
		[AC_DEFINE(HAVE_LIBCURL, 1, [Define if libcurl is available]) have_libcurl=yes], have_libcurl=no)
 | 
			
		||||
	if test "x$have_libcurl" = xno -a "x$with_libcurl" = xyes; then
 | 
			
		||||
		AC_MSG_ERROR([*** libcurl >= 7.32.0 is required for internal downloader support])
 | 
			
		||||
	fi
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(HAVE_LIBCURL, [test "$have_libcurl" = "yes"])
 | 
			
		||||
# used to generate libalpm.pc
 | 
			
		||||
if test "x$have_libcurl" = xyes; then
 | 
			
		||||
	AC_SUBST(pc_libcurl, [libcurl])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check for gpgme
 | 
			
		||||
AC_MSG_CHECKING(whether to link with libgpgme)
 | 
			
		||||
AS_IF([test "x$with_gpgme" != "xno"],
 | 
			
		||||
	[AC_MSG_RESULT([yes])],
 | 
			
		||||
	[AC_MSG_RESULT([no])])
 | 
			
		||||
 | 
			
		||||
have_gpgme=no
 | 
			
		||||
if test "x$with_gpgme" != "xno"; then
 | 
			
		||||
	PKG_CHECK_MODULES(GPGME, [gpgme],
 | 
			
		||||
		[AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])
 | 
			
		||||
		AC_SUBST(pc_gpgme, [gpgme])
 | 
			
		||||
		have_gpgme=yes],
 | 
			
		||||
		[AM_PATH_GPGME([1.3.0],
 | 
			
		||||
			[LIBS_save="$LIBS"
 | 
			
		||||
			CPPFLAGS_save="$CPPFLAGS"
 | 
			
		||||
			CFLAGS_save="$CFLAGS"
 | 
			
		||||
 | 
			
		||||
			LIBS="$LIBS $GPGME_LIBS"
 | 
			
		||||
			CPPFLAGS="$CPPFLAGS $GPGME_CPPFLAGS"
 | 
			
		||||
			CFLAGS="$CFLAGS $GPGME_CFLAGS"
 | 
			
		||||
 | 
			
		||||
			AC_MSG_CHECKING([for sane gpgme])
 | 
			
		||||
			AC_LINK_IFELSE(
 | 
			
		||||
				[AC_LANG_PROGRAM(
 | 
			
		||||
					[[#include <gpgme.h>]],
 | 
			
		||||
					[[return gpgme_check_version("1.3.0");]])],
 | 
			
		||||
				[AC_MSG_RESULT([yes])
 | 
			
		||||
				have_gpgme=yes
 | 
			
		||||
				AC_DEFINE([HAVE_LIBGPGME], [1], [Define if gpgme should be used to provide GPG signature support.])
 | 
			
		||||
				AC_SUBST(pc_gpgme_libs, ["$GPGME_LIBS"])],
 | 
			
		||||
				[AC_MSG_RESULT([no])
 | 
			
		||||
				have_gpgme=no
 | 
			
		||||
				unset GPGME_LIBS
 | 
			
		||||
				unset GPGME_CFLAGS]
 | 
			
		||||
				AS_IF([test "x$with_gpgme" = "xyes"],
 | 
			
		||||
					[AC_MSG_FAILURE([*** gpgme >= 1.3.0 is needed for GPG signature support])])
 | 
			
		||||
				)
 | 
			
		||||
 | 
			
		||||
			LIBS="$LIBS_save"
 | 
			
		||||
			CPPFLAGS="$CPPFLAGS_save"
 | 
			
		||||
			CFLAGS="$CFLAGS_save"
 | 
			
		||||
			unset CPPFLAGS_save
 | 
			
		||||
			unset CFLAGS_save],)])
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
AS_IF([test "x$have_gpgme" = xno -a "x$with_gpgme" = xyes],
 | 
			
		||||
	[AC_MSG_FAILURE([--with-gpgme was given, but gpgme was not found])])
 | 
			
		||||
AM_CONDITIONAL([HAVE_LIBGPGME], [test "x$have_gpgme" = "xyes"])
 | 
			
		||||
 | 
			
		||||
# Checks for header files.
 | 
			
		||||
AC_CHECK_HEADERS([fcntl.h float.h glob.h langinfo.h libintl.h limits.h \
 | 
			
		||||
                  locale.h mntent.h netinet/in.h netinet/tcp.h \
 | 
			
		||||
                  stddef.h string.h sys/ioctl.h \
 | 
			
		||||
                  sys/mnttab.h sys/mount.h \
 | 
			
		||||
                  sys/param.h sys/statvfs.h sys/time.h sys/types.h \
 | 
			
		||||
                  sys/ucred.h syslog.h termios.h wchar.h])
 | 
			
		||||
 | 
			
		||||
# Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_C_INLINE
 | 
			
		||||
AC_TYPE_INT64_T
 | 
			
		||||
AC_TYPE_MODE_T
 | 
			
		||||
AC_TYPE_OFF_T
 | 
			
		||||
AC_TYPE_PID_T
 | 
			
		||||
AC_TYPE_SIZE_T
 | 
			
		||||
AC_TYPE_SSIZE_T
 | 
			
		||||
AC_STRUCT_TM
 | 
			
		||||
AC_TYPE_UID_T
 | 
			
		||||
AC_STRUCT_DIRENT_D_TYPE
 | 
			
		||||
PATH_MAX_DEFINED
 | 
			
		||||
 | 
			
		||||
# Checks for library functions.
 | 
			
		||||
AC_FUNC_FORK
 | 
			
		||||
AC_FUNC_GETMNTENT
 | 
			
		||||
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
 | 
			
		||||
AC_CHECK_FUNCS([dup2 getcwd getmntinfo gettimeofday memmove memset \
 | 
			
		||||
                mkdir realpath regcomp rmdir setenv setlocale strcasecmp \
 | 
			
		||||
                strchr strcspn strdup strerror strndup strnlen strrchr \
 | 
			
		||||
                strsep strstr strtol swprintf tcflush wcwidth uname])
 | 
			
		||||
AC_CHECK_MEMBERS([struct stat.st_blksize],,,[[#include <sys/stat.h>]])
 | 
			
		||||
 | 
			
		||||
# For the diskspace code
 | 
			
		||||
FS_STATS_TYPE
 | 
			
		||||
AC_CHECK_MEMBERS([struct statvfs.f_flag],,,[[#include <sys/statvfs.h>]])
 | 
			
		||||
AC_CHECK_MEMBERS([struct statfs.f_flags],,,[[#include <sys/param.h>
 | 
			
		||||
                  #include <sys/mount.h>]])
 | 
			
		||||
 | 
			
		||||
# Check if we can use symbol visibility support in GCC
 | 
			
		||||
GCC_VISIBILITY_CC
 | 
			
		||||
 | 
			
		||||
# Host-dependant definitions
 | 
			
		||||
DEFAULT_SEDINPLACEFLAGS=" --follow-symlinks -i"
 | 
			
		||||
INODECMD="stat -c '%i %n'"
 | 
			
		||||
STRIP_BINARIES="--strip-all"
 | 
			
		||||
STRIP_SHARED="--strip-unneeded"
 | 
			
		||||
STRIP_STATIC="--strip-debug"
 | 
			
		||||
case "${host_os}" in
 | 
			
		||||
	*bsd*)
 | 
			
		||||
		INODECMD="stat -f '%i %N'"
 | 
			
		||||
		DEFAULT_SEDINPLACEFLAGS=" -i \"\""
 | 
			
		||||
		;;
 | 
			
		||||
	darwin*)
 | 
			
		||||
		host_os_darwin=yes
 | 
			
		||||
		INODECMD="/usr/bin/stat -f '%i %N'"
 | 
			
		||||
		DEFAULT_SEDINPLACEFLAGS=" -i ''"
 | 
			
		||||
		STRIP_BINARIES=""
 | 
			
		||||
		STRIP_SHARED="-S"
 | 
			
		||||
		STRIP_STATIC="-S"
 | 
			
		||||
		;;
 | 
			
		||||
esac
 | 
			
		||||
AM_CONDITIONAL([DARWIN], test "x$host_os_darwin" = "xyes")
 | 
			
		||||
AC_PATH_PROGS([SEDPATH], [sed], [sed], [/usr/bin$PATH_SEPARATOR/bin] )
 | 
			
		||||
AC_SUBST(INODECMD)
 | 
			
		||||
AC_SUBST(STRIP_BINARIES)
 | 
			
		||||
AC_SUBST(STRIP_SHARED)
 | 
			
		||||
AC_SUBST(STRIP_STATIC)
 | 
			
		||||
 | 
			
		||||
# Flags for sed in place
 | 
			
		||||
if test "${SEDINPLACEFLAGS+set}" != "set"; then
 | 
			
		||||
    SEDINPLACEFLAGS="${DEFAULT_SEDINPLACEFLAGS}"
 | 
			
		||||
fi
 | 
			
		||||
AC_ARG_VAR(SEDINPLACEFLAGS, [flags for sed, overriding the default])
 | 
			
		||||
 | 
			
		||||
# Variables plugged into makepkg.conf
 | 
			
		||||
CARCH="${host%%-*}"
 | 
			
		||||
CHOST="${host}"
 | 
			
		||||
AC_SUBST(CARCH)
 | 
			
		||||
AC_SUBST(CHOST)
 | 
			
		||||
 | 
			
		||||
# Check for documentation support and status
 | 
			
		||||
AC_CHECK_PROGS([ASCIIDOC], [asciidoc])
 | 
			
		||||
AC_MSG_CHECKING([for building documentation])
 | 
			
		||||
if test "x$wantdoc" = "xyes" ; then
 | 
			
		||||
	if test $ASCIIDOC ; then
 | 
			
		||||
		AC_MSG_RESULT([yes, enabled by configure])
 | 
			
		||||
	else
 | 
			
		||||
		asciidoc="(warning : asciidoc not installed)"
 | 
			
		||||
		AC_MSG_RESULT([yes $asciidoc])
 | 
			
		||||
	fi
 | 
			
		||||
	wantdoc=yes
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT([no, disabled by configure])
 | 
			
		||||
	wantdoc=no
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(WANT_DOC, test "x$wantdoc" = "xyes")
 | 
			
		||||
 | 
			
		||||
# Check for doxygen support and status
 | 
			
		||||
AC_CHECK_PROGS([DOXYGEN], [doxygen])
 | 
			
		||||
AC_MSG_CHECKING([for doxygen])
 | 
			
		||||
if test "x$wantdoxygen" = "xyes" ; then
 | 
			
		||||
	if test $DOXYGEN ; then
 | 
			
		||||
		AC_MSG_RESULT([yes])
 | 
			
		||||
		usedoxygen=yes
 | 
			
		||||
	else
 | 
			
		||||
		AC_MSG_RESULT([no, doxygen missing])
 | 
			
		||||
		usedoxygen=no
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT([no, disabled by configure])
 | 
			
		||||
	usedoxygen=no
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(USE_DOXYGEN, test "x$usedoxygen" = "xyes")
 | 
			
		||||
 | 
			
		||||
# Enable or disable debug code
 | 
			
		||||
AC_MSG_CHECKING(for debug mode request)
 | 
			
		||||
if test "x$debug" = "xyes" ; then
 | 
			
		||||
	AC_MSG_RESULT(yes)
 | 
			
		||||
	AC_DEFINE([PACMAN_DEBUG], , [Enable debug code])
 | 
			
		||||
	# Check for -fstack-protector availability
 | 
			
		||||
	GCC_STACK_PROTECT_LIB
 | 
			
		||||
	GCC_STACK_PROTECT_CC
 | 
			
		||||
	GCC_STACK_CLASH_PROTECTION
 | 
			
		||||
	GCC_FORTIFY_SOURCE_CC
 | 
			
		||||
	WARNING_CFLAGS="-g -Wall -Werror"
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT(no)
 | 
			
		||||
	WARNING_CFLAGS="-Wall"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Enable or disable compiler warning flags
 | 
			
		||||
AC_MSG_CHECKING(for excessive compiler warning flags)
 | 
			
		||||
if test "x$warningflags" = "xyes" ; then
 | 
			
		||||
	AC_MSG_RESULT(yes)
 | 
			
		||||
	CFLAGS_ADD([-Wcast-align], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wclobbered], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wempty-body], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wfloat-equal], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wformat-nonliteral], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wformat-security], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wignored-qualifiers], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wimplicit-fallthrough], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Winit-self], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wlogical-op], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wmissing-declarations], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wmissing-field-initializers], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wmissing-parameter-type], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wmissing-prototypes], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wold-style-declaration], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Woverride-init], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wpointer-arith], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wredundant-decls], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wshadow], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wsign-compare], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wstrict-aliasing], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wstrict-overflow=5], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wstrict-prototypes], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wtype-limits], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wuninitialized], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wunused-but-set-parameter], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wunused-parameter], [WARNING_CFLAGS])
 | 
			
		||||
	CFLAGS_ADD([-Wwrite-strings], [WARNING_CFLAGS])
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT(no)
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Enable or disable use of git version in pacman version string
 | 
			
		||||
AC_MSG_CHECKING(whether to use git version if available)
 | 
			
		||||
if test "x$wantgitver" = "xyes" ; then
 | 
			
		||||
	AC_CHECK_PROGS([GIT], [git])
 | 
			
		||||
	AC_CHECK_FILE([.git/], hasgitdir=yes)
 | 
			
		||||
	usegitver=$ac_cv_file__git_
 | 
			
		||||
	if test $GIT -a "x$hasgitdir" = "xyes"; then
 | 
			
		||||
		AC_DEFINE([USE_GIT_VERSION], , [Use GIT version in version string])
 | 
			
		||||
	fi
 | 
			
		||||
else
 | 
			
		||||
	AC_MSG_RESULT([no, disabled by configure])
 | 
			
		||||
	usegitver=no
 | 
			
		||||
fi
 | 
			
		||||
AM_CONDITIONAL(USE_GIT_VERSION, test "x$usegitver" = "xyes")
 | 
			
		||||
 | 
			
		||||
# Set root directory
 | 
			
		||||
AC_SUBST(ROOTDIR)
 | 
			
		||||
AC_DEFINE_UNQUOTED([ROOTDIR], "$ROOTDIR", [The location of the root operating directory])
 | 
			
		||||
# Set package file extension
 | 
			
		||||
AC_SUBST(PKGEXT)
 | 
			
		||||
AC_DEFINE_UNQUOTED([PKGEXT], "$PKGEXT", [The file extension used by pacman packages])
 | 
			
		||||
# Set source package file extension
 | 
			
		||||
AC_SUBST(SRCEXT)
 | 
			
		||||
AC_DEFINE_UNQUOTED([SRCEXT], "$SRCEXT", [The file extension used by pacman source packages])
 | 
			
		||||
# Set makepkg build script name
 | 
			
		||||
AC_SUBST(BUILDSCRIPT)
 | 
			
		||||
AC_DEFINE_UNQUOTED([BUILDSCRIPT], "$BUILDSCRIPT", [The build script name used by makepkg])
 | 
			
		||||
# Set makepkg-template template directory
 | 
			
		||||
AC_SUBST(TEMPLATE_DIR)
 | 
			
		||||
AC_DEFINE_UNQUOTED([TEMPLATE_DIR], "$TEMPLATE_DIR", [The template directory used by makepkg-teplate])
 | 
			
		||||
# Set makepkg split debugging symbol package suffix
 | 
			
		||||
AC_SUBST(DEBUGSUFFIX)
 | 
			
		||||
AC_DEFINE_UNQUOTED([DEBUGSUFFIX], "$DEBUGSUFFIX", [The suffix for debugging symbol packages used by makepkg])
 | 
			
		||||
# Set shell used by install scriptlets
 | 
			
		||||
AC_SUBST(SCRIPTLET_SHELL)
 | 
			
		||||
AC_DEFINE_UNQUOTED([SCRIPTLET_SHELL], "$SCRIPTLET_SHELL", [The full path of the shell used to run install scriptlets])
 | 
			
		||||
# Set ldconfig path
 | 
			
		||||
AC_SUBST(LDCONFIG)
 | 
			
		||||
AC_DEFINE_UNQUOTED([LDCONFIG], "$LDCONFIG", [The full path to ldconfig])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Configuration files
 | 
			
		||||
AC_CONFIG_FILES([
 | 
			
		||||
lib/libalpm/Makefile
 | 
			
		||||
lib/libalpm/po/Makefile.in
 | 
			
		||||
lib/libalpm/libalpm.pc
 | 
			
		||||
src/common/Makefile
 | 
			
		||||
src/pacman/Makefile
 | 
			
		||||
src/pacman/po/Makefile.in
 | 
			
		||||
src/util/Makefile
 | 
			
		||||
scripts/Makefile
 | 
			
		||||
scripts/po/Makefile.in
 | 
			
		||||
doc/Makefile
 | 
			
		||||
etc/Makefile
 | 
			
		||||
test/pacman/Makefile
 | 
			
		||||
test/pacman/tests/Makefile
 | 
			
		||||
test/scripts/Makefile
 | 
			
		||||
test/util/Makefile
 | 
			
		||||
Makefile
 | 
			
		||||
])
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
 | 
			
		||||
echo "
 | 
			
		||||
${PACKAGE_NAME}:
 | 
			
		||||
 | 
			
		||||
  Build information:
 | 
			
		||||
    source code location   : ${srcdir}
 | 
			
		||||
    prefix                 : ${prefix}
 | 
			
		||||
    sysconfdir             : $(eval echo ${sysconfdir})
 | 
			
		||||
       conf file           : $(eval echo ${sysconfdir})/pacman.conf
 | 
			
		||||
    localstatedir          : $(eval echo ${localstatedir})
 | 
			
		||||
       database dir        : $(eval echo ${localstatedir})/lib/pacman/
 | 
			
		||||
       cache dir           : $(eval echo ${localstatedir})/cache/pacman/pkg/
 | 
			
		||||
 | 
			
		||||
    compiler               : ${CC}
 | 
			
		||||
    preprocessor flags     : ${CPPFLAGS}
 | 
			
		||||
    compiler flags         : ${WARNING_CFLAGS} ${CFLAGS}
 | 
			
		||||
    library flags          : ${LIBS} ${LIBSSL_LIBS} ${NETTLE_LIBS} ${LIBARCHIVE_LIBS} ${LIBCURL_LIBS} ${GPGME_LIBS}
 | 
			
		||||
    linker flags           : ${LDFLAGS}
 | 
			
		||||
 | 
			
		||||
    Architecture           : ${CARCH}
 | 
			
		||||
    Host Type              : ${CHOST}
 | 
			
		||||
    File inode command     : ${INODECMD}
 | 
			
		||||
    In-place sed command   : ${SEDPATH} ${SEDINPLACEFLAGS}
 | 
			
		||||
    File seccomp command   : ${FILECMD}
 | 
			
		||||
 | 
			
		||||
    libalpm version        : ${LIB_VERSION}
 | 
			
		||||
    libalpm version info   : ${LIB_VERSION_INFO}
 | 
			
		||||
    pacman version         : ${PACKAGE_VERSION}
 | 
			
		||||
    using git version      : ${usegitver}
 | 
			
		||||
 | 
			
		||||
  Directory and file information:
 | 
			
		||||
    root working directory : ${ROOTDIR}
 | 
			
		||||
    package extension      : ${PKGEXT}
 | 
			
		||||
    source pkg extension   : ${SRCEXT}
 | 
			
		||||
    build script name      : ${BUILDSCRIPT}
 | 
			
		||||
    template directory     : ${TEMPLATE_DIR}
 | 
			
		||||
 | 
			
		||||
  Compilation options:
 | 
			
		||||
    Use libcurl            : ${have_libcurl}
 | 
			
		||||
    Use GPGME              : ${have_gpgme}
 | 
			
		||||
    Use OpenSSL            : ${have_openssl}
 | 
			
		||||
    Use nettle             : ${have_nettle}
 | 
			
		||||
    Run make in doc/ dir   : ${wantdoc} ${asciidoc}
 | 
			
		||||
    Doxygen support        : ${usedoxygen}
 | 
			
		||||
    debug support          : ${debug}
 | 
			
		||||
    extra warning flags    : ${warningflags}
 | 
			
		||||
    use git version        : ${wantgitver}
 | 
			
		||||
"
 | 
			
		||||
@@ -1,3 +1,6 @@
 | 
			
		||||
/////
 | 
			
		||||
vim:set ts=4 sw=4 syntax=asciidoc noet spell spelllang=en_us:
 | 
			
		||||
/////
 | 
			
		||||
BUILDINFO(5)
 | 
			
		||||
============
 | 
			
		||||
 | 
			
		||||
@@ -18,7 +21,7 @@ value.
 | 
			
		||||
Description
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
This is a description of the contents of version '2' of the
 | 
			
		||||
This is a description of the contents of version '1' of the
 | 
			
		||||
BUILDINFO file format.
 | 
			
		||||
 | 
			
		||||
*format*::
 | 
			
		||||
@@ -50,18 +53,6 @@ BUILDINFO file format.
 | 
			
		||||
*builddir*::
 | 
			
		||||
	The directory where the package was built.
 | 
			
		||||
 | 
			
		||||
*startdir*::
 | 
			
		||||
	The directory from which makepkg was executed.
 | 
			
		||||
 | 
			
		||||
*buildtool*::
 | 
			
		||||
	The name of the tool ecosystem used to set up the build environment. Used
 | 
			
		||||
	for defining a spec for reproducible builds, e.g. the source of the
 | 
			
		||||
	linkman:makepkg.conf[5] used.
 | 
			
		||||
 | 
			
		||||
*buildtoolver*::
 | 
			
		||||
	The full version of the 'buildtool', for example:
 | 
			
		||||
	"$pkgver-$pkgrel-$pkgarch".
 | 
			
		||||
 | 
			
		||||
*buildenv (array)*::
 | 
			
		||||
	The build environment specified in makepkg.conf.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										101
									
								
								doc/Doxyfile.in
									
									
									
									
									
								
							
							
						
						
									
										101
									
								
								doc/Doxyfile.in
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
# Doxyfile 1.9.3
 | 
			
		||||
# Doxyfile 1.8.2
 | 
			
		||||
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Project related configuration options
 | 
			
		||||
@@ -10,7 +10,6 @@ PROJECT_BRIEF          = "Arch Linux Package Manager Library"
 | 
			
		||||
PROJECT_LOGO           =
 | 
			
		||||
OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@
 | 
			
		||||
CREATE_SUBDIRS         = NO
 | 
			
		||||
ALLOW_UNICODE_NAMES    = NO
 | 
			
		||||
OUTPUT_LANGUAGE        = English
 | 
			
		||||
BRIEF_MEMBER_DESC      = YES
 | 
			
		||||
REPEAT_BRIEF           = YES
 | 
			
		||||
@@ -32,47 +31,41 @@ STRIP_FROM_PATH        =
 | 
			
		||||
STRIP_FROM_INC_PATH    =
 | 
			
		||||
SHORT_NAMES            = NO
 | 
			
		||||
JAVADOC_AUTOBRIEF      = YES
 | 
			
		||||
JAVADOC_BANNER         = NO
 | 
			
		||||
QT_AUTOBRIEF           = NO
 | 
			
		||||
MULTILINE_CPP_IS_BRIEF = NO
 | 
			
		||||
PYTHON_DOCSTRING       = YES
 | 
			
		||||
INHERIT_DOCS           = YES
 | 
			
		||||
SEPARATE_MEMBER_PAGES  = NO
 | 
			
		||||
TAB_SIZE               = 4
 | 
			
		||||
ALIASES                =
 | 
			
		||||
TCL_SUBST              =
 | 
			
		||||
OPTIMIZE_OUTPUT_FOR_C  = YES
 | 
			
		||||
OPTIMIZE_OUTPUT_JAVA   = NO
 | 
			
		||||
OPTIMIZE_FOR_FORTRAN   = NO
 | 
			
		||||
OPTIMIZE_OUTPUT_VHDL   = NO
 | 
			
		||||
OPTIMIZE_OUTPUT_SLICE  = NO
 | 
			
		||||
EXTENSION_MAPPING      =
 | 
			
		||||
MARKDOWN_SUPPORT       = YES
 | 
			
		||||
TOC_INCLUDE_HEADINGS   = 5
 | 
			
		||||
AUTOLINK_SUPPORT       = YES
 | 
			
		||||
BUILTIN_STL_SUPPORT    = NO
 | 
			
		||||
CPP_CLI_SUPPORT        = NO
 | 
			
		||||
SIP_SUPPORT            = NO
 | 
			
		||||
IDL_PROPERTY_SUPPORT   = YES
 | 
			
		||||
DISTRIBUTE_GROUP_DOC   = NO
 | 
			
		||||
GROUP_NESTED_COMPOUNDS = NO
 | 
			
		||||
SUBGROUPING            = YES
 | 
			
		||||
INLINE_GROUPED_CLASSES = NO
 | 
			
		||||
INLINE_SIMPLE_STRUCTS  = YES
 | 
			
		||||
TYPEDEF_HIDES_STRUCT   = YES
 | 
			
		||||
INLINE_SIMPLE_STRUCTS  = NO
 | 
			
		||||
TYPEDEF_HIDES_STRUCT   = NO
 | 
			
		||||
SYMBOL_CACHE_SIZE      = 0
 | 
			
		||||
LOOKUP_CACHE_SIZE      = 0
 | 
			
		||||
NUM_PROC_THREADS       = 1
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Build related configuration options
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
EXTRACT_ALL            = NO
 | 
			
		||||
EXTRACT_PRIVATE        = NO
 | 
			
		||||
EXTRACT_PRIV_VIRTUAL   = NO
 | 
			
		||||
EXTRACT_PACKAGE        = NO
 | 
			
		||||
EXTRACT_STATIC         = NO
 | 
			
		||||
EXTRACT_LOCAL_CLASSES  = YES
 | 
			
		||||
EXTRACT_LOCAL_METHODS  = NO
 | 
			
		||||
EXTRACT_ANON_NSPACES   = NO
 | 
			
		||||
RESOLVE_UNNAMED_PARAMS = YES
 | 
			
		||||
HIDE_UNDOC_MEMBERS     = NO
 | 
			
		||||
HIDE_UNDOC_CLASSES     = NO
 | 
			
		||||
HIDE_FRIEND_COMPOUNDS  = NO
 | 
			
		||||
@@ -80,10 +73,7 @@ HIDE_IN_BODY_DOCS      = YES
 | 
			
		||||
INTERNAL_DOCS          = NO
 | 
			
		||||
CASE_SENSE_NAMES       = YES
 | 
			
		||||
HIDE_SCOPE_NAMES       = NO
 | 
			
		||||
HIDE_COMPOUND_REFERENCE= NO
 | 
			
		||||
SHOW_HEADERFILE        = YES
 | 
			
		||||
SHOW_INCLUDE_FILES     = YES
 | 
			
		||||
SHOW_GROUPED_MEMB_INC  = NO
 | 
			
		||||
FORCE_LOCAL_INCLUDES   = NO
 | 
			
		||||
INLINE_INFO            = YES
 | 
			
		||||
SORT_MEMBER_DOCS       = YES
 | 
			
		||||
@@ -105,30 +95,26 @@ FILE_VERSION_FILTER    =
 | 
			
		||||
LAYOUT_FILE            =
 | 
			
		||||
CITE_BIB_FILES         =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to warning and progress messages
 | 
			
		||||
# configuration options related to warning and progress messages
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
QUIET                  = NO
 | 
			
		||||
WARNINGS               = YES
 | 
			
		||||
WARN_IF_UNDOCUMENTED   = YES
 | 
			
		||||
WARN_IF_DOC_ERROR      = YES
 | 
			
		||||
WARN_IF_INCOMPLETE_DOC = YES
 | 
			
		||||
WARN_NO_PARAMDOC       = NO
 | 
			
		||||
WARN_AS_ERROR          = NO
 | 
			
		||||
WARN_FORMAT            = "$file:$line: $text"
 | 
			
		||||
WARN_LOGFILE           =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the input files
 | 
			
		||||
# configuration options related to the input files
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
INPUT                  = @INPUT_DIRECTORY@/../lib/libalpm/alpm.h \
 | 
			
		||||
                         @INPUT_DIRECTORY@/../lib/libalpm/alpm_list.h
 | 
			
		||||
INPUT                  = ../lib/libalpm/
 | 
			
		||||
INPUT_ENCODING         = UTF-8
 | 
			
		||||
FILE_PATTERNS          =
 | 
			
		||||
RECURSIVE              = NO
 | 
			
		||||
EXCLUDE                =
 | 
			
		||||
EXCLUDE_SYMLINKS       = NO
 | 
			
		||||
EXCLUDE_PATTERNS       =
 | 
			
		||||
EXCLUDE_SYMBOLS        = _alpm_* \
 | 
			
		||||
                         __alpm_*
 | 
			
		||||
EXCLUDE_SYMBOLS        =
 | 
			
		||||
EXAMPLE_PATH           =
 | 
			
		||||
EXAMPLE_PATTERNS       = *
 | 
			
		||||
EXAMPLE_RECURSIVE      = NO
 | 
			
		||||
@@ -137,9 +123,8 @@ INPUT_FILTER           =
 | 
			
		||||
FILTER_PATTERNS        =
 | 
			
		||||
FILTER_SOURCE_FILES    = NO
 | 
			
		||||
FILTER_SOURCE_PATTERNS =
 | 
			
		||||
USE_MDFILE_AS_MAINPAGE =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to source browsing
 | 
			
		||||
# configuration options related to source browsing
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
SOURCE_BROWSER         = NO
 | 
			
		||||
INLINE_SOURCES         = NO
 | 
			
		||||
@@ -147,16 +132,16 @@ STRIP_CODE_COMMENTS    = NO
 | 
			
		||||
REFERENCED_BY_RELATION = YES
 | 
			
		||||
REFERENCES_RELATION    = YES
 | 
			
		||||
REFERENCES_LINK_SOURCE = YES
 | 
			
		||||
SOURCE_TOOLTIPS        = YES
 | 
			
		||||
USE_HTAGS              = NO
 | 
			
		||||
VERBATIM_HEADERS       = YES
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the alphabetical class index
 | 
			
		||||
# 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
 | 
			
		||||
# configuration options related to the HTML output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_HTML          = NO
 | 
			
		||||
HTML_OUTPUT            = html
 | 
			
		||||
@@ -169,12 +154,11 @@ HTML_EXTRA_FILES       =
 | 
			
		||||
HTML_COLORSTYLE_HUE    = 220
 | 
			
		||||
HTML_COLORSTYLE_SAT    = 100
 | 
			
		||||
HTML_COLORSTYLE_GAMMA  = 80
 | 
			
		||||
HTML_DYNAMIC_MENUS     = YES
 | 
			
		||||
HTML_TIMESTAMP         = YES
 | 
			
		||||
HTML_DYNAMIC_SECTIONS  = NO
 | 
			
		||||
HTML_INDEX_NUM_ENTRIES = 100
 | 
			
		||||
GENERATE_DOCSET        = NO
 | 
			
		||||
DOCSET_FEEDNAME        = "Doxygen generated docs"
 | 
			
		||||
DOCSET_FEEDURL         =
 | 
			
		||||
DOCSET_BUNDLE_ID       = org.doxygen.Project
 | 
			
		||||
DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
 | 
			
		||||
DOCSET_PUBLISHER_NAME  = Publisher
 | 
			
		||||
@@ -197,50 +181,36 @@ GENERATE_ECLIPSEHELP   = NO
 | 
			
		||||
ECLIPSE_DOC_ID         = org.doxygen.Project
 | 
			
		||||
DISABLE_INDEX          = NO
 | 
			
		||||
GENERATE_TREEVIEW      = NO
 | 
			
		||||
FULL_SIDEBAR           = NO
 | 
			
		||||
ENUM_VALUES_PER_LINE   = 4
 | 
			
		||||
TREEVIEW_WIDTH         = 250
 | 
			
		||||
EXT_LINKS_IN_WINDOW    = NO
 | 
			
		||||
OBFUSCATE_EMAILS       = YES
 | 
			
		||||
HTML_FORMULA_FORMAT    = png
 | 
			
		||||
FORMULA_FONTSIZE       = 10
 | 
			
		||||
FORMULA_MACROFILE      =
 | 
			
		||||
FORMULA_TRANSPARENT    = YES
 | 
			
		||||
USE_MATHJAX            = NO
 | 
			
		||||
MATHJAX_VERSION        = MathJax_2
 | 
			
		||||
MATHJAX_FORMAT         = HTML-CSS
 | 
			
		||||
MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
 | 
			
		||||
MATHJAX_EXTENSIONS     =
 | 
			
		||||
MATHJAX_CODEFILE       =
 | 
			
		||||
SEARCHENGINE           = NO
 | 
			
		||||
SERVER_BASED_SEARCH    = NO
 | 
			
		||||
EXTERNAL_SEARCH        = NO
 | 
			
		||||
SEARCHENGINE_URL       =
 | 
			
		||||
SEARCHDATA_FILE        = searchdata.xml
 | 
			
		||||
EXTERNAL_SEARCH_ID     =
 | 
			
		||||
EXTRA_SEARCH_MAPPINGS  =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the LaTeX output
 | 
			
		||||
# configuration options related to the LaTeX output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_LATEX         = NO
 | 
			
		||||
LATEX_OUTPUT           = latex
 | 
			
		||||
LATEX_CMD_NAME         = latex
 | 
			
		||||
MAKEINDEX_CMD_NAME     = makeindex
 | 
			
		||||
LATEX_MAKEINDEX_CMD    = makeindex
 | 
			
		||||
COMPACT_LATEX          = NO
 | 
			
		||||
PAPER_TYPE             = letter
 | 
			
		||||
EXTRA_PACKAGES         =
 | 
			
		||||
LATEX_HEADER           =
 | 
			
		||||
LATEX_FOOTER           =
 | 
			
		||||
LATEX_EXTRA_STYLESHEET =
 | 
			
		||||
LATEX_EXTRA_FILES      =
 | 
			
		||||
PDF_HYPERLINKS         = NO
 | 
			
		||||
USE_PDFLATEX           = NO
 | 
			
		||||
LATEX_BATCHMODE        = NO
 | 
			
		||||
LATEX_HIDE_INDICES     = NO
 | 
			
		||||
LATEX_SOURCE_CODE      = NO
 | 
			
		||||
LATEX_BIB_STYLE        = plain
 | 
			
		||||
LATEX_EMOJI_DIRECTORY  =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the RTF output
 | 
			
		||||
# configuration options related to the RTF output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_RTF           = NO
 | 
			
		||||
RTF_OUTPUT             = rtf
 | 
			
		||||
@@ -249,31 +219,26 @@ RTF_HYPERLINKS         = NO
 | 
			
		||||
RTF_STYLESHEET_FILE    =
 | 
			
		||||
RTF_EXTENSIONS_FILE    =
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the man page output
 | 
			
		||||
# configuration options related to the man page output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_MAN           = YES
 | 
			
		||||
MAN_OUTPUT             = .
 | 
			
		||||
MAN_EXTENSION          = .3
 | 
			
		||||
MAN_SUBDIR             =
 | 
			
		||||
MAN_LINKS              = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the XML output
 | 
			
		||||
# configuration options related to the XML output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_XML           = NO
 | 
			
		||||
XML_OUTPUT             = xml
 | 
			
		||||
XML_SCHEMA             =
 | 
			
		||||
XML_DTD                =
 | 
			
		||||
XML_PROGRAMLISTING     = YES
 | 
			
		||||
XML_NS_MEMB_FILE_SCOPE = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the DOCBOOK output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_DOCBOOK       = NO
 | 
			
		||||
DOCBOOK_OUTPUT         = docbook
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options for the AutoGen Definitions output
 | 
			
		||||
# configuration options for the AutoGen Definitions output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_AUTOGEN_DEF   = NO
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the Perl module output
 | 
			
		||||
# configuration options related to the Perl module output
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
GENERATE_PERLMOD       = NO
 | 
			
		||||
PERLMOD_LATEX          = NO
 | 
			
		||||
@@ -289,6 +254,7 @@ SEARCH_INCLUDES        = YES
 | 
			
		||||
INCLUDE_PATH           = ../..
 | 
			
		||||
INCLUDE_FILE_PATTERNS  = *.h
 | 
			
		||||
PREDEFINED             = HAVE_CONFIG_H= \
 | 
			
		||||
                         SYMHIDDEN= \
 | 
			
		||||
                         SYMEXPORT= \
 | 
			
		||||
                         HAVE_LIBARCHIVE \
 | 
			
		||||
                         HAVE_LIBCURL \
 | 
			
		||||
@@ -296,28 +262,29 @@ PREDEFINED             = HAVE_CONFIG_H= \
 | 
			
		||||
EXPAND_AS_DEFINED      =
 | 
			
		||||
SKIP_FUNCTION_MACROS   = YES
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to external references
 | 
			
		||||
# Configuration::additions related to external references
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
TAGFILES               =
 | 
			
		||||
GENERATE_TAGFILE       =
 | 
			
		||||
ALLEXTERNALS           = NO
 | 
			
		||||
EXTERNAL_GROUPS        = YES
 | 
			
		||||
EXTERNAL_PAGES         = YES
 | 
			
		||||
PERL_PATH              = /usr/bin/perl
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
# Configuration options related to the dot tool
 | 
			
		||||
#---------------------------------------------------------------------------
 | 
			
		||||
DIA_PATH               =
 | 
			
		||||
CLASS_DIAGRAMS         = NO
 | 
			
		||||
MSCGEN_PATH            =
 | 
			
		||||
HIDE_UNDOC_RELATIONS   = YES
 | 
			
		||||
HAVE_DOT               = YES
 | 
			
		||||
DOT_NUM_THREADS        = 0
 | 
			
		||||
DOT_FONTNAME           = Helvetica
 | 
			
		||||
DOT_FONTSIZE           = 10
 | 
			
		||||
DOT_FONTPATH           =
 | 
			
		||||
CLASS_GRAPH            = YES
 | 
			
		||||
COLLABORATION_GRAPH    = YES
 | 
			
		||||
GROUP_GRAPHS           = YES
 | 
			
		||||
UML_LOOK               = NO
 | 
			
		||||
UML_LIMIT_NUM_FIELDS   = 10
 | 
			
		||||
DOT_UML_DETAILS        = NO
 | 
			
		||||
DOT_WRAP_THRESHOLD     = 17
 | 
			
		||||
TEMPLATE_RELATIONS     = NO
 | 
			
		||||
INCLUDE_GRAPH          = YES
 | 
			
		||||
INCLUDED_BY_GRAPH      = YES
 | 
			
		||||
@@ -325,18 +292,14 @@ CALL_GRAPH             = NO
 | 
			
		||||
CALLER_GRAPH           = NO
 | 
			
		||||
GRAPHICAL_HIERARCHY    = YES
 | 
			
		||||
DIRECTORY_GRAPH        = YES
 | 
			
		||||
DIR_GRAPH_MAX_DEPTH    = 1
 | 
			
		||||
DOT_IMAGE_FORMAT       = png
 | 
			
		||||
INTERACTIVE_SVG        = NO
 | 
			
		||||
DOT_PATH               =
 | 
			
		||||
DOTFILE_DIRS           =
 | 
			
		||||
MSCFILE_DIRS           =
 | 
			
		||||
DIAFILE_DIRS           =
 | 
			
		||||
PLANTUML_JAR_PATH      =
 | 
			
		||||
PLANTUML_CFG_FILE      =
 | 
			
		||||
PLANTUML_INCLUDE_PATH  =
 | 
			
		||||
DOT_GRAPH_MAX_NODES    = 50
 | 
			
		||||
MAX_DOT_GRAPH_DEPTH    = 3
 | 
			
		||||
DOT_TRANSPARENT        = NO
 | 
			
		||||
DOT_MULTI_TARGETS      = NO
 | 
			
		||||
GENERATE_LEGEND        = YES
 | 
			
		||||
DOT_CLEANUP            = YES
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										151
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								doc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
			
		||||
# We have to do some funny stuff here with the manpages. In order to ensure
 | 
			
		||||
# a dist tarball doesn't get put out there without manpages, we keep those
 | 
			
		||||
# files listed in EXTRA_DIST no matter what. However, we only add them to
 | 
			
		||||
# man_MANS if --enable-asciidoc and/or --enable-doxygen are used.
 | 
			
		||||
 | 
			
		||||
MANPAGES = \
 | 
			
		||||
	alpm-hooks.5 \
 | 
			
		||||
	pacman.8 \
 | 
			
		||||
	makepkg.8 \
 | 
			
		||||
	makepkg-template.1 \
 | 
			
		||||
	repo-add.8 \
 | 
			
		||||
	vercmp.8 \
 | 
			
		||||
	pacman-key.8 \
 | 
			
		||||
	PKGBUILD.5 \
 | 
			
		||||
	makepkg.conf.5 \
 | 
			
		||||
	pacman.conf.5 \
 | 
			
		||||
	libalpm.3 \
 | 
			
		||||
	BUILDINFO.5 \
 | 
			
		||||
	pacman-conf.8
 | 
			
		||||
 | 
			
		||||
DOXYGEN_MANS = $(wildcard man3/*.3)
 | 
			
		||||
 | 
			
		||||
HTML_MANPAGES = $(addsuffix .html,$(MANPAGES))
 | 
			
		||||
ASCIIDOC_MANPAGES = $(addsuffix .asciidoc,$(MANPAGES))
 | 
			
		||||
 | 
			
		||||
HTML_OTHER = \
 | 
			
		||||
	index.html \
 | 
			
		||||
	submitting-patches.html \
 | 
			
		||||
	translation-help.html \
 | 
			
		||||
	HACKING.html
 | 
			
		||||
 | 
			
		||||
HTML_DOCS = \
 | 
			
		||||
	$(HTML_MANPAGES) \
 | 
			
		||||
	$(HTML_OTHER)
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = \
 | 
			
		||||
	meson.build \
 | 
			
		||||
	asciidoc.conf \
 | 
			
		||||
	asciidoc-override.css \
 | 
			
		||||
	PKGBUILD-example.txt \
 | 
			
		||||
	footer.asciidoc \
 | 
			
		||||
	index.asciidoc \
 | 
			
		||||
	submitting-patches.asciidoc \
 | 
			
		||||
	translation-help.asciidoc \
 | 
			
		||||
	$(ASCIIDOC_MANPAGES) \
 | 
			
		||||
	$(MANPAGES) \
 | 
			
		||||
	$(DOXYGEN_MANS)
 | 
			
		||||
 | 
			
		||||
# Files that should be removed, but which Automake does not know.
 | 
			
		||||
MOSTLYCLEANFILES = *.xml $(MANPAGES) $(HTML_DOCS) repo-remove.8 website.tar.gz
 | 
			
		||||
 | 
			
		||||
# Ensure manpages are fresh when building a dist tarball
 | 
			
		||||
dist-hook:
 | 
			
		||||
	$(MAKE) $(AM_MAKEFLAGS) clean
 | 
			
		||||
	$(MAKE) $(AM_MAKEFLAGS) all
 | 
			
		||||
 | 
			
		||||
if USE_GIT_VERSION
 | 
			
		||||
GIT_VERSION := $(shell sh -c 'git describe --abbrev=4 --dirty | sed s/^v//')
 | 
			
		||||
REAL_PACKAGE_VERSION = $(GIT_VERSION)
 | 
			
		||||
else
 | 
			
		||||
REAL_PACKAGE_VERSION = $(PACKAGE_VERSION)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
man_MANS =
 | 
			
		||||
dist_man_MANS = $(MANPAGES)
 | 
			
		||||
 | 
			
		||||
if USE_DOXYGEN
 | 
			
		||||
man_MANS += $(DOXYGEN_MANS)
 | 
			
		||||
 | 
			
		||||
all-local: doxygen.in
 | 
			
		||||
 | 
			
		||||
Doxyfile: Doxyfile.in
 | 
			
		||||
	sed 's,@OUTPUT_DIRECTORY@,./,' Doxyfile.in >Doxyfile
 | 
			
		||||
 | 
			
		||||
doxygen.in: Doxyfile
 | 
			
		||||
	$(DOXYGEN) $(srcdir)/Doxyfile
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
man: $(MANPAGES)
 | 
			
		||||
html: $(HTML_DOCS)
 | 
			
		||||
 | 
			
		||||
website: website.tar.gz
 | 
			
		||||
 | 
			
		||||
.PHONY: html website
 | 
			
		||||
 | 
			
		||||
website.tar.gz: html
 | 
			
		||||
	$(AM_V_GEN)bsdtar czf $@ $(HTML_DOCS) \
 | 
			
		||||
		asciidoc-override.css \
 | 
			
		||||
		-C /etc/asciidoc/stylesheets/ \
 | 
			
		||||
		asciidoc.css \
 | 
			
		||||
		-C /etc/asciidoc/javascripts/ \
 | 
			
		||||
		asciidoc.js \
 | 
			
		||||
		-C /etc/asciidoc/ \
 | 
			
		||||
		images
 | 
			
		||||
 | 
			
		||||
pkgdatadir = ${datadir}/${PACKAGE}
 | 
			
		||||
 | 
			
		||||
ASCIIDOC_OPTS = \
 | 
			
		||||
	-f $(srcdir)/asciidoc.conf \
 | 
			
		||||
	-a pacman_version="$(REAL_PACKAGE_VERSION)" \
 | 
			
		||||
	-a pacman_date="`date +%Y-%m-%d`" \
 | 
			
		||||
	-a srcext="$(SRCEXT)" \
 | 
			
		||||
	-a pkgext="$(PKGEXT)" \
 | 
			
		||||
	-a pkgdatadir=$(pkgdatadir) \
 | 
			
		||||
	-a localstatedir=$(localstatedir) \
 | 
			
		||||
	-a sysconfdir=$(sysconfdir) \
 | 
			
		||||
	-a datarootdir=$(datarootdir) \
 | 
			
		||||
	-a rootdir=$(ROOTDIR)
 | 
			
		||||
 | 
			
		||||
A2X_OPTS = \
 | 
			
		||||
	--no-xmllint \
 | 
			
		||||
	-d manpage \
 | 
			
		||||
	-f manpage \
 | 
			
		||||
	--xsltproc-opts='-param man.endnotes.list.enabled 0 -param man.endnotes.are.numbered 0'
 | 
			
		||||
 | 
			
		||||
# Generate manpages
 | 
			
		||||
%: %.asciidoc asciidoc.conf footer.asciidoc Makefile.am
 | 
			
		||||
	$(AM_V_GEN)a2x $(A2X_OPTS) --asciidoc-opts="$(ASCIIDOC_OPTS) --out-file=./$@.xml" $(srcdir)/$@.asciidoc
 | 
			
		||||
 | 
			
		||||
# Generate HTML pages
 | 
			
		||||
%.html: %.asciidoc asciidoc.conf footer.asciidoc Makefile.am
 | 
			
		||||
	$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - $*.asciidoc | \
 | 
			
		||||
		sed -e 's/\r$$//' > $@
 | 
			
		||||
 | 
			
		||||
HACKING.html: ../HACKING
 | 
			
		||||
	$(AM_V_GEN)asciidoc $(ASCIIDOC_OPTS) -o - ../HACKING | \
 | 
			
		||||
		sed -e 's/\r$$//' > $@
 | 
			
		||||
 | 
			
		||||
# Customizations for certain HTML docs
 | 
			
		||||
%.html: ASCIIDOC_OPTS += -a linkcss -a toc -a icons -a max-width=960px -a stylesheet=asciidoc-override.css
 | 
			
		||||
%.8.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
%.5.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
%.3.html: ASCIIDOC_OPTS += -d manpage
 | 
			
		||||
 | 
			
		||||
# Custom dependency rules
 | 
			
		||||
PKGBUILD.5 PKGBUILD.5.html: PKGBUILD.5.asciidoc PKGBUILD-example.txt
 | 
			
		||||
 | 
			
		||||
# Manpages as symlinks
 | 
			
		||||
repo-remove.8: repo-add.8
 | 
			
		||||
	$(RM) repo-remove.8
 | 
			
		||||
	$(LN_S) repo-add.8 repo-remove.8
 | 
			
		||||
 | 
			
		||||
install-data-hook:
 | 
			
		||||
	cd $(DESTDIR)$(mandir)/man8 && \
 | 
			
		||||
		$(RM) repo-remove.8 && \
 | 
			
		||||
		( $(LN_S) repo-add.8 repo-remove.8 || \
 | 
			
		||||
		ln repo-add.8 repo-remove.8 || \
 | 
			
		||||
		cp repo-add.8 repo-remove.8 )
 | 
			
		||||
 | 
			
		||||
uninstall-hook:
 | 
			
		||||
	$(RM) $(DESTDIR)$(mandir)/man8/repo-remove.8
 | 
			
		||||
@@ -12,8 +12,8 @@ depends=('glibc')
 | 
			
		||||
makedepends=('ed')
 | 
			
		||||
optdepends=('ed: for "patch -e" functionality')
 | 
			
		||||
source=("ftp://ftp.gnu.org/gnu/$pkgname/$pkgname-$pkgver.tar.xz"{,.sig})
 | 
			
		||||
sha256sums=('9124ba46db0abd873d0995c2ca880e81252676bb6c03e0a37dfc5f608a9b0ceb'
 | 
			
		||||
            'SKIP')
 | 
			
		||||
md5sums=('e9ae5393426d3ad783a300a338c09b72'
 | 
			
		||||
         'SKIP')
 | 
			
		||||
 | 
			
		||||
build() {
 | 
			
		||||
	cd "$srcdir/$pkgname-$pkgver"
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ PKGBUILD(5)
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
PKGBUILD - Package build description file
 | 
			
		||||
PKGBUILD - Arch Linux package build description file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Synopsis
 | 
			
		||||
@@ -84,7 +84,14 @@ systems (see below).
 | 
			
		||||
 | 
			
		||||
*license (array)*::
 | 
			
		||||
	This field specifies the license(s) that apply to the package.
 | 
			
		||||
	If multiple licenses are applicable, list all of them:
 | 
			
		||||
	Commonly used licenses can be found in '/usr/share/licenses/common'. If you
 | 
			
		||||
	see the package's license there, simply reference it in the license
 | 
			
		||||
	field (e.g., `license=('GPL')`). If the package provides a license not
 | 
			
		||||
	available in '/usr/share/licenses/common', then you should include it
 | 
			
		||||
	in the package itself and set `license=('custom')` or
 | 
			
		||||
	`license=('custom:LicenseName')`. The license should be placed in
 | 
			
		||||
	'$pkgdir/usr/share/licenses/$pkgname/' when building the package. If
 | 
			
		||||
	multiple licenses are applicable, list all of them:
 | 
			
		||||
	`license=('GPL' 'FDL')`.
 | 
			
		||||
 | 
			
		||||
*install*::
 | 
			
		||||
@@ -111,7 +118,7 @@ systems (see below).
 | 
			
		||||
+
 | 
			
		||||
Additional architecture-specific sources can be added by appending an
 | 
			
		||||
underscore and the architecture name e.g., 'source_x86_64=()'. There must be a
 | 
			
		||||
corresponding integrity array with checksums, e.g. 'cksums_x86_64=()'.
 | 
			
		||||
corresponding integrity array with checksums, e.g. 'md5sums_x86_64=()'.
 | 
			
		||||
+
 | 
			
		||||
It is also possible to change the name of the downloaded file, which is helpful
 | 
			
		||||
with weird URLs and for handling multiple source files with the same
 | 
			
		||||
@@ -139,19 +146,17 @@ contain whitespace characters.
 | 
			
		||||
	listed here will not be extracted with the rest of the source files. This
 | 
			
		||||
	is useful for packages that use compressed data directly.
 | 
			
		||||
 | 
			
		||||
*cksums (array)*::
 | 
			
		||||
	This array contains CRC checksums for every source file specified in the
 | 
			
		||||
*md5sums (array)*::
 | 
			
		||||
	This array contains an MD5 hash for every source file specified in the
 | 
			
		||||
	source array (in the same order). makepkg will use this to verify source
 | 
			
		||||
	file integrity during subsequent builds. If 'SKIP' is put in the array
 | 
			
		||||
	in place of a normal hash, the integrity check for that source file will
 | 
			
		||||
	be skipped. To easily generate cksums, run ``makepkg -g >> PKGBUILD''.
 | 
			
		||||
	If desired, move the cksums line to an appropriate location.  Note that
 | 
			
		||||
	checksums generated by "makepkg -g" should be verified using checksum
 | 
			
		||||
	values provided by the software developer.
 | 
			
		||||
	be skipped. To easily generate md5sums, run ``makepkg -g >> PKGBUILD''.
 | 
			
		||||
	If desired, move the md5sums line to an appropriate location.
 | 
			
		||||
 | 
			
		||||
*md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)*::
 | 
			
		||||
*sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays)*::
 | 
			
		||||
	Alternative integrity checks that makepkg supports; these all behave
 | 
			
		||||
	similar to the cksums option described above. To enable use and generation
 | 
			
		||||
	similar to the md5sums option described above. To enable use and generation
 | 
			
		||||
	of these checksums, be sure to set up the `INTEGRITY_CHECK` option in
 | 
			
		||||
	linkman:makepkg.conf[5].
 | 
			
		||||
 | 
			
		||||
@@ -180,6 +185,11 @@ contain whitespace characters.
 | 
			
		||||
	than or equal to), `<=` (less than or equal to), `=` (equal to), `>`
 | 
			
		||||
	(greater than), or `<` (less than).
 | 
			
		||||
+
 | 
			
		||||
If the dependency name appears to be a library (ends with .so), makepkg will
 | 
			
		||||
try to find a binary that depends on the library in the built package and
 | 
			
		||||
append the version needed by the binary. Appending the version yourself
 | 
			
		||||
disables automatic detection.
 | 
			
		||||
+
 | 
			
		||||
Additional architecture-specific depends can be added by appending an
 | 
			
		||||
underscore and the architecture name e.g., 'depends_x86_64=()'.
 | 
			
		||||
 | 
			
		||||
@@ -233,6 +243,10 @@ example, dcron can provide 'cron=2.0' to satisfy the 'cron>=2.0' dependency of
 | 
			
		||||
other packages. Provisions involving the `>` and `<` operators are invalid as
 | 
			
		||||
only specific versions of a package may be provided.
 | 
			
		||||
+
 | 
			
		||||
If the provision name appears to be a library (ends with .so), makepkg will
 | 
			
		||||
try to find the library in the built package and append the correct
 | 
			
		||||
version. Appending the version yourself disables automatic detection.
 | 
			
		||||
+
 | 
			
		||||
Additional architecture-specific provides can be added by appending an
 | 
			
		||||
underscore and the architecture name e.g., 'provides_x86_64=()'.
 | 
			
		||||
 | 
			
		||||
@@ -309,10 +323,6 @@ underscore and the architecture name e.g., 'replaces_x86_64=()'.
 | 
			
		||||
		When used in combination with the `strip' option, a separate package
 | 
			
		||||
		containing the debug symbols is created.
 | 
			
		||||
 | 
			
		||||
	*lto*;;
 | 
			
		||||
		Enable building packages using link time optimization. Adds '-flto'
 | 
			
		||||
		to both CFLAGS and CXXFLAGS.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Packaging Functions
 | 
			
		||||
-------------------
 | 
			
		||||
@@ -336,13 +346,6 @@ function.
 | 
			
		||||
	the optional functions listed below. The packaging stage is run using
 | 
			
		||||
	fakeroot to ensure correct file permissions in the resulting package.
 | 
			
		||||
	All other functions will be run as the user calling makepkg.
 | 
			
		||||
	This function is run inside `$srcdir`.
 | 
			
		||||
 | 
			
		||||
*verify() Function*::
 | 
			
		||||
	An optional `verify()` function can be specified to implement arbitrary
 | 
			
		||||
	source authentication. The function should return a non-zero exit code when
 | 
			
		||||
	verification fails. This function is run before sources are extracted.
 | 
			
		||||
	This function is run inside `$startdir`.
 | 
			
		||||
 | 
			
		||||
*prepare() Function*::
 | 
			
		||||
	An optional `prepare()` function can be specified in which operations to
 | 
			
		||||
@@ -350,19 +353,16 @@ function.
 | 
			
		||||
	function is run after the source extraction and before the `build()`
 | 
			
		||||
	function. The `prepare()` function is skipped when source extraction
 | 
			
		||||
	is skipped.
 | 
			
		||||
	This function is run inside `$srcdir`.
 | 
			
		||||
 | 
			
		||||
*build() Function*::
 | 
			
		||||
	The optional `build()` function is used to compile and/or adjust the source
 | 
			
		||||
	The optional `build()` function is use to compile and/or adjust the source
 | 
			
		||||
	files in preparation to be installed by the `package()` function.
 | 
			
		||||
	This function is run inside `$srcdir`.
 | 
			
		||||
 | 
			
		||||
*check() Function*::
 | 
			
		||||
	An optional `check()` function can be specified in which a package's
 | 
			
		||||
	test-suite may be run. This function is run between the `build()` and
 | 
			
		||||
	`package()` functions. Be sure any exotic commands used are covered by the
 | 
			
		||||
	`checkdepends` array.
 | 
			
		||||
	This function is run inside `$srcdir`.
 | 
			
		||||
 | 
			
		||||
All of the above variables such as `$pkgname` and `$pkgver` are available for
 | 
			
		||||
use in the packaging functions. In addition, makepkg defines the following
 | 
			
		||||
@@ -372,6 +372,7 @@ variables:
 | 
			
		||||
	This contains the directory where makepkg extracts, or copies, all source
 | 
			
		||||
	files.
 | 
			
		||||
+
 | 
			
		||||
All of the packaging functions defined above are run starting inside `$srcdir`
 | 
			
		||||
 | 
			
		||||
*pkgdir*::
 | 
			
		||||
	This contains the directory where makepkg bundles the installed package.
 | 
			
		||||
@@ -465,16 +466,11 @@ reference with all of the available functions defined.
 | 
			
		||||
Using VCS Sources[[VCS]]
 | 
			
		||||
------------------------
 | 
			
		||||
Building a developmental version of a package using sources from a version
 | 
			
		||||
control system (VCS) is enabled by specifying the source in the form:
 | 
			
		||||
 | 
			
		||||
	source=('directory::url#fragment?query')
 | 
			
		||||
 | 
			
		||||
Currently makepkg supports the Bazaar, Git, Subversion, Fossil and Mercurial
 | 
			
		||||
version control systems. For other version control systems, manual cloning of
 | 
			
		||||
upstream repositories must be done in the `prepare()` function.
 | 
			
		||||
 | 
			
		||||
Some <<VCS,VCS Sources>> like Git support pinning the checkout by a checksum of
 | 
			
		||||
its content using deterministic export functionality like ``git archive''.
 | 
			
		||||
control system (VCS) is enabled by specifying the source in the form
 | 
			
		||||
`source=('directory::url#fragment?query')`. Currently makepkg supports the
 | 
			
		||||
Bazaar, Git, Subversion, and Mercurial version control systems. For other
 | 
			
		||||
version control systems, manual cloning of upstream repositories must be done
 | 
			
		||||
in the `prepare()` function.
 | 
			
		||||
 | 
			
		||||
The source URL is divided into four components:
 | 
			
		||||
 | 
			
		||||
@@ -492,16 +488,13 @@ The source URL is divided into four components:
 | 
			
		||||
 | 
			
		||||
*fragment*::
 | 
			
		||||
	(optional) Allows specifying a revision number or branch for makepkg to checkout
 | 
			
		||||
	from the VCS. A fragment has the form `type=value`, for example to checkout a
 | 
			
		||||
	given revision the source line would be `source=(url#revision=123)`. The
 | 
			
		||||
	available types depends on the VCS being used:
 | 
			
		||||
	from the VCS. For example, to checkout a given revision, the source line would
 | 
			
		||||
	have the format `source=(url#revision=123)`. The available fragments depends on
 | 
			
		||||
	the VCS being used:
 | 
			
		||||
 | 
			
		||||
	*bzr*;;
 | 
			
		||||
		revision (see `'bzr help revisionspec'` for details)
 | 
			
		||||
 | 
			
		||||
	*fossil*;;
 | 
			
		||||
		branch, commit, tag
 | 
			
		||||
 | 
			
		||||
	*git*;;
 | 
			
		||||
		branch, commit, tag
 | 
			
		||||
 | 
			
		||||
@@ -520,7 +513,8 @@ The source URL is divided into four components:
 | 
			
		||||
Example
 | 
			
		||||
-------
 | 
			
		||||
The following is an example PKGBUILD for the 'patch' package. For more
 | 
			
		||||
examples, look through the build files of your distribution's packages.
 | 
			
		||||
examples, look through the build files of your distribution's packages. For
 | 
			
		||||
those using Arch Linux, consult the Arch Build System (ABS) tree.
 | 
			
		||||
 | 
			
		||||
[source,sh]
 | 
			
		||||
-------------------------------
 | 
			
		||||
 
 | 
			
		||||
@@ -50,7 +50,7 @@ ifdef::backend-docbook[]
 | 
			
		||||
template::[header-declarations]
 | 
			
		||||
<refentry>
 | 
			
		||||
<refentryinfo>
 | 
			
		||||
<date>{localdate}</date>
 | 
			
		||||
<date>{pacman_date}</date>
 | 
			
		||||
</refentryinfo>
 | 
			
		||||
<refmeta>
 | 
			
		||||
<refentrytitle>{mantitle}</refentrytitle>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,14 @@
 | 
			
		||||
 | 
			
		||||
See the pacman website at https://archlinux.org/pacman/[] for current
 | 
			
		||||
See the pacman website at https://www.archlinux.org/pacman/[] for current
 | 
			
		||||
information on pacman and its related tools.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Bugs
 | 
			
		||||
----
 | 
			
		||||
Bugs? You must be kidding; there are no bugs in this software. But if we
 | 
			
		||||
happen to be wrong, please report them to the issue tracker at
 | 
			
		||||
link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with specific
 | 
			
		||||
information such as your command-line, the nature of the bug, and even
 | 
			
		||||
the package database if it helps.
 | 
			
		||||
happen to be wrong, submit a bug report with as much detail as possible
 | 
			
		||||
at the https://bugs.archlinux.org/index.php?project=3[Arch Linux Bug Tracker]
 | 
			
		||||
in the Pacman section.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Authors
 | 
			
		||||
@@ -19,18 +18,16 @@ Current maintainers:
 | 
			
		||||
 | 
			
		||||
* Allan McRae <allan@archlinux.org>
 | 
			
		||||
* Andrew Gregory <andrew.gregory.8@gmail.com>
 | 
			
		||||
* Morgan Adamiec <morganamilo@archlinux.org>
 | 
			
		||||
* Dan McGee <dan@archlinux.org>
 | 
			
		||||
* Dave Reisner <dreisner@archlinux.org>
 | 
			
		||||
 | 
			
		||||
Past major contributors:
 | 
			
		||||
 | 
			
		||||
* Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
* Aurelien Foret <aurelien@archlinux.org>
 | 
			
		||||
* Aaron Griffin <aaron@archlinux.org>
 | 
			
		||||
* Dan McGee <dan@archlinux.org>
 | 
			
		||||
* Xavier Chantry <shiningxc@gmail.com>
 | 
			
		||||
* Nagy Gabor <ngaba@bibl.u-szeged.hu>
 | 
			
		||||
* Dave Reisner <dreisner@archlinux.org>
 | 
			
		||||
* Eli Schwartz <eschwartz@archlinux.org>
 | 
			
		||||
 | 
			
		||||
For additional contributors, use `git shortlog -s` on the pacman.git
 | 
			
		||||
repository.
 | 
			
		||||
 
 | 
			
		||||
@@ -34,8 +34,6 @@ makepkg/repo-add/pacman toolchain via GnuPG and GPGME.
 | 
			
		||||
Version 5.0 added support for pre/post-transaction hooks and sync database file
 | 
			
		||||
list operations.
 | 
			
		||||
 | 
			
		||||
Version 6.0 added support for parallel downloads.
 | 
			
		||||
 | 
			
		||||
Documentation
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
@@ -61,11 +59,11 @@ configuration files dealing with pacman.
 | 
			
		||||
Changelog
 | 
			
		||||
~~~~~~~~~
 | 
			
		||||
For a good idea of what is going on in pacman development, take a look at the
 | 
			
		||||
link:https://gitlab.archlinux.org/pacman/pacman[Git summary page] for the
 | 
			
		||||
link:https://git.archlinux.org/pacman.git/[Git summary page] for the
 | 
			
		||||
project.
 | 
			
		||||
 | 
			
		||||
See the most recent
 | 
			
		||||
link:https://gitlab.archlinux.org/pacman/pacman/-/blob/master/NEWS[NEWS]
 | 
			
		||||
link:https://git.archlinux.org/pacman.git/tree/NEWS[NEWS]
 | 
			
		||||
file for a not-as-frequently-updated list of changes. However, this should
 | 
			
		||||
contain the biggest changes in a format more concise than the commit log.
 | 
			
		||||
 | 
			
		||||
@@ -79,10 +77,7 @@ Releases
 | 
			
		||||
[frame="topbot",grid="none",options="header,autowidth"]
 | 
			
		||||
!======
 | 
			
		||||
!Version !Date
 | 
			
		||||
!6.1.0  !2024-03-04
 | 
			
		||||
!6.0.1  !2021-09-04
 | 
			
		||||
!6.0.0  !2021-05-20
 | 
			
		||||
!6.0.0alpha1 !2020-12-04
 | 
			
		||||
!5.2.2  !2020-06-23
 | 
			
		||||
!5.2.1  !2019-11-01
 | 
			
		||||
!5.2.0  !2019-10-21
 | 
			
		||||
!5.1.3  !2019-03-01
 | 
			
		||||
@@ -194,18 +189,16 @@ Releases
 | 
			
		||||
 | 
			
		||||
|======
 | 
			
		||||
 | 
			
		||||
Source code for releases since moving to gitlab is available at
 | 
			
		||||
link:https://gitlab.archlinux.org/pacman/pacman/-/releases[].
 | 
			
		||||
Source code for historical releases is available at
 | 
			
		||||
Source code for all releases is available at
 | 
			
		||||
link:https://sources.archlinux.org/other/pacman/[]. To install, download the newest
 | 
			
		||||
available source tarball, unpack it in a directory, and run the three magic
 | 
			
		||||
commands:
 | 
			
		||||
 | 
			
		||||
	$ meson build
 | 
			
		||||
	$ ninja -C build
 | 
			
		||||
	# ninja -C build install
 | 
			
		||||
	$ ./configure
 | 
			
		||||
	$ make
 | 
			
		||||
	# make install
 | 
			
		||||
 | 
			
		||||
You may wish to read the options presented by `meson` in order to
 | 
			
		||||
You may wish to read the options presented by `./configure --help` in order to
 | 
			
		||||
set appropriate paths and build options that are correct for your system.
 | 
			
		||||
 | 
			
		||||
Development
 | 
			
		||||
@@ -226,11 +219,12 @@ these trees).
 | 
			
		||||
 | 
			
		||||
The current development tree can be fetched with the following command:
 | 
			
		||||
 | 
			
		||||
	git clone https://gitlab.archlinux.org/pacman/pacman.git
 | 
			
		||||
	git clone git://git.archlinux.org/pacman.git pacman
 | 
			
		||||
 | 
			
		||||
which will fetch the full development history into a directory named pacman.
 | 
			
		||||
You can browse the source as well using
 | 
			
		||||
link:https://gitlab.archlinux.org/pacman/pacman/[gitlab].
 | 
			
		||||
link:https://git.archlinux.org/pacman.git/[cgit]. HTTP/HTTPS URLs are also
 | 
			
		||||
available for cloning purposes; these URLs are listed at the above page.
 | 
			
		||||
 | 
			
		||||
If you are interested in hacking on pacman, it is highly recommended you join
 | 
			
		||||
the mailing list mentioned above, as well as take a quick glance at our
 | 
			
		||||
@@ -242,16 +236,34 @@ you speak a foreign language, you can help by either creating or updating a
 | 
			
		||||
translation file for your native language. Instructions can be found in
 | 
			
		||||
link:translation-help.html[translation-help].
 | 
			
		||||
 | 
			
		||||
Other Utilities
 | 
			
		||||
~~~~~~~~~~~~~~~
 | 
			
		||||
Although the package manager itself is quite simple, many scripts have been
 | 
			
		||||
developed that help automate building and installing packages. These are used
 | 
			
		||||
extensively in link:https://www.archlinux.org/[Arch Linux]. Most of these utilities
 | 
			
		||||
are available in the Arch Linux projects
 | 
			
		||||
link:https://git.archlinux.org/[code browser].
 | 
			
		||||
 | 
			
		||||
Utilities available:
 | 
			
		||||
 | 
			
		||||
* link:https://git.archlinux.org/dbscripts.git/[dbscripts] - scripts used by Arch Linux to manage the main package repositories
 | 
			
		||||
* link:https://git.archlinux.org/devtools.git/[devtools] - tools to assist in packaging and dependency checking
 | 
			
		||||
* link:https://git.archlinux.org/namcap.git/[namcap] - a package analysis utility written in python
 | 
			
		||||
 | 
			
		||||
Bugs
 | 
			
		||||
----
 | 
			
		||||
If you find bugs (which is quite likely), please report them to the issue
 | 
			
		||||
tracker at link:https://gitlab.archlinux.org/pacman/pacman/-/issues[] with
 | 
			
		||||
specific information such as your command-line, the nature of the bug, and even
 | 
			
		||||
the package database if it helps.
 | 
			
		||||
If you find bugs (which is quite likely), please email them to the pacman-dev
 | 
			
		||||
mailing last at mailto:pacman-dev@archlinux.org[] with specific information
 | 
			
		||||
such as your command-line, the nature of the bug, and even the package database
 | 
			
		||||
if it helps.
 | 
			
		||||
 | 
			
		||||
You can also post a bug to the Arch Linux bug tracker
 | 
			
		||||
link:https://bugs.archlinux.org/index.php?project=3[Flyspray]. Be sure to file
 | 
			
		||||
bugs under the Pacman project.
 | 
			
		||||
 | 
			
		||||
Copyright
 | 
			
		||||
---------
 | 
			
		||||
pacman is Copyright (C) 2006-2024 Pacman Development Team
 | 
			
		||||
<pacman-dev@lists.archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
 | 
			
		||||
pacman is Copyright (C) 2006-2020 Pacman Development Team
 | 
			
		||||
<pacman-dev@archlinux.org> and Copyright (C) 2002-2006 Judd Vinet
 | 
			
		||||
<jvinet@zeroflux.org> and is licensed through the GNU General Public License,
 | 
			
		||||
version 2 or later.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										37
									
								
								doc/libalpm.3.asciidoc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								doc/libalpm.3.asciidoc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
libalpm(3)
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
libalpm - Arch Linux Package Management (ALPM) library
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Synopsis
 | 
			
		||||
--------
 | 
			
		||||
For ease of access, the libalpm manual has been split up into several sections.
 | 
			
		||||
 | 
			
		||||
*TODO:* Yes, this man page needs a lot of work. Once we get around to doing
 | 
			
		||||
good Doxygen documentation, it will improve. We promise.
 | 
			
		||||
 | 
			
		||||
*alpm_databases*:: Database Functions
 | 
			
		||||
*alpm_interface*:: Interface Functions
 | 
			
		||||
*alpm_list*::      List Functions
 | 
			
		||||
*alpm_log*::       Logging Functions
 | 
			
		||||
*alpm_misc*::      Miscellaneous Functions
 | 
			
		||||
*alpm_packages*::  Package Functions
 | 
			
		||||
*alpm_sync*::      Sync Functions
 | 
			
		||||
*alpm_trans*::     Transaction Functions
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Configuration
 | 
			
		||||
-------------
 | 
			
		||||
See linkman:pacman.conf[5] for more details on configuring libalpm using the
 | 
			
		||||
'pacman.conf' file.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
See Also
 | 
			
		||||
--------
 | 
			
		||||
linkman:alpm-hooks[5], linkman:makepkg[8], linkman:pacman[8],
 | 
			
		||||
linkman:pacman.conf[5]
 | 
			
		||||
 | 
			
		||||
include::footer.asciidoc[]
 | 
			
		||||
@@ -85,7 +85,7 @@ Example PKGBUILD
 | 
			
		||||
	license=('PerlArtistic' 'GPL')
 | 
			
		||||
	depends=('perl')
 | 
			
		||||
	source=("http://search.cpan.org/CPAN/authors/id/S/SH/SHERZODR/Config-Simple-${pkgver}.tar.gz")
 | 
			
		||||
	sha256sums=('dd9995706f0f9384a15ccffe116c3b6e22f42ba2e58d8f24ed03c4a0e386edb4')
 | 
			
		||||
	md5sums=('f014aec54f0a1e2e880d317180fce502')
 | 
			
		||||
	_distname="Config-Simple"
 | 
			
		||||
 | 
			
		||||
	# template start; name=perl-module; version=1.0;
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,7 @@ Options
 | 
			
		||||
	For each source file in the source array of PKGBUILD, download the file
 | 
			
		||||
	if required and generate integrity checks. The integrity checks generated
 | 
			
		||||
	are determined by the checks present in the PKGBUILD, falling back to the
 | 
			
		||||
	value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent.
 | 
			
		||||
	value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent
 | 
			
		||||
	This output can be redirected into your PKGBUILD for source validation
 | 
			
		||||
	using "`makepkg -g >> PKGBUILD`".
 | 
			
		||||
 | 
			
		||||
@@ -146,9 +146,6 @@ Options
 | 
			
		||||
*-C, \--cleanbuild*::
 | 
			
		||||
	Remove the $srcdir before building the package.
 | 
			
		||||
 | 
			
		||||
*-D* <dir>, *\--dir* <dir> ::
 | 
			
		||||
	Change to directory <dir> before reading the PKGBUILD or doing anything else.
 | 
			
		||||
	
 | 
			
		||||
*\--allsource*::
 | 
			
		||||
	Do not actually build the package, but build a source-only tarball that
 | 
			
		||||
	includes all sources, including those that are normally downloaded via
 | 
			
		||||
@@ -171,9 +168,6 @@ Options
 | 
			
		||||
*\--noprepare*::
 | 
			
		||||
	Do not run the prepare() function in the PKGBUILD.
 | 
			
		||||
 | 
			
		||||
*\--noverify*::
 | 
			
		||||
	Do not run the verify() function in the PKGBUILD.
 | 
			
		||||
 | 
			
		||||
*\--sign*::
 | 
			
		||||
	Sign the resulting package with gpg, overriding the setting in
 | 
			
		||||
	linkman:makepkg.conf[5].
 | 
			
		||||
@@ -233,9 +227,6 @@ before building.
 | 
			
		||||
 | 
			
		||||
Environment Variables
 | 
			
		||||
---------------------
 | 
			
		||||
**MAKEPKG_LIBRARY**="/path/to/directory"::
 | 
			
		||||
	Use an alternative libmakepkg path instead of the {libmakepkgdir} default.
 | 
			
		||||
 | 
			
		||||
**PACMAN**::
 | 
			
		||||
	The command that will be used to check for missing dependencies and to
 | 
			
		||||
	install and remove packages. Pacman's '-Qq', '-Rns', '-S', '-T', and '-U'
 | 
			
		||||
@@ -283,23 +274,11 @@ Environment Variables
 | 
			
		||||
 | 
			
		||||
**GPGKEY=**"keyid"::
 | 
			
		||||
	Specify a key to use when signing packages, overriding the GPGKEY setting
 | 
			
		||||
	in linkman:makepkg.conf[5].
 | 
			
		||||
	in linkman:makepkg.conf[5]
 | 
			
		||||
 | 
			
		||||
**SOURCE_DATE_EPOCH=**"<date>"::
 | 
			
		||||
	Used for link:https://reproducible-builds.org/docs/[Reproducible Builds].
 | 
			
		||||
 | 
			
		||||
**BUILDTOOL=**"<name>"::
 | 
			
		||||
	The name of a tool ecosystem used to set up the build environment. Used for
 | 
			
		||||
	defining a spec for reproducible builds, e.g. the linkman:makepkg.conf[5]
 | 
			
		||||
	used.
 | 
			
		||||
 | 
			
		||||
**BUILDTOOLVER=**"<version>"::
 | 
			
		||||
	The version of the '$BUILDTOOL' used.
 | 
			
		||||
 | 
			
		||||
**GITFLAGS**::
 | 
			
		||||
	The options to pass when checking out git sources, replacing the default
 | 
			
		||||
        "--mirror".
 | 
			
		||||
 | 
			
		||||
Configuration
 | 
			
		||||
-------------
 | 
			
		||||
See linkman:makepkg.conf[5] for more details on configuring makepkg using the
 | 
			
		||||
@@ -320,7 +299,7 @@ On exit, makepkg will return one of the following error codes.
 | 
			
		||||
	Error in configuration file.
 | 
			
		||||
 | 
			
		||||
3::
 | 
			
		||||
	User specified an invalid option.
 | 
			
		||||
	User specified an invalid option
 | 
			
		||||
 | 
			
		||||
4::
 | 
			
		||||
	Error in user-supplied function in PKGBUILD.
 | 
			
		||||
 
 | 
			
		||||
@@ -72,16 +72,15 @@ Options
 | 
			
		||||
**CXXFLAGS=**"cxxflags"::
 | 
			
		||||
	Flags used for the C++ compiler; see CFLAGS for more info.
 | 
			
		||||
 | 
			
		||||
**RUSTFLAGS=**"rustflags"::
 | 
			
		||||
	Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
 | 
			
		||||
	linkman:rustc[1] for more details on the available flags.
 | 
			
		||||
 | 
			
		||||
**LDFLAGS=**"ldflags"::
 | 
			
		||||
	Flags used for the linker. Several options may be specified with common
 | 
			
		||||
	usage resembling ``-Wl,--hash-style=gnu''. Read ld(1) for more details on
 | 
			
		||||
	available linker flags.
 | 
			
		||||
 | 
			
		||||
**LTOFLAGS=**"ltoflags"::
 | 
			
		||||
	Additional compiler and linker flags appended to `CFLAGS`, `CXXFLAGS`
 | 
			
		||||
	and `LDFLAGS` when building with link time optimization. If empty,
 | 
			
		||||
	``-flto'' is used.
 | 
			
		||||
 | 
			
		||||
**MAKEFLAGS=**"makeflags"::
 | 
			
		||||
	This is often used to set the number of jobs used; for example, `-j2`.
 | 
			
		||||
	Other flags that make accepts can also be passed.
 | 
			
		||||
@@ -94,6 +93,11 @@ Options
 | 
			
		||||
**DEBUG_CXXFLAGS=**"debug_cxxflags"::
 | 
			
		||||
	Debug flags used for the C++ compiler; see DEBUG_CFLAGS for more info.
 | 
			
		||||
 | 
			
		||||
**DEBUG_RUSTFLAGS=**"debug_rustflags"::
 | 
			
		||||
	Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
 | 
			
		||||
	Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
 | 
			
		||||
	more details on the available flags.
 | 
			
		||||
 | 
			
		||||
**BUILDENV=(**!distcc !color !ccache check !sign**)**::
 | 
			
		||||
	This array contains options that affect the build environment; the defaults
 | 
			
		||||
	are shown here. All options should always be left in the array; to enable
 | 
			
		||||
@@ -143,7 +147,7 @@ Options
 | 
			
		||||
	Specify a key to use for GPG signing instead of the default key in the
 | 
			
		||||
	keyring. Can be overridden with makepkg's '\--key' option.
 | 
			
		||||
 | 
			
		||||
**OPTIONS=(**!strip docs libtool staticlibs emptydirs ...**)**::
 | 
			
		||||
**OPTIONS=(**!strip docs libtool staticlibs emptydirs !zipman !purge !debug**)**::
 | 
			
		||||
	This array contains options that affect default packaging. They are
 | 
			
		||||
	equivalent to options that can be placed in the PKGBUILD; the defaults are
 | 
			
		||||
	shown here. All options should always be left in the array; to enable or
 | 
			
		||||
@@ -185,20 +189,10 @@ Options
 | 
			
		||||
		DEBUG_CXXFLAGS to their counterpart buildflags. Creates a separate
 | 
			
		||||
		package containing the debug symbols when used with `strip'.
 | 
			
		||||
 | 
			
		||||
	*lto*;;
 | 
			
		||||
		Enable building packages using link time optimization. Adds the
 | 
			
		||||
		flags specified in LTOFLAGS to CFLAGS, CXXFLAGS and LDFLAGS (or
 | 
			
		||||
		``-flto'' if LTOFLAGS is empty).
 | 
			
		||||
 | 
			
		||||
	*autodeps*;;
 | 
			
		||||
		Enable the automatic addition of libraries to the depends and
 | 
			
		||||
		provides arrays. Search library directories are controlled by
 | 
			
		||||
		the LIB_DIRS variable defined below.
 | 
			
		||||
 | 
			
		||||
**INTEGRITY_CHECK=(**check1 ...**)**::
 | 
			
		||||
	File integrity checks to use. Multiple checks may be specified; this
 | 
			
		||||
	affects both generation and checking. The current valid options are:
 | 
			
		||||
	`ck`, `md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, and `b2`.
 | 
			
		||||
	`md5`, `sha1`, `sha224`, `sha256`, `sha384`, `sha512`, and `b2`.
 | 
			
		||||
 | 
			
		||||
**STRIP_BINARIES=**"--strip-all"::
 | 
			
		||||
	Options to be used when stripping binaries. See linkman:strip[1]
 | 
			
		||||
@@ -225,12 +219,6 @@ Options
 | 
			
		||||
	that are located in opt/, you may need to add the directory to this
 | 
			
		||||
	array. *NOTE:* Do not add the leading slash to the directory name.
 | 
			
		||||
 | 
			
		||||
**LIB_DIRS=(**lib:usr/lib ...**)**::
 | 
			
		||||
	If `autodeps` is specified in the `OPTIONS` array, this variable will
 | 
			
		||||
	instruct makepkg where to look to find libraries to add to the `provides`
 | 
			
		||||
	array. The format is "prefix:path", where provides will be added for
 | 
			
		||||
	libraries found in "path" with the specified prefix added.
 | 
			
		||||
 | 
			
		||||
**PURGE_TARGETS=(**usr/{,share}/info/dir .podlist *.pod...**)**::
 | 
			
		||||
	If `purge` is specified in the `OPTIONS` array, this variable will
 | 
			
		||||
	instruct makepkg which files to remove from the package. This is
 | 
			
		||||
@@ -282,18 +270,9 @@ Options
 | 
			
		||||
 | 
			
		||||
**PKGEXT=**"{pkgext}", **SRCEXT=**"{srcext}"::
 | 
			
		||||
	Sets the compression used when making compiled or source packages.
 | 
			
		||||
	Valid suffixes are `.pkg` or `.src` (for PKGEXT and SRCEXT resepectively)
 | 
			
		||||
	followed by one of `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`, `.tar.lzo`,
 | 
			
		||||
	`.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or simply `.tar` to
 | 
			
		||||
	disable compression entirely.
 | 
			
		||||
 | 
			
		||||
**PACMAN_AUTH=()**::
 | 
			
		||||
	Specify a command prefix for running pacman as root. If unset, makepkg will
 | 
			
		||||
	check for the presence of sudo(8) and su(1) in turn, and try the first one
 | 
			
		||||
	it finds.
 | 
			
		||||
	+
 | 
			
		||||
	If present, `%c` will be replaced with the shell-quoted form of the command
 | 
			
		||||
	to run. Otherwise, the command to run is appended to the auth command.
 | 
			
		||||
	Valid suffixes are `.tar.gz`, `.tar.bz2`, `.tar.xz`, `.tar.zst`,
 | 
			
		||||
	`.tar.lzo`, `.tar.lrz`, `.tar.lz4`, `.tar.lz` and `.tar.Z`, or
 | 
			
		||||
	simply `.tar` to disable compression entirely.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,11 @@ manpages = [
 | 
			
		||||
  { 'name': 'makepkg-template.1' },
 | 
			
		||||
  { 'name': 'repo-add.8' },
 | 
			
		||||
  { 'name': 'vercmp.8' },
 | 
			
		||||
  { 'name': 'testpkg.8' },
 | 
			
		||||
  { 'name': 'pacman-key.8' },
 | 
			
		||||
  { 'name': 'pacman-db-upgrade.8' },
 | 
			
		||||
  { 'name': 'PKGBUILD.5', 'extra_depends' : [ 'PKGBUILD-example.txt' ] },
 | 
			
		||||
  { 'name': 'makepkg.conf.5' },
 | 
			
		||||
  { 'name': 'pacman.conf.5' },
 | 
			
		||||
  { 'name': 'libalpm.3' },
 | 
			
		||||
  { 'name': 'BUILDINFO.5' },
 | 
			
		||||
  { 'name': 'pacman-conf.8' },
 | 
			
		||||
]
 | 
			
		||||
@@ -27,15 +26,14 @@ asciidoc_conf = join_paths(meson.current_source_dir(), 'asciidoc.conf')
 | 
			
		||||
asciidoc_opts = [
 | 
			
		||||
 '-f', asciidoc_conf,
 | 
			
		||||
 '-a', 'pacman_version="@0@"'.format(PACKAGE_VERSION),
 | 
			
		||||
 '-a', 'pacman_date=@0@'.format(run_command('date', '+%Y-%m-%d').stdout().strip()),
 | 
			
		||||
 '-a', 'srcext=@0@'.format(get_option('src-ext')),
 | 
			
		||||
 '-a', 'pkgext=@0@'.format(get_option('pkg-ext')),
 | 
			
		||||
 '-a', 'pkgdatadir=@0@'.format(PKGDATADIR),
 | 
			
		||||
 '-a', 'keyringdir=@0@'.format(KEYRINGDIR),
 | 
			
		||||
 '-a', 'localstatedir=@0@'.format(LOCALSTATEDIR),
 | 
			
		||||
 '-a', 'sysconfdir=@0@'.format(SYSCONFDIR),
 | 
			
		||||
 '-a', 'datarootdir=@0@'.format(DATAROOTDIR),
 | 
			
		||||
 '-a', 'rootdir=@0@'.format(ROOTDIR),
 | 
			
		||||
 '-a', 'libmakepkgdir=@0@'.format(LIBMAKEPKGDIR),
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
html_targets = []
 | 
			
		||||
@@ -131,14 +129,9 @@ meson.add_install_script(MESON_MAKE_SYMLINK,
 | 
			
		||||
                         'repo-add.8',
 | 
			
		||||
                         join_paths(MANDIR, 'man8/repo-remove.8'))
 | 
			
		||||
 | 
			
		||||
meson.add_install_script(MESON_MAKE_SYMLINK,
 | 
			
		||||
                         'alpm-hooks.5',
 | 
			
		||||
                         join_paths(MANDIR, 'man5/pacman-hooks.5'))
 | 
			
		||||
 | 
			
		||||
doxygen = find_program('doxygen', required : get_option('doxygen'))
 | 
			
		||||
if doxygen.found() and not get_option('doxygen').disabled()
 | 
			
		||||
  doxyconf = configuration_data()
 | 
			
		||||
  doxyconf.set('INPUT_DIRECTORY', meson.current_source_dir())
 | 
			
		||||
  doxyconf.set('OUTPUT_DIRECTORY', meson.current_build_dir())
 | 
			
		||||
  doxyfile = configure_file(
 | 
			
		||||
    input : 'Doxyfile.in',
 | 
			
		||||
 
 | 
			
		||||
@@ -34,7 +34,7 @@ Options
 | 
			
		||||
*-R, \--rootdir* <path>::
 | 
			
		||||
	Specify an alternate installation root (default is `/`).
 | 
			
		||||
 | 
			
		||||
*-r, \--repo* <repository>::
 | 
			
		||||
*-r, \--repo* <remote>::
 | 
			
		||||
	Query options for a specific repository.
 | 
			
		||||
 | 
			
		||||
*-v, \--verbose*::
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +0,0 @@
 | 
			
		||||
pacman-db-upgrade(8)
 | 
			
		||||
====================
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
pacman-db-upgrade - upgrade the local pacman database to a newer format
 | 
			
		||||
 | 
			
		||||
Synopsis
 | 
			
		||||
--------
 | 
			
		||||
'pacman-db-upgrade' [options]
 | 
			
		||||
 | 
			
		||||
Description
 | 
			
		||||
-----------
 | 
			
		||||
'pacman-db-upgrade' is a script that upgrades the local database used
 | 
			
		||||
by linkman:pacman[8] to a newer format.
 | 
			
		||||
 | 
			
		||||
Options
 | 
			
		||||
--------------
 | 
			
		||||
*-h, \--help*::
 | 
			
		||||
Show the built-in help message and exit.
 | 
			
		||||
*-V, \--version*::
 | 
			
		||||
Show version information and exit.
 | 
			
		||||
*-d, \--dbpath* <path>::
 | 
			
		||||
Set an alternate database location.
 | 
			
		||||
*-r, \--root* <path>::
 | 
			
		||||
Set an alternate installation root.
 | 
			
		||||
*\--config* <path>::
 | 
			
		||||
Set an alternate configuration file.
 | 
			
		||||
*\--nocolor*::
 | 
			
		||||
Remove color from output.
 | 
			
		||||
 | 
			
		||||
See Also
 | 
			
		||||
--------
 | 
			
		||||
linkman:pacman[8]
 | 
			
		||||
 | 
			
		||||
include::footer.asciidoc[]
 | 
			
		||||
@@ -86,7 +86,7 @@ Operations
 | 
			
		||||
 | 
			
		||||
*\--populate*::
 | 
			
		||||
	Reload the default keys from the (optionally provided) keyrings in
 | 
			
		||||
	+{keyringdir}+. For more information, see
 | 
			
		||||
	+{pkgdatadir}/keyrings+. For more information, see
 | 
			
		||||
	<<PK,Providing a Keyring for Import>> below.
 | 
			
		||||
 | 
			
		||||
*-u, \--updatedb*::
 | 
			
		||||
@@ -129,7 +129,7 @@ A distribution or other repository provided may want to provide a set of
 | 
			
		||||
PGP keys used in the signing of its packages and repository databases that can
 | 
			
		||||
be readily imported into the pacman keyring. This is achieved by providing a
 | 
			
		||||
PGP keyring file `foo.gpg` that contains the keys for the foo keyring in the
 | 
			
		||||
directory +{keyringdir}+.
 | 
			
		||||
directory +{pkgdatadir}/keyrings+.
 | 
			
		||||
 | 
			
		||||
Optionally, the file `foo-trusted` can be provided containing a list of trusted
 | 
			
		||||
key IDs for that keyring. This is a file in a format compatible with 'gpg
 | 
			
		||||
 
 | 
			
		||||
@@ -195,10 +195,11 @@ Options
 | 
			
		||||
	Disable defaults for low speed limit and timeout on downloads. Use this
 | 
			
		||||
	if you have issues downloading files with proxy and/or security gateway.
 | 
			
		||||
 | 
			
		||||
*\--sysroot* <dir>:: Specify an alternative system root.  This path will be
 | 
			
		||||
	prepended to all other configuration directories and any repository servers
 | 
			
		||||
	beginning with `file://`.  Any paths or URLs passed as targets will not be
 | 
			
		||||
	modified.  This allows mounted guest systems to be properly operated on.
 | 
			
		||||
*\--sysroot* <dir>::
 | 
			
		||||
	Specify an alternative system root.  Pacman will chroot and chdir into the
 | 
			
		||||
	system root prior to running. This allows mounted guest systems to be
 | 
			
		||||
	properly operated on. Any other paths given will be interpreted as relative
 | 
			
		||||
	to the system root. Requires root privileges.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Transaction Options (apply to '-S', '-R' and '-U')
 | 
			
		||||
@@ -211,7 +212,7 @@ Transaction Options (apply to '-S', '-R' and '-U')
 | 
			
		||||
 | 
			
		||||
*\--assume-installed* <package=version>::
 | 
			
		||||
	Add a virtual package "package" with version "version" to the transaction
 | 
			
		||||
	to satisfy dependencies. This allows disabling the specific dependency checks
 | 
			
		||||
	to satisfy dependencies. This allows to disable specific dependency checks
 | 
			
		||||
	without affecting all dependency checks. To disable all dependency
 | 
			
		||||
	checking, see the '\--nodeps' option.
 | 
			
		||||
 | 
			
		||||
@@ -234,22 +235,12 @@ Transaction Options (apply to '-S', '-R' and '-U')
 | 
			
		||||
 | 
			
		||||
*\--print-format* <format>::
 | 
			
		||||
	Specify a printf-like format to control the output of the '\--print'
 | 
			
		||||
	operation. The possible attributes are: "%a" for arch, "%b" for
 | 
			
		||||
	builddate, "%d" for description, "%e" for pkgbase, "%f" for filename,
 | 
			
		||||
	"%g" for base64 encoded PGP signature, "%h" for sha256sum, "%m" for
 | 
			
		||||
	md5sum, "%n" for pkgname, "%p" for packager, "%v" for pkgver, "%l" for
 | 
			
		||||
	location, "%r" for repository, "%s" for size, "%C" for checkdepends,
 | 
			
		||||
	"%D" for depends, "%G" for groups, "%H" for conflicts, "%L" for
 | 
			
		||||
	licenses, "%M" for makedepends, "%O" for optional depends, "%P" for
 | 
			
		||||
	provides and "%R" for replaces.
 | 
			
		||||
	Implies '\--print'.
 | 
			
		||||
	operation. The possible attributes are: "%n" for pkgname, "%v" for pkgver,
 | 
			
		||||
	"%l" for location, "%r" for repository, and "%s" for size. Implies '\--print'.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Upgrade Options (apply to '-S' and '-U')[[UO]]
 | 
			
		||||
----------------------------------------------
 | 
			
		||||
*-w, \--downloadonly*::
 | 
			
		||||
	Retrieve all packages from the server, but do not install/upgrade anything.
 | 
			
		||||
 | 
			
		||||
*\--asdeps*::
 | 
			
		||||
	Install packages non-explicitly; in other words, fake their install reason
 | 
			
		||||
	to be installed as a dependency. This is useful for makepkg and other
 | 
			
		||||
@@ -454,12 +445,15 @@ can be useful when the user switches from a testing repository to a stable one.
 | 
			
		||||
Additional targets can also be specified manually, so that '-Su foo' will do a
 | 
			
		||||
system upgrade and install/upgrade the "foo" package in the same operation.
 | 
			
		||||
 | 
			
		||||
*-w, \--downloadonly*::
 | 
			
		||||
	Retrieve all packages from the server, but do not install/upgrade anything.
 | 
			
		||||
 | 
			
		||||
*-y, \--refresh*::
 | 
			
		||||
	Download a fresh copy of the master package databases '(repo.db)' from the
 | 
			
		||||
	server(s) defined in linkman:pacman.conf[5]. This should typically be used
 | 
			
		||||
	each time you use '\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y'
 | 
			
		||||
	flags will force a refresh of all package databases, even if they appear to
 | 
			
		||||
	be up-to-date.
 | 
			
		||||
	Download a fresh copy of the master package database from the server(s)
 | 
			
		||||
	defined in linkman:pacman.conf[5]. This should typically be used each time
 | 
			
		||||
	you use	'\--sysupgrade' or '-u'. Passing two '\--refresh' or '-y' flags
 | 
			
		||||
	will force a refresh of all package databases, even if they appear to be
 | 
			
		||||
	up-to-date.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Database Options (apply to '-D')[[QO]]
 | 
			
		||||
@@ -488,8 +482,8 @@ Database Options (apply to '-D')[[QO]]
 | 
			
		||||
File Options (apply to '-F')[[FO]]
 | 
			
		||||
----------------------------------
 | 
			
		||||
*-y, --refresh*::
 | 
			
		||||
	Download fresh package file databases '(repo.files)' from the server.
 | 
			
		||||
	Use twice to force a refresh even if databases are up to date.
 | 
			
		||||
	Download fresh package databases from the server. Use twice to force a
 | 
			
		||||
	refresh even if databases are up to date.
 | 
			
		||||
 | 
			
		||||
*-l, \--list*::
 | 
			
		||||
	List the files owned by the queried package.
 | 
			
		||||
 
 | 
			
		||||
@@ -113,15 +113,15 @@ Options
 | 
			
		||||
	general configuration options. Wildcards in the specified paths will get
 | 
			
		||||
	expanded based on linkman:glob[7] rules.
 | 
			
		||||
 | 
			
		||||
*Architecture =* auto &| i686 &| x86_64 | ...::
 | 
			
		||||
	If set, pacman will only allow installation of packages with the given
 | 
			
		||||
	architectures (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
 | 
			
		||||
*Architecture =* auto | i686 | x86_64 | ...::
 | 
			
		||||
	If set, pacman will only allow installation of packages of the given
 | 
			
		||||
	architecture (e.g. 'i686', 'x86_64', etc). The special value 'auto' will
 | 
			
		||||
	use the system architecture, provided via ``uname -m''. If unset, no
 | 
			
		||||
	architecture checks are made. *NOTE*: Packages with the special
 | 
			
		||||
	architecture 'any' can always be installed, as they are meant to be
 | 
			
		||||
	architecture independent.
 | 
			
		||||
 | 
			
		||||
*XferCommand =* /path/to/command %u [%o]::
 | 
			
		||||
*XferCommand =* /path/to/command %u::
 | 
			
		||||
	If set, an external program will be used to download all remote files.
 | 
			
		||||
	All instances of `%u` will be replaced with the download URL. If present,
 | 
			
		||||
	instances of `%o` will be replaced with the local filename, plus a
 | 
			
		||||
@@ -186,9 +186,12 @@ Options
 | 
			
		||||
*Color*::
 | 
			
		||||
	Automatically enable colors only when pacman's output is on a tty.
 | 
			
		||||
 | 
			
		||||
*NoProgressBar*::
 | 
			
		||||
	Disables progress bars. This is useful for terminals which do
 | 
			
		||||
	not support escape characters.
 | 
			
		||||
*TotalDownload*::
 | 
			
		||||
	When downloading, display the amount downloaded, download rate, ETA,
 | 
			
		||||
	and completed percentage of the entire download list rather
 | 
			
		||||
	than the percent of each individual download target. The progress
 | 
			
		||||
	bar is still based solely on the current file download.
 | 
			
		||||
	This option won't work if XferCommand is used.
 | 
			
		||||
 | 
			
		||||
*CheckSpace*::
 | 
			
		||||
	Performs an approximate check for adequate available disk space before
 | 
			
		||||
@@ -202,11 +205,6 @@ Options
 | 
			
		||||
	Disable defaults for low speed limit and timeout on downloads. Use this
 | 
			
		||||
	if you have issues downloading files with proxy and/or security gateway.
 | 
			
		||||
 | 
			
		||||
*ParallelDownloads =* ...::
 | 
			
		||||
	Specifies number of concurrent download streams. The value needs to be a
 | 
			
		||||
	positive integer. If this config option is not set then only one download
 | 
			
		||||
	stream is used (i.e. downloads happen sequentially).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Repository Sections
 | 
			
		||||
-------------------
 | 
			
		||||
@@ -240,12 +238,6 @@ number.
 | 
			
		||||
	general configuration options. Wildcards in the specified paths will get
 | 
			
		||||
	expanded based on linkman:glob[7] rules.
 | 
			
		||||
 | 
			
		||||
*CacheServer =* url::
 | 
			
		||||
	A full URL to a location where the packages, and signatures (if
 | 
			
		||||
	available) for this repository can be found.  Cache servers will be tried
 | 
			
		||||
	before any non-cache servers, will not be removed from the server pool for
 | 
			
		||||
	404 download errors, and will not be used for database files.
 | 
			
		||||
 | 
			
		||||
*Server =* url::
 | 
			
		||||
	A full URL to a location where the database, packages, and signatures (if
 | 
			
		||||
	available) for this repository can be found.
 | 
			
		||||
@@ -253,8 +245,8 @@ number.
 | 
			
		||||
During parsing, pacman will define the `$repo` variable to the name of the
 | 
			
		||||
current section. This is often utilized in files specified using the 'Include'
 | 
			
		||||
directive so all repositories can use the same mirrorfile. pacman also defines
 | 
			
		||||
the `$arch` variable to the first (or only) value of the `Architecture` option,
 | 
			
		||||
so the same mirrorfile can even be used for different architectures.
 | 
			
		||||
the `$arch` variable to the value of `Architecture`, so the same mirrorfile can
 | 
			
		||||
even be used for different architectures.
 | 
			
		||||
 | 
			
		||||
*SigLevel =* ...::
 | 
			
		||||
	Set the signature verification level for this repository. For more
 | 
			
		||||
 
 | 
			
		||||
@@ -70,8 +70,6 @@ repo-add Options
 | 
			
		||||
	Remove old package files from the disk when updating their entry in the
 | 
			
		||||
	database.
 | 
			
		||||
 | 
			
		||||
*\--include-sigs*::
 | 
			
		||||
	Include package PGP signatures in the repository database (if available)
 | 
			
		||||
 | 
			
		||||
Example
 | 
			
		||||
-------
 | 
			
		||||
 
 | 
			
		||||
@@ -20,22 +20,7 @@ started with GIT if you have not worked with it before.
 | 
			
		||||
 | 
			
		||||
The pacman code can be fetched using the following command:
 | 
			
		||||
 | 
			
		||||
	git clone https://gitlab.archlinux.org/pacman/pacman.git
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Before making large changes
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
* Discuss your idea
 | 
			
		||||
 | 
			
		||||
There is nothing worse that spending time making a change only for it to be
 | 
			
		||||
rejected immediately.  Ensure ideas are discussed beforehand to avoid
 | 
			
		||||
disappointment.  Appropriate locations for discussion are the issue tracker
 | 
			
		||||
on gitlab, or the pacman-dev mailing list.  Transient discussion channels
 | 
			
		||||
such as IRC are not appropriate.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
	git clone git://git.archlinux.org/pacman.git
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Creating your patch
 | 
			
		||||
@@ -58,18 +43,36 @@ It helps if you describe the overview and goals of the patch in the git commit
 | 
			
		||||
log.  This allows others to see what you intended so as to compare it to what
 | 
			
		||||
was actually done, and allows better feedback.
 | 
			
		||||
 | 
			
		||||
* Use `git format-patch` to create patches.
 | 
			
		||||
 | 
			
		||||
Your commit message will be shown above the patch by default when you will use
 | 
			
		||||
`git format-patch`, including the signoff line.  Sets of multiple patches that
 | 
			
		||||
need extra explanation beyond the commit messages may include additional notes
 | 
			
		||||
in a cover letter.  Individual patches may include additional notes between the
 | 
			
		||||
"---" following the commit message and the beginning of the diff.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
Submitting your patch
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
* Submit patches with a gitlab merge request
 | 
			
		||||
* Send the patch to the pacman-dev mailing list
 | 
			
		||||
 | 
			
		||||
The pacman gitlab instance is the primary queue for review and acceptance.
 | 
			
		||||
Here you will get feedback, and let the reviewers know the details of your
 | 
			
		||||
patch.
 | 
			
		||||
The mailing list is the primary queue for review and acceptance.  Here you
 | 
			
		||||
will get feedback, and let the reviewers know the details of your patch.
 | 
			
		||||
 | 
			
		||||
* No MIME, no links, no compression, no attachments.  Just plain text.
 | 
			
		||||
 | 
			
		||||
Patches should be contained in the actual body of the email.  There are many
 | 
			
		||||
reasons for this.  First, it makes them easier to read with any mail reader,
 | 
			
		||||
it allows easier review "at a glance", and most importantly, it allows people
 | 
			
		||||
to comment on exact lines of the patch in reply emails.
 | 
			
		||||
 | 
			
		||||
`git send-email` allows you to send Git-formatted patches in plain text easily
 | 
			
		||||
and is the preferred method for submission to the mailing list.  Mail clients,
 | 
			
		||||
including Gmail's web interface, have a tendency to break patches by wrapping
 | 
			
		||||
lines and/or adjusting whitespace and should be avoided.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
@@ -92,6 +95,7 @@ When you do get feedback, it usually merits a response, whether this be a
 | 
			
		||||
resubmission of the patch with corrections or a follow-up email asking for
 | 
			
		||||
clarifications. When neither of these occurs, don't expect your patch to get
 | 
			
		||||
further review. The all-volunteer staff don't have time to fix up patches that
 | 
			
		||||
aren't their own.
 | 
			
		||||
aren't their own.  When resubmitting patches, update the subject line to reflect
 | 
			
		||||
the version number ('[PATCHv2]'), and send it as a reply to the original thread.
 | 
			
		||||
 | 
			
		||||
--
 | 
			
		||||
 
 | 
			
		||||
@@ -1,20 +0,0 @@
 | 
			
		||||
testpkg(8)
 | 
			
		||||
==========
 | 
			
		||||
 | 
			
		||||
Name
 | 
			
		||||
----
 | 
			
		||||
testpkg - test a pacman package for validity
 | 
			
		||||
 | 
			
		||||
Synopsis
 | 
			
		||||
--------
 | 
			
		||||
'testpkg' <package file>
 | 
			
		||||
 | 
			
		||||
Description
 | 
			
		||||
-----------
 | 
			
		||||
'testpkg' is a script used to make sure that a pacman package is valid.
 | 
			
		||||
 | 
			
		||||
See Also
 | 
			
		||||
--------
 | 
			
		||||
linkman:pacman[8]
 | 
			
		||||
 | 
			
		||||
include::footer.asciidoc[]
 | 
			
		||||
@@ -55,7 +55,7 @@ Pre-release Updates
 | 
			
		||||
~~~~~~~~~~~~~~~~~~~
 | 
			
		||||
 | 
			
		||||
A week or two before each release, the codebase will go into a string freeze
 | 
			
		||||
and an email will be sent to the mailto:pacman-dev@lists.archlinux.org[pacman-dev]
 | 
			
		||||
and an email will be sent to the mailto:pacman-dev@archlinux.org[pacman-dev]
 | 
			
		||||
mailing list asking for translations. This email will have a prefix of
 | 
			
		||||
*[translation]* for anyone looking to set up an email filter.
 | 
			
		||||
 | 
			
		||||
@@ -78,7 +78,7 @@ Incremental Updates
 | 
			
		||||
If you have more advanced needs you will have to get a copy of the pacman
 | 
			
		||||
repository.
 | 
			
		||||
 | 
			
		||||
	git clone https://gitlab.archlinux.org/pacman/pacman.git
 | 
			
		||||
	git clone git://git.archlinux.org/pacman.git pacman
 | 
			
		||||
 | 
			
		||||
Next, you will need to run `./autogen.sh` and `./configure` in the base
 | 
			
		||||
directory to generate the correct Makefiles. At this point, all necessary
 | 
			
		||||
@@ -150,4 +150,4 @@ There are currently no efforts underway to include translated manual pages in
 | 
			
		||||
the pacman codebase. However, this is not to say translations are unwelcome. If
 | 
			
		||||
someone has experience with i18n man pages and how to best include them with our
 | 
			
		||||
source, please contact the pacman-dev mailing list at
 | 
			
		||||
mailto:pacman-dev@lists.archlinux.org[].
 | 
			
		||||
mailto:pacman-dev@archlinux.org[].
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										27
									
								
								etc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								etc/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
dist_sysconf_DATA = makepkg.conf pacman.conf
 | 
			
		||||
EXTRA_DIST = makepkg.conf.in pacman.conf.in
 | 
			
		||||
 | 
			
		||||
# Files that should be removed, but which Automake does not know.
 | 
			
		||||
MOSTLYCLEANFILES = $(dist_sysconf_DATA)
 | 
			
		||||
 | 
			
		||||
SED_PROCESS = \
 | 
			
		||||
	$(AM_V_GEN)$(MKDIR_P) $(dir $@) && \
 | 
			
		||||
	$(SED) \
 | 
			
		||||
	-e 's|@sysconfdir[@]|$(sysconfdir)|g' \
 | 
			
		||||
	-e 's|@localstatedir[@]|$(localstatedir)|g' \
 | 
			
		||||
	-e 's|@prefix[@]|$(prefix)|g' \
 | 
			
		||||
	-e 's|@PACKAGE_VERSION[@]|$(PACKAGE_VERSION)|g' \
 | 
			
		||||
	-e 's|@PACKAGE_NAME[@]|$(PACKAGE_NAME)|g' \
 | 
			
		||||
	-e 's|@PKGEXT[@]|$(PKGEXT)|g' \
 | 
			
		||||
	-e 's|@SRCEXT[@]|$(SRCEXT)|g' \
 | 
			
		||||
	-e 's|@STRIP_BINARIES[@]|$(STRIP_BINARIES)|g' \
 | 
			
		||||
	-e 's|@STRIP_SHARED[@]|$(STRIP_SHARED)|g' \
 | 
			
		||||
	-e 's|@STRIP_STATIC[@]|$(STRIP_STATIC)|g' \
 | 
			
		||||
	-e 's|@CARCH[@]|$(CARCH)|g' \
 | 
			
		||||
	-e 's|@CHOST[@]|$(CHOST)|g' \
 | 
			
		||||
	-e 's|@ARCHSWITCH[@]|$(ARCHSWITCH)|g' \
 | 
			
		||||
	-e 's|@ROOTDIR[@]|$(ROOTDIR)|g' \
 | 
			
		||||
	< $< > $@
 | 
			
		||||
 | 
			
		||||
%.conf: %.conf.in Makefile
 | 
			
		||||
	$(SED_PROCESS)
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# @sysconfdir@/makepkg.conf.d/fortran.conf
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# FORTRAN LANGUAGE SUPPORT
 | 
			
		||||
#########################################################################
 | 
			
		||||
 | 
			
		||||
# Flags used for the Fortran compiler, similar in spirit to CFLAGS. Read
 | 
			
		||||
# linkman:gfortran[1] for more details on the available flags.
 | 
			
		||||
#FFLAGS="-O2 -pipe"
 | 
			
		||||
#FCFLAGS="$FFLAGS"
 | 
			
		||||
 | 
			
		||||
# Additional compiler flags appended to `FFLAGS` and `FCFLAGS` for use in debugging. Usually
 | 
			
		||||
# this would include: ``-g''. Read linkman:gfortran[1] for more details on the wide
 | 
			
		||||
# variety of compiler flags available.
 | 
			
		||||
#DEBUG_FFLAGS="-g"
 | 
			
		||||
@@ -1,17 +0,0 @@
 | 
			
		||||
#!/hint/bash
 | 
			
		||||
#
 | 
			
		||||
# @sysconfdir@/makepkg.conf.d/rust.conf
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# RUST LANGUAGE SUPPORT
 | 
			
		||||
#########################################################################
 | 
			
		||||
 | 
			
		||||
# Flags used for the Rust compiler, similar in spirit to CFLAGS. Read
 | 
			
		||||
# linkman:rustc[1] for more details on the available flags.
 | 
			
		||||
#RUSTFLAGS="-C opt-level=3"
 | 
			
		||||
 | 
			
		||||
# Additional compiler flags appended to `RUSTFLAGS` for use in debugging.
 | 
			
		||||
# Usually this would include: ``-C debuginfo=2''. Read linkman:rustc[1] for
 | 
			
		||||
# more details on the available flags.
 | 
			
		||||
#DEBUG_RUSTFLAGS="-C debuginfo=2"
 | 
			
		||||
@@ -9,10 +9,10 @@
 | 
			
		||||
#
 | 
			
		||||
#-- The download utilities that makepkg should use to acquire sources
 | 
			
		||||
#  Format: 'protocol::agent'
 | 
			
		||||
DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
 | 
			
		||||
          'ftp::/usr/bin/curl -qgfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
          'http::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
          'https::/usr/bin/curl -qgb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
 | 
			
		||||
          'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
          'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
          'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
 | 
			
		||||
          'rsync::/usr/bin/rsync --no-motd -z %u %o'
 | 
			
		||||
          'scp::/usr/bin/scp -C %u %o')
 | 
			
		||||
 | 
			
		||||
@@ -23,8 +23,7 @@ DLAGENTS=('file::/usr/bin/curl -qgC - -o %o %u'
 | 
			
		||||
 | 
			
		||||
#-- The package required by makepkg to download VCS sources
 | 
			
		||||
#  Format: 'protocol::package'
 | 
			
		||||
VCSCLIENTS=('bzr::breezy'
 | 
			
		||||
            'fossil::fossil'
 | 
			
		||||
VCSCLIENTS=('bzr::bzr'
 | 
			
		||||
            'git::git'
 | 
			
		||||
            'hg::mercurial'
 | 
			
		||||
            'svn::subversion')
 | 
			
		||||
@@ -41,18 +40,19 @@ CHOST="@CHOST@"
 | 
			
		||||
#CFLAGS="-O2 -pipe"
 | 
			
		||||
#CXXFLAGS="-O2 -pipe"
 | 
			
		||||
#LDFLAGS=""
 | 
			
		||||
#LTOFLAGS="-flto"
 | 
			
		||||
#RUSTFLAGS="-C opt-level=2"
 | 
			
		||||
#-- Make Flags: change this for DistCC/SMP systems
 | 
			
		||||
#MAKEFLAGS="-j2"
 | 
			
		||||
#-- Debugging flags
 | 
			
		||||
#DEBUG_CFLAGS="-g"
 | 
			
		||||
#DEBUG_CXXFLAGS="-g"
 | 
			
		||||
#DEBUG_RUSTFLAGS="-C debuginfo=2"
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# BUILD ENVIRONMENT
 | 
			
		||||
#########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Makepkg defaults: BUILDENV=(!distcc !color !ccache check !sign)
 | 
			
		||||
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
 | 
			
		||||
#  A negated environment option will do the opposite of the comments below.
 | 
			
		||||
#
 | 
			
		||||
#-- distcc:   Use the Distributed C/C++/ObjC compiler
 | 
			
		||||
@@ -75,8 +75,7 @@ BUILDENV=(!distcc color !ccache check !sign)
 | 
			
		||||
#   These are default values for the options=() settings
 | 
			
		||||
#########################################################################
 | 
			
		||||
#
 | 
			
		||||
# Makepkg defaults:
 | 
			
		||||
# OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug !lto !autodeps)
 | 
			
		||||
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
 | 
			
		||||
#  A negated option will do the opposite of the comments below.
 | 
			
		||||
#
 | 
			
		||||
#-- strip:      Strip symbols from binaries/libraries
 | 
			
		||||
@@ -87,13 +86,11 @@ BUILDENV=(!distcc color !ccache check !sign)
 | 
			
		||||
#-- zipman:     Compress manual (man and info) pages in MAN_DIRS with gzip
 | 
			
		||||
#-- purge:      Remove files specified by PURGE_TARGETS
 | 
			
		||||
#-- debug:      Add debugging flags as specified in DEBUG_* variables
 | 
			
		||||
#-- lto:        Add compile flags for building with link time optimization
 | 
			
		||||
#-- autodeps:   Automatically add depends/provides
 | 
			
		||||
#
 | 
			
		||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug !lto !autodeps)
 | 
			
		||||
OPTIONS=(strip docs libtool staticlibs emptydirs zipman purge !debug)
 | 
			
		||||
 | 
			
		||||
#-- File integrity checks to use. Valid: ck, md5, sha1, sha224, sha256, sha384, sha512, b2
 | 
			
		||||
INTEGRITY_CHECK=(ck)
 | 
			
		||||
#-- File integrity checks to use. Valid: md5, sha1, sha224, sha256, sha384, sha512, b2
 | 
			
		||||
INTEGRITY_CHECK=(md5)
 | 
			
		||||
#-- Options to be used when stripping binaries. See `man strip' for details.
 | 
			
		||||
STRIP_BINARIES="@STRIP_BINARIES@"
 | 
			
		||||
#-- Options to be used when stripping shared libraries. See `man strip' for details.
 | 
			
		||||
@@ -108,8 +105,6 @@ DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
 | 
			
		||||
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
 | 
			
		||||
#-- Directory to store source code in for debug packages
 | 
			
		||||
DBGSRCDIR="/usr/src/debug"
 | 
			
		||||
#-- Prefix and directories for library autodeps
 | 
			
		||||
LIB_DIRS=('lib:usr/lib' 'lib32:usr/lib32')
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# PACKAGE OUTPUT
 | 
			
		||||
@@ -150,10 +145,3 @@ COMPRESSLZ=(lzip -c -f)
 | 
			
		||||
#
 | 
			
		||||
PKGEXT='@PKGEXT@'
 | 
			
		||||
SRCEXT='@SRCEXT@'
 | 
			
		||||
 | 
			
		||||
#########################################################################
 | 
			
		||||
# OTHER
 | 
			
		||||
#########################################################################
 | 
			
		||||
#
 | 
			
		||||
#-- Command used to run pacman as root, instead of trying sudo and su
 | 
			
		||||
PACMAN_AUTH=()
 | 
			
		||||
 
 | 
			
		||||
@@ -31,10 +31,9 @@ Architecture = auto
 | 
			
		||||
# Misc options
 | 
			
		||||
#UseSyslog
 | 
			
		||||
#Color
 | 
			
		||||
#NoProgressBar
 | 
			
		||||
#TotalDownload
 | 
			
		||||
CheckSpace
 | 
			
		||||
#VerbosePkgLists
 | 
			
		||||
ParallelDownloads = 5
 | 
			
		||||
 | 
			
		||||
# PGP signature checking
 | 
			
		||||
#SigLevel = Optional
 | 
			
		||||
@@ -74,4 +73,4 @@ ParallelDownloads = 5
 | 
			
		||||
# tips on creating your own repositories.
 | 
			
		||||
#[custom]
 | 
			
		||||
#SigLevel = Optional TrustAll
 | 
			
		||||
#Server = file:///home/packages
 | 
			
		||||
#Server = file:///home/custompkgs
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										78
									
								
								lib/libalpm/Makefile.am
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								lib/libalpm/Makefile.am
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,78 @@
 | 
			
		||||
AUTOMAKE_OPTIONS = gnu
 | 
			
		||||
 | 
			
		||||
SUBDIRS = po
 | 
			
		||||
 | 
			
		||||
EXTRA_DIST = meson.build po/meson.build
 | 
			
		||||
 | 
			
		||||
lib_LTLIBRARIES = libalpm.la
 | 
			
		||||
include_HEADERS = alpm_list.h alpm.h
 | 
			
		||||
 | 
			
		||||
AM_CPPFLAGS = \
 | 
			
		||||
	-imacros $(top_builddir)/config.h \
 | 
			
		||||
	-DSYSHOOKDIR=\"@datarootdir@/libalpm/hooks/\" \
 | 
			
		||||
	-DLOCALEDIR=\"@localedir@\"
 | 
			
		||||
 | 
			
		||||
AM_CFLAGS = -pedantic -D_GNU_SOURCE $(WARNING_CFLAGS)
 | 
			
		||||
 | 
			
		||||
if ENABLE_VISIBILITY_CC
 | 
			
		||||
if DARWIN
 | 
			
		||||
AM_CFLAGS += -fvisibility=hidden
 | 
			
		||||
else
 | 
			
		||||
AM_CFLAGS += -fvisibility=internal
 | 
			
		||||
endif
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
pkgconfigdir = $(libdir)/pkgconfig
 | 
			
		||||
pkgconfig_DATA = libalpm.pc
 | 
			
		||||
 | 
			
		||||
libalpm_la_SOURCES = \
 | 
			
		||||
	add.h add.c \
 | 
			
		||||
	alpm.h alpm.c \
 | 
			
		||||
	alpm_list.h alpm_list.c \
 | 
			
		||||
	backup.h backup.c \
 | 
			
		||||
	base64.h base64.c \
 | 
			
		||||
	be_local.c \
 | 
			
		||||
	be_package.c \
 | 
			
		||||
	be_sync.c \
 | 
			
		||||
	conflict.h conflict.c \
 | 
			
		||||
	db.h db.c \
 | 
			
		||||
	deps.h deps.c \
 | 
			
		||||
	diskspace.h diskspace.c \
 | 
			
		||||
	dload.h dload.c \
 | 
			
		||||
	error.c \
 | 
			
		||||
	filelist.h filelist.c \
 | 
			
		||||
	graph.h graph.c \
 | 
			
		||||
	group.h group.c \
 | 
			
		||||
	handle.h handle.c \
 | 
			
		||||
	hook.h hook.c \
 | 
			
		||||
	ini.h ini.c \
 | 
			
		||||
	libarchive-compat.h \
 | 
			
		||||
	log.h log.c \
 | 
			
		||||
	package.h package.c \
 | 
			
		||||
	pkghash.h pkghash.c \
 | 
			
		||||
	rawstr.c \
 | 
			
		||||
	remove.h remove.c \
 | 
			
		||||
	signing.c signing.h \
 | 
			
		||||
	sync.h sync.c \
 | 
			
		||||
	trans.h trans.c \
 | 
			
		||||
	util.h util.c \
 | 
			
		||||
	util-common.h util-common.c \
 | 
			
		||||
	version.c
 | 
			
		||||
 | 
			
		||||
libalpm_la_LDFLAGS = -no-undefined -version-info $(LIB_VERSION_INFO)
 | 
			
		||||
 | 
			
		||||
libalpm_la_CFLAGS = \
 | 
			
		||||
	$(AM_CFLAGS) \
 | 
			
		||||
	$(GPGME_CFLAGS) \
 | 
			
		||||
	$(LIBARCHIVE_CFLAGS) \
 | 
			
		||||
	$(LIBCURL_CFLAGS) \
 | 
			
		||||
	$(LIBSSL_CFLAGS) \
 | 
			
		||||
	$(NETTLE_CFLAGS)
 | 
			
		||||
 | 
			
		||||
libalpm_la_LIBADD = \
 | 
			
		||||
	$(LTLIBINTL) \
 | 
			
		||||
	$(GPGME_LIBS) \
 | 
			
		||||
	$(LIBARCHIVE_LIBS) \
 | 
			
		||||
	$(LIBCURL_LIBS) \
 | 
			
		||||
	$(LIBSSL_LIBS) \
 | 
			
		||||
	$(NETTLE_LIBS)
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  add.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -47,6 +47,7 @@
 | 
			
		||||
#include "remove.h"
 | 
			
		||||
#include "handle.h"
 | 
			
		||||
 | 
			
		||||
/** Add a package to the transaction. */
 | 
			
		||||
int SYMEXPORT alpm_add_pkg(alpm_handle_t *handle, alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	const char *pkgname, *pkgver;
 | 
			
		||||
@@ -119,7 +120,6 @@ static int perform_extraction(alpm_handle_t *handle, struct archive *archive,
 | 
			
		||||
	                          ARCHIVE_EXTRACT_PERM |
 | 
			
		||||
	                          ARCHIVE_EXTRACT_TIME |
 | 
			
		||||
	                          ARCHIVE_EXTRACT_UNLINK |
 | 
			
		||||
	                          ARCHIVE_EXTRACT_XATTR |
 | 
			
		||||
	                          ARCHIVE_EXTRACT_SECURE_SYMLINKS;
 | 
			
		||||
 | 
			
		||||
	archive_entry_set_pathname(entry, filename);
 | 
			
		||||
@@ -262,7 +262,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
 | 
			
		||||
					"filesystem: %o  package: %o\n"), filename, lsbuf.st_mode & mask,
 | 
			
		||||
					entrymode & mask);
 | 
			
		||||
			alpm_logaction(handle, ALPM_CALLER_PREFIX,
 | 
			
		||||
					"warning: directory permissions differ on %s, "
 | 
			
		||||
					"warning: directory permissions differ on %s\n"
 | 
			
		||||
					"filesystem: %o  package: %o\n", filename, lsbuf.st_mode & mask,
 | 
			
		||||
					entrymode & mask);
 | 
			
		||||
		}
 | 
			
		||||
@@ -277,7 +277,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
 | 
			
		||||
					"filesystem: %u:%u  package: %u:%u\n"), filename,
 | 
			
		||||
					lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
 | 
			
		||||
			alpm_logaction(handle, ALPM_CALLER_PREFIX,
 | 
			
		||||
					"warning: directory ownership differs on %s, "
 | 
			
		||||
					"warning: directory ownership differs on %s\n"
 | 
			
		||||
					"filesystem: %u:%u  package: %u:%u\n", filename,
 | 
			
		||||
					lsbuf.st_uid, lsbuf.st_gid, entryuid, entrygid);
 | 
			
		||||
		}
 | 
			
		||||
@@ -415,7 +415,7 @@ static int extract_single_file(alpm_handle_t *handle, struct archive *archive,
 | 
			
		||||
static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
		size_t pkg_current, size_t pkg_count)
 | 
			
		||||
{
 | 
			
		||||
	int ret = 0, errors = 0;
 | 
			
		||||
	int i, ret = 0, errors = 0;
 | 
			
		||||
	int is_upgrade = 0;
 | 
			
		||||
	alpm_pkg_t *oldpkg = NULL;
 | 
			
		||||
	alpm_db_t *db = handle->db_local;
 | 
			
		||||
@@ -484,7 +484,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
		/* set up fake remove transaction */
 | 
			
		||||
		if(_alpm_remove_single_package(handle, oldpkg, newpkg, 0, 0) == -1) {
 | 
			
		||||
			handle->pm_errno = ALPM_ERR_TRANS_ABORT;
 | 
			
		||||
			return -1;
 | 
			
		||||
			ret = -1;
 | 
			
		||||
			goto cleanup;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@@ -495,13 +496,15 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
				"error: could not create database entry %s-%s\n",
 | 
			
		||||
				newpkg->name, newpkg->version);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_DB_WRITE;
 | 
			
		||||
		return -1;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fd = _alpm_open_archive(db->handle, pkgfile, &buf,
 | 
			
		||||
			&archive, ALPM_ERR_PKG_OPEN);
 | 
			
		||||
	if(fd < 0) {
 | 
			
		||||
		return -1;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* save the cwd so we can restore it later */
 | 
			
		||||
@@ -519,7 +522,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
			close(cwdfd);
 | 
			
		||||
		}
 | 
			
		||||
		close(fd);
 | 
			
		||||
		return -1;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(trans->flags & ALPM_TRANS_FLAG_DBONLY) {
 | 
			
		||||
@@ -538,7 +542,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
		/* call PROGRESS once with 0 percent, as we sort-of skip that here */
 | 
			
		||||
		PROGRESS(handle, progress, newpkg->name, 0, pkg_count, pkg_current);
 | 
			
		||||
 | 
			
		||||
		while(archive_read_next_header(archive, &entry) == ARCHIVE_OK) {
 | 
			
		||||
		for(i = 0; archive_read_next_header(archive, &entry) == ARCHIVE_OK; i++) {
 | 
			
		||||
			int percent;
 | 
			
		||||
 | 
			
		||||
			if(newpkg->size != 0) {
 | 
			
		||||
@@ -603,7 +607,8 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
				"error: could not update database entry %s-%s\n",
 | 
			
		||||
				newpkg->name, newpkg->version);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_DB_WRITE;
 | 
			
		||||
		return -1;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(_alpm_db_add_pkgincache(db, newpkg) == -1) {
 | 
			
		||||
@@ -649,6 +654,7 @@ static int commit_single_pkg(alpm_handle_t *handle, alpm_pkg_t *newpkg,
 | 
			
		||||
	event.type = ALPM_EVENT_PACKAGE_OPERATION_DONE;
 | 
			
		||||
	EVENT(handle, &event);
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  add.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
@@ -32,6 +32,19 @@
 | 
			
		||||
#include "log.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
 | 
			
		||||
/** \addtogroup alpm_interface Interface Functions
 | 
			
		||||
 * @brief Functions to initialize and release libalpm
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** Initializes the library.
 | 
			
		||||
 * Creates handle, connects to database and creates lockfile.
 | 
			
		||||
 * This must be called before any other functions are called.
 | 
			
		||||
 * @param root the root path for all filesystem operations
 | 
			
		||||
 * @param dbpath the absolute path to the libalpm database
 | 
			
		||||
 * @param err an optional variable to hold any error return codes
 | 
			
		||||
 * @return a context handle on success, NULL on error, err will be set if provided
 | 
			
		||||
 */
 | 
			
		||||
alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
 | 
			
		||||
		alpm_errno_t *err)
 | 
			
		||||
{
 | 
			
		||||
@@ -70,13 +83,6 @@ alpm_handle_t SYMEXPORT *alpm_initialize(const char *root, const char *dbpath,
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	curl_global_init(CURL_GLOBAL_ALL);
 | 
			
		||||
	myhandle->curlm = curl_multi_init();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	myhandle->parallel_downloads = 1;
 | 
			
		||||
 | 
			
		||||
#ifdef ENABLE_NLS
 | 
			
		||||
	bindtextdomain("libalpm", LOCALEDIR);
 | 
			
		||||
#endif
 | 
			
		||||
@@ -93,23 +99,59 @@ cleanup:
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* check current state and free all resources including storage locks */
 | 
			
		||||
/** Release the library.
 | 
			
		||||
 * Disconnects from the database, removes handle and lockfile
 | 
			
		||||
 * This should be the last alpm call you make.
 | 
			
		||||
 * After this returns, handle should be considered invalid and cannot be reused
 | 
			
		||||
 * in any way.
 | 
			
		||||
 * @param myhandle the context handle
 | 
			
		||||
 * @return 0 on success, -1 on error
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_release(alpm_handle_t *myhandle)
 | 
			
		||||
{
 | 
			
		||||
	int ret = 0;
 | 
			
		||||
	alpm_db_t *db;
 | 
			
		||||
 | 
			
		||||
	CHECK_HANDLE(myhandle, return -1);
 | 
			
		||||
	ASSERT(myhandle->trans == NULL, RET_ERR(myhandle, ALPM_ERR_TRANS_NOT_NULL, -1));
 | 
			
		||||
 | 
			
		||||
	/* close local database */
 | 
			
		||||
	db = myhandle->db_local;
 | 
			
		||||
	if(db) {
 | 
			
		||||
		db->ops->unregister(db);
 | 
			
		||||
		myhandle->db_local = NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(alpm_unregister_all_syncdbs(myhandle) == -1) {
 | 
			
		||||
		ret = -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_handle_unlock(myhandle);
 | 
			
		||||
	_alpm_handle_free(myhandle);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	curl_global_cleanup();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
/** @defgroup alpm_misc Miscellaneous Functions
 | 
			
		||||
 * @brief Various libalpm functions
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** Get the version of library.
 | 
			
		||||
 * @return the library version, e.g. "6.0.4"
 | 
			
		||||
 * */
 | 
			
		||||
const char SYMEXPORT *alpm_version(void)
 | 
			
		||||
{
 | 
			
		||||
	return LIB_VERSION;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the capabilities of the library.
 | 
			
		||||
 * @return a bitmask of the capabilities
 | 
			
		||||
 * */
 | 
			
		||||
int SYMEXPORT alpm_capabilities(void)
 | 
			
		||||
{
 | 
			
		||||
	return 0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2647
									
								
								lib/libalpm/alpm.h
									
									
									
									
									
								
							
							
						
						
									
										2647
									
								
								lib/libalpm/alpm.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm_list.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -30,9 +30,25 @@
 | 
			
		||||
 | 
			
		||||
/* check exported library symbols with: nm -C -D <lib> */
 | 
			
		||||
#define SYMEXPORT __attribute__((visibility("default")))
 | 
			
		||||
#define SYMHIDDEN __attribute__((visibility("internal")))
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @addtogroup alpm_list List Functions
 | 
			
		||||
 * @brief Functions to manipulate alpm_list_t lists.
 | 
			
		||||
 *
 | 
			
		||||
 * These functions are designed to create, destroy, and modify lists of
 | 
			
		||||
 * type alpm_list_t. This is an internal list type used by libalpm that is
 | 
			
		||||
 * publicly exposed for use by frontends if desired.
 | 
			
		||||
 *
 | 
			
		||||
 * @{ */
 | 
			
		||||
 | 
			
		||||
/* Allocation */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Free a list, but not the contained data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to free
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT alpm_list_free(alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *it = list;
 | 
			
		||||
@@ -44,6 +60,12 @@ void SYMEXPORT alpm_list_free(alpm_list_t *list)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Free the internal data of a list structure.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to free
 | 
			
		||||
 * @param fn   a free function for the internal data
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *it = list;
 | 
			
		||||
@@ -61,12 +83,28 @@ void SYMEXPORT alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn)
 | 
			
		||||
 | 
			
		||||
/* Mutators */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Add a new item to the end of the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_add(alpm_list_t *list, void *data)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_append(&list, data);
 | 
			
		||||
	return list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Add a new item to the end of the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the newly added item
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *ptr;
 | 
			
		||||
@@ -93,6 +131,14 @@ alpm_list_t SYMEXPORT *alpm_list_append(alpm_list_t **list, void *data)
 | 
			
		||||
	return ptr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Duplicate and append a string to a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to append to
 | 
			
		||||
 * @param data the string to duplicate and append
 | 
			
		||||
 *
 | 
			
		||||
 * @return the newly added item
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *data)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *ret;
 | 
			
		||||
@@ -105,6 +151,15 @@ alpm_list_t SYMEXPORT *alpm_list_append_strdup(alpm_list_t **list, const char *d
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Add items to a list in sorted order.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 * @param fn   the comparison function to use to determine order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
	if(!fn || !list) {
 | 
			
		||||
@@ -147,6 +202,17 @@ alpm_list_t SYMEXPORT *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Join two lists.
 | 
			
		||||
 * The two lists must be independent. Do not free the original lists after
 | 
			
		||||
 * calling this function, as this is not a copy operation. The list pointers
 | 
			
		||||
 * passed in should be considered invalid after calling this function.
 | 
			
		||||
 *
 | 
			
		||||
 * @param first  the first list
 | 
			
		||||
 * @param second the second list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant joined list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *tmp;
 | 
			
		||||
@@ -169,6 +235,15 @@ alpm_list_t SYMEXPORT *alpm_list_join(alpm_list_t *first, alpm_list_t *second)
 | 
			
		||||
	return first;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Merge the two sorted sublists into one sorted list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param left  the first list
 | 
			
		||||
 * @param right the second list
 | 
			
		||||
 * @param fn    comparison function for determining merge order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
 | 
			
		||||
		alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
@@ -230,6 +305,15 @@ alpm_list_t SYMEXPORT *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right,
 | 
			
		||||
	return newlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sort a list of size `n` using mergesort algorithm.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to sort
 | 
			
		||||
 * @param n    the size of the list
 | 
			
		||||
 * @param fn   the comparison function for determining order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
 | 
			
		||||
		alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
@@ -255,6 +339,15 @@ alpm_list_t SYMEXPORT *alpm_list_msort(alpm_list_t *list, size_t n,
 | 
			
		||||
	return list;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove an item from the list.
 | 
			
		||||
 * item is not freed; this is the responsibility of the caller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param item the item to remove from the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
 | 
			
		||||
		alpm_list_t *item)
 | 
			
		||||
{
 | 
			
		||||
@@ -292,6 +385,17 @@ alpm_list_t SYMEXPORT *alpm_list_remove_item(alpm_list_t *haystack,
 | 
			
		||||
	return haystack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove an item from the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param needle   the data member of the item we're removing
 | 
			
		||||
 * @param fn       the comparison function for searching
 | 
			
		||||
 * @param data     output parameter containing data of the removed item
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
 | 
			
		||||
		const void *needle, alpm_list_fn_cmp fn, void **data)
 | 
			
		||||
{
 | 
			
		||||
@@ -326,6 +430,15 @@ alpm_list_t SYMEXPORT *alpm_list_remove(alpm_list_t *haystack,
 | 
			
		||||
	return haystack;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove a string from a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param needle   the data member of the item we're removing
 | 
			
		||||
 * @param data     output parameter containing data of the removed item
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
 | 
			
		||||
		const char *needle, char **data)
 | 
			
		||||
{
 | 
			
		||||
@@ -333,6 +446,15 @@ alpm_list_t SYMEXPORT *alpm_list_remove_str(alpm_list_t *haystack,
 | 
			
		||||
			(alpm_list_fn_cmp)strcmp, (void **)data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Create a new list without any duplicates.
 | 
			
		||||
 *
 | 
			
		||||
 * This does NOT copy data members.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a new list containing non-duplicate items
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *lp = list;
 | 
			
		||||
@@ -349,6 +471,13 @@ alpm_list_t SYMEXPORT *alpm_list_remove_dupes(const alpm_list_t *list)
 | 
			
		||||
	return newlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a string list, including data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *lp = list;
 | 
			
		||||
@@ -363,6 +492,13 @@ alpm_list_t SYMEXPORT *alpm_list_strdup(const alpm_list_t *list)
 | 
			
		||||
	return newlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list, without copying data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *lp = list;
 | 
			
		||||
@@ -377,6 +513,16 @@ alpm_list_t SYMEXPORT *alpm_list_copy(const alpm_list_t *list)
 | 
			
		||||
	return newlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list and copy the data.
 | 
			
		||||
 * Note that the data elements to be copied should not contain pointers
 | 
			
		||||
 * and should also be of constant size.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 * @param size the size of each data element
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list, data copied as well
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
 | 
			
		||||
		size_t size)
 | 
			
		||||
{
 | 
			
		||||
@@ -400,6 +546,13 @@ alpm_list_t SYMEXPORT *alpm_list_copy_data(const alpm_list_t *list,
 | 
			
		||||
	return newlist;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Create a new list in reverse order.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a new list in reverse order
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *lp;
 | 
			
		||||
@@ -417,7 +570,6 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
 | 
			
		||||
	while(lp) {
 | 
			
		||||
		if(alpm_list_append(&newlist, lp->data) == NULL) {
 | 
			
		||||
			alpm_list_free(newlist);
 | 
			
		||||
			list->prev = backup;
 | 
			
		||||
			return NULL;
 | 
			
		||||
		}
 | 
			
		||||
		lp = lp->prev;
 | 
			
		||||
@@ -428,6 +580,14 @@ alpm_list_t SYMEXPORT *alpm_list_reverse(alpm_list_t *list)
 | 
			
		||||
 | 
			
		||||
/* Accessors */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Return nth element from list (starting from 0).
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 * @param n    the index of the item to find (n < alpm_list_count(list) IS needed)
 | 
			
		||||
 *
 | 
			
		||||
 * @return an alpm_list_t node for index `n`
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *i = list;
 | 
			
		||||
@@ -437,6 +597,13 @@ alpm_list_t SYMEXPORT *alpm_list_nth(const alpm_list_t *list, size_t n)
 | 
			
		||||
	return (alpm_list_t *)i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the next element of a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param node the list node
 | 
			
		||||
 *
 | 
			
		||||
 * @return the next element, or NULL when no more elements exist
 | 
			
		||||
 */
 | 
			
		||||
inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
 | 
			
		||||
{
 | 
			
		||||
	if(node) {
 | 
			
		||||
@@ -446,6 +613,13 @@ inline alpm_list_t SYMEXPORT *alpm_list_next(const alpm_list_t *node)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the previous element of a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list head
 | 
			
		||||
 *
 | 
			
		||||
 * @return the previous element, or NULL when no previous element exist
 | 
			
		||||
 */
 | 
			
		||||
inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	if(list && list->prev->next) {
 | 
			
		||||
@@ -455,6 +629,13 @@ inline alpm_list_t SYMEXPORT *alpm_list_previous(const alpm_list_t *list)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the last item in the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the last element in the list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	if(list) {
 | 
			
		||||
@@ -466,6 +647,13 @@ alpm_list_t SYMEXPORT *alpm_list_last(const alpm_list_t *list)
 | 
			
		||||
 | 
			
		||||
/* Misc */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the number of items in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the number of list items
 | 
			
		||||
 */
 | 
			
		||||
size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
 | 
			
		||||
{
 | 
			
		||||
	size_t i = 0;
 | 
			
		||||
@@ -477,6 +665,15 @@ size_t SYMEXPORT alpm_list_count(const alpm_list_t *list)
 | 
			
		||||
	return i;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find an item in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the item to search
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 * @param fn       the comparison function for searching (!= NULL)
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT *alpm_list_find(const alpm_list_t *haystack, const void *needle,
 | 
			
		||||
		alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
@@ -496,12 +693,30 @@ static int ptr_cmp(const void *p, const void *q)
 | 
			
		||||
	return (p != q);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find an item in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * Search for the item whose data matches that of the `needle`.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the data to search for (== comparison)
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT *alpm_list_find_ptr(const alpm_list_t *haystack,
 | 
			
		||||
		const void *needle)
 | 
			
		||||
{
 | 
			
		||||
	return alpm_list_find(haystack, needle, ptr_cmp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find a string in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the string to search for
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
 | 
			
		||||
		const char *needle)
 | 
			
		||||
{
 | 
			
		||||
@@ -509,63 +724,20 @@ char SYMEXPORT *alpm_list_find_str(const alpm_list_t *haystack,
 | 
			
		||||
			(alpm_list_fn_cmp)strcmp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_list_cmp_unsorted(const alpm_list_t *left,
 | 
			
		||||
		const alpm_list_t *right, alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *l = left;
 | 
			
		||||
	const alpm_list_t *r = right;
 | 
			
		||||
	int *matched;
 | 
			
		||||
 | 
			
		||||
	/* short circuiting length comparison */
 | 
			
		||||
	while(l && r) {
 | 
			
		||||
		l = l->next;
 | 
			
		||||
		r = r->next;
 | 
			
		||||
	}
 | 
			
		||||
	if(l || r) {
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* faster comparison for if the lists happen to be in the same order */
 | 
			
		||||
	while(left && fn(left->data, right->data) == 0) {
 | 
			
		||||
		left = left->next;
 | 
			
		||||
		right = right->next;
 | 
			
		||||
	}
 | 
			
		||||
	if(!left) {
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	matched = calloc(alpm_list_count(right), sizeof(int));
 | 
			
		||||
	if(matched == NULL) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(l = left; l; l = l->next) {
 | 
			
		||||
		int found = 0;
 | 
			
		||||
		int n = 0;
 | 
			
		||||
 | 
			
		||||
		for(r = right; r; r = r->next, n++) {
 | 
			
		||||
			/* make sure we don't match the same value twice */
 | 
			
		||||
			if(matched[n]) {
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if(fn(l->data, r->data) == 0) {
 | 
			
		||||
				found = 1;
 | 
			
		||||
				matched[n] = 1;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(!found) {
 | 
			
		||||
			free(matched);
 | 
			
		||||
			return 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	free(matched);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find the differences between list `left` and list `right`
 | 
			
		||||
 *
 | 
			
		||||
 * The two lists must be sorted. Items only in list `left` are added to the
 | 
			
		||||
 * `onlyleft` list. Items only in list `right` are added to the `onlyright`
 | 
			
		||||
 * list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param left      the first list
 | 
			
		||||
 * @param right     the second list
 | 
			
		||||
 * @param fn        the comparison function
 | 
			
		||||
 * @param onlyleft  pointer to the first result list
 | 
			
		||||
 * @param onlyright pointer to the second result list
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
 | 
			
		||||
		const alpm_list_t *right, alpm_list_fn_cmp fn,
 | 
			
		||||
		alpm_list_t **onlyleft, alpm_list_t **onlyright)
 | 
			
		||||
@@ -610,6 +782,15 @@ void SYMEXPORT alpm_list_diff_sorted(const alpm_list_t *left,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find the items in list `lhs` that are not present in list `rhs`.
 | 
			
		||||
 *
 | 
			
		||||
 * @param lhs the first list
 | 
			
		||||
 * @param rhs the second list
 | 
			
		||||
 * @param fn  the comparison function
 | 
			
		||||
 *
 | 
			
		||||
 * @return a list containing all items in `lhs` not present in `rhs`
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
 | 
			
		||||
		const alpm_list_t *rhs, alpm_list_fn_cmp fn)
 | 
			
		||||
{
 | 
			
		||||
@@ -628,6 +809,17 @@ alpm_list_t SYMEXPORT *alpm_list_diff(const alpm_list_t *lhs,
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list and data into a standard C array of fixed length.
 | 
			
		||||
 * Note that the data elements are shallow copied so any contained pointers
 | 
			
		||||
 * will point to the original data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 * @param n    the size of the list
 | 
			
		||||
 * @param size the size of each data element
 | 
			
		||||
 *
 | 
			
		||||
 * @return an array version of the original list, data copied as well
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
 | 
			
		||||
		size_t size)
 | 
			
		||||
{
 | 
			
		||||
@@ -648,3 +840,5 @@ void SYMEXPORT *alpm_list_to_array(const alpm_list_t *list, size_t n,
 | 
			
		||||
	}
 | 
			
		||||
	return array;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  alpm_list.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -17,8 +17,6 @@
 | 
			
		||||
 *  You should have received a copy of the GNU General Public License
 | 
			
		||||
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#ifndef ALPM_LIST_H
 | 
			
		||||
#define ALPM_LIST_H
 | 
			
		||||
 | 
			
		||||
@@ -33,362 +31,63 @@ extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @ingroup libalpm
 | 
			
		||||
 * @addtogroup libalpm_list libalpm_list(3)
 | 
			
		||||
 * @brief Functions to manipulate alpm_list_t lists.
 | 
			
		||||
 *
 | 
			
		||||
 * These functions are designed to create, destroy, and modify lists of
 | 
			
		||||
 * type alpm_list_t. This is an internal list type used by libalpm that is
 | 
			
		||||
 * publicly exposed for use by frontends if desired.
 | 
			
		||||
 * @brief Linked list type used by libalpm.
 | 
			
		||||
 *
 | 
			
		||||
 * It is exposed so front ends can use it to prevent the need to reimplement
 | 
			
		||||
 * lists of their own; however, it is not required that the front end uses
 | 
			
		||||
 * it.
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** A doubly linked list */
 | 
			
		||||
typedef struct _alpm_list_t {
 | 
			
		||||
typedef struct __alpm_list_t {
 | 
			
		||||
	/** data held by the list node */
 | 
			
		||||
	void *data;
 | 
			
		||||
	/** pointer to the previous node */
 | 
			
		||||
	struct _alpm_list_t *prev;
 | 
			
		||||
	struct __alpm_list_t *prev;
 | 
			
		||||
	/** pointer to the next node */
 | 
			
		||||
	struct _alpm_list_t *next;
 | 
			
		||||
	struct __alpm_list_t *next;
 | 
			
		||||
} alpm_list_t;
 | 
			
		||||
 | 
			
		||||
/** Frees a list and its contents */
 | 
			
		||||
#define FREELIST(p) do { alpm_list_free_inner(p, free); alpm_list_free(p); p = NULL; } while(0)
 | 
			
		||||
 | 
			
		||||
/** item deallocation callback.
 | 
			
		||||
 * @param item the item to free
 | 
			
		||||
 */
 | 
			
		||||
typedef void (*alpm_list_fn_free)(void * item);
 | 
			
		||||
 | 
			
		||||
/** item comparison callback */
 | 
			
		||||
typedef int (*alpm_list_fn_cmp)(const void *, const void *);
 | 
			
		||||
typedef void (*alpm_list_fn_free)(void *); /* item deallocation callback */
 | 
			
		||||
typedef int (*alpm_list_fn_cmp)(const void *, const void *); /* item comparison callback */
 | 
			
		||||
 | 
			
		||||
/* allocation */
 | 
			
		||||
 | 
			
		||||
/** Free a list, but not the contained data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to free
 | 
			
		||||
 */
 | 
			
		||||
void alpm_list_free(alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/** Free the internal data of a list structure but not the list itself.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to free
 | 
			
		||||
 * @param fn a free function for the internal data
 | 
			
		||||
 */
 | 
			
		||||
void alpm_list_free_inner(alpm_list_t *list, alpm_list_fn_free fn);
 | 
			
		||||
 | 
			
		||||
/* item mutators */
 | 
			
		||||
 | 
			
		||||
/** Add a new item to the end of the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_add(alpm_list_t *list, void *data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Add a new item to the end of the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the newly added item
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_append(alpm_list_t **list, void *data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Duplicate and append a string to a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to append to
 | 
			
		||||
 * @param data the string to duplicate and append
 | 
			
		||||
 *
 | 
			
		||||
 * @return the newly added item
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_append_strdup(alpm_list_t **list, const char *data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Add items to a list in sorted order.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to add to
 | 
			
		||||
 * @param data the new item to be added to the list
 | 
			
		||||
 * @param fn   the comparison function to use to determine order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_add_sorted(alpm_list_t *list, void *data, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Join two lists.
 | 
			
		||||
 * The two lists must be independent. Do not free the original lists after
 | 
			
		||||
 * calling this function, as this is not a copy operation. The list pointers
 | 
			
		||||
 * passed in should be considered invalid after calling this function.
 | 
			
		||||
 *
 | 
			
		||||
 * @param first  the first list
 | 
			
		||||
 * @param second the second list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant joined list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_join(alpm_list_t *first, alpm_list_t *second);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Merge the two sorted sublists into one sorted list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param left  the first list
 | 
			
		||||
 * @param right the second list
 | 
			
		||||
 * @param fn    comparison function for determining merge order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_mmerge(alpm_list_t *left, alpm_list_t *right, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Sort a list of size `n` using mergesort algorithm.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to sort
 | 
			
		||||
 * @param n    the size of the list
 | 
			
		||||
 * @param fn   the comparison function for determining order
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_msort(alpm_list_t *list, size_t n, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove an item from the list.
 | 
			
		||||
 * item is not freed; this is the responsibility of the caller.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param item the item to remove from the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_remove_item(alpm_list_t *haystack, alpm_list_t *item);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove an item from the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param needle   the data member of the item we're removing
 | 
			
		||||
 * @param fn       the comparison function for searching
 | 
			
		||||
 * @param data     output parameter containing data of the removed item
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_remove(alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn, void **data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Remove a string from a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param haystack the list to remove the item from
 | 
			
		||||
 * @param needle   the data member of the item we're removing
 | 
			
		||||
 * @param data     output parameter containing data of the removed item
 | 
			
		||||
 *
 | 
			
		||||
 * @return the resultant list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_remove_str(alpm_list_t *haystack, const char *needle, char **data);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Create a new list without any duplicates.
 | 
			
		||||
 *
 | 
			
		||||
 * This does NOT copy data members.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a new list containing non-duplicate items
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_remove_dupes(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a string list, including data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_strdup(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list, without copying data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_copy(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list and copy the data.
 | 
			
		||||
 * Note that the data elements to be copied should not contain pointers
 | 
			
		||||
 * and should also be of constant size.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 * @param size the size of each data element
 | 
			
		||||
 *
 | 
			
		||||
 * @return a copy of the original list, data copied as well
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_copy_data(const alpm_list_t *list, size_t size);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Create a new list in reverse order.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 *
 | 
			
		||||
 * @return a new list in reverse order
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_reverse(alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/* item accessors */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Return nth element from list (starting from 0).
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 * @param n    the index of the item to find (n < alpm_list_count(list) IS needed)
 | 
			
		||||
 *
 | 
			
		||||
 * @return an alpm_list_t node for index `n`
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_nth(const alpm_list_t *list, size_t n);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the next element of a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list node
 | 
			
		||||
 *
 | 
			
		||||
 * @return the next element, or NULL when no more elements exist
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_next(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the previous element of a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list head
 | 
			
		||||
 *
 | 
			
		||||
 * @return the previous element, or NULL when no previous element exist
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_previous(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the last item in the list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the last element in the list
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_last(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/* misc */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Get the number of items in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return the number of list items
 | 
			
		||||
 */
 | 
			
		||||
size_t alpm_list_count(const alpm_list_t *list);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find an item in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the item to search
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 * @param fn       the comparison function for searching (!= NULL)
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
void *alpm_list_find(const alpm_list_t *haystack, const void *needle, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find an item in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * Search for the item whose data matches that of the `needle`.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the data to search for (== comparison)
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
void *alpm_list_find_ptr(const alpm_list_t *haystack, const void *needle);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find a string in a list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param needle   the string to search for
 | 
			
		||||
 * @param haystack the list
 | 
			
		||||
 *
 | 
			
		||||
 * @return `needle` if found, NULL otherwise
 | 
			
		||||
 */
 | 
			
		||||
char *alpm_list_find_str(const alpm_list_t *haystack, const char *needle);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Check if two lists contain the same data, ignoring order.
 | 
			
		||||
 *
 | 
			
		||||
 * Lists are considered equal if they both contain the same data regardless
 | 
			
		||||
 * of order.
 | 
			
		||||
 *
 | 
			
		||||
 * @param left      the first list
 | 
			
		||||
 * @param right     the second list
 | 
			
		||||
 * @param fn        the comparison function
 | 
			
		||||
 *
 | 
			
		||||
 * @return 1 if the lists are equal, 0 if not equal, -1 on error.
 | 
			
		||||
 */
 | 
			
		||||
int alpm_list_cmp_unsorted(const alpm_list_t *left,
 | 
			
		||||
		const alpm_list_t *right, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find the differences between list `left` and list `right`
 | 
			
		||||
 *
 | 
			
		||||
 * The two lists must be sorted. Items only in list `left` are added to the
 | 
			
		||||
 * `onlyleft` list. Items only in list `right` are added to the `onlyright`
 | 
			
		||||
 * list.
 | 
			
		||||
 *
 | 
			
		||||
 * @param left      the first list
 | 
			
		||||
 * @param right     the second list
 | 
			
		||||
 * @param fn        the comparison function
 | 
			
		||||
 * @param onlyleft  pointer to the first result list
 | 
			
		||||
 * @param onlyright pointer to the second result list
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
 | 
			
		||||
void alpm_list_diff_sorted(const alpm_list_t *left, const alpm_list_t *right,
 | 
			
		||||
		alpm_list_fn_cmp fn, alpm_list_t **onlyleft, alpm_list_t **onlyright);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Find the items in list `lhs` that are not present in list `rhs`.
 | 
			
		||||
 *
 | 
			
		||||
 * @param lhs the first list
 | 
			
		||||
 * @param rhs the second list
 | 
			
		||||
 * @param fn  the comparison function
 | 
			
		||||
 *
 | 
			
		||||
 * @return a list containing all items in `lhs` not present in `rhs`
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
alpm_list_t *alpm_list_diff(const alpm_list_t *lhs, const alpm_list_t *rhs, alpm_list_fn_cmp fn);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Copy a list and data into a standard C array of fixed length.
 | 
			
		||||
 * Note that the data elements are shallow copied so any contained pointers
 | 
			
		||||
 * will point to the original data.
 | 
			
		||||
 *
 | 
			
		||||
 * @param list the list to copy
 | 
			
		||||
 * @param n    the size of the list
 | 
			
		||||
 * @param size the size of each data element
 | 
			
		||||
 *
 | 
			
		||||
 * @return an array version of the original list, data copied as well
 | 
			
		||||
 */
 | 
			
		||||
void *alpm_list_to_array(const alpm_list_t *list, size_t n, size_t size);
 | 
			
		||||
 | 
			
		||||
/* End of alpm_list */
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  backup.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  backup.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  be_local.c : backend for the local database
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -195,12 +195,6 @@ static alpm_list_t *_cache_get_backup(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->backup;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static alpm_list_t *_cache_get_xdata(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	LAZY_LOAD(INFRQ_DESC);
 | 
			
		||||
	return pkg->xdata;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Open a package changelog for reading. Similar to fopen in functionality,
 | 
			
		||||
 * except that the returned 'file stream' is from the database.
 | 
			
		||||
@@ -250,6 +244,7 @@ static int _cache_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
 | 
			
		||||
 */
 | 
			
		||||
static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	int r;
 | 
			
		||||
	struct archive *mtree;
 | 
			
		||||
 | 
			
		||||
	alpm_db_t *db = alpm_pkg_get_db(pkg);
 | 
			
		||||
@@ -261,17 +256,19 @@ static struct archive *_cache_mtree_open(alpm_pkg_t *pkg)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if((mtree = archive_read_new()) == NULL) {
 | 
			
		||||
		GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_archive_read_support_filter_all(mtree);
 | 
			
		||||
	archive_read_support_format_mtree(mtree);
 | 
			
		||||
 | 
			
		||||
	if(_alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE)) {
 | 
			
		||||
	if((r = _alpm_archive_read_open_file(mtree, mtfile, ALPM_BUFFER_SIZE))) {
 | 
			
		||||
		_alpm_log(pkg->handle, ALPM_LOG_ERROR, _("error while reading file %s: %s\n"),
 | 
			
		||||
					mtfile, archive_error_string(mtree));
 | 
			
		||||
		pkg->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		_alpm_archive_read_free(mtree);
 | 
			
		||||
		GOTO_ERR(pkg->handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	free(mtfile);
 | 
			
		||||
@@ -287,26 +284,12 @@ error:
 | 
			
		||||
 * @param pkg the package that the mtree file is being read from
 | 
			
		||||
 * @param archive the archive structure reading from the mtree file
 | 
			
		||||
 * @param entry an archive_entry to store the entry header information
 | 
			
		||||
 * @return 0 on success, 1 if end of archive is reached, -1 otherwise.
 | 
			
		||||
 * @return 0 if end of archive is reached, non-zero otherwise.
 | 
			
		||||
 */
 | 
			
		||||
static int _cache_mtree_next(const alpm_pkg_t UNUSED *pkg,
 | 
			
		||||
		struct archive *mtree, struct archive_entry **entry)
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
	ret = archive_read_next_header(mtree, entry);
 | 
			
		||||
 | 
			
		||||
	switch(ret) {
 | 
			
		||||
		case ARCHIVE_OK:
 | 
			
		||||
			return 0;
 | 
			
		||||
			break;
 | 
			
		||||
		case ARCHIVE_EOF:
 | 
			
		||||
			return 1;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return -1;
 | 
			
		||||
	return archive_read_next_header(mtree, entry);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -331,7 +314,7 @@ static int _cache_force_load(alpm_pkg_t *pkg)
 | 
			
		||||
 * lazy accessor methods that handle any backend loading and caching
 | 
			
		||||
 * logic.
 | 
			
		||||
 */
 | 
			
		||||
static const struct pkg_operations local_pkg_ops = {
 | 
			
		||||
static struct pkg_operations local_pkg_ops = {
 | 
			
		||||
	.get_base = _cache_get_base,
 | 
			
		||||
	.get_desc = _cache_get_desc,
 | 
			
		||||
	.get_url = _cache_get_url,
 | 
			
		||||
@@ -354,7 +337,6 @@ static const struct pkg_operations local_pkg_ops = {
 | 
			
		||||
	.get_replaces = _cache_get_replaces,
 | 
			
		||||
	.get_files = _cache_get_files,
 | 
			
		||||
	.get_backup = _cache_get_backup,
 | 
			
		||||
	.get_xdata = _cache_get_xdata,
 | 
			
		||||
 | 
			
		||||
	.changelog_open = _cache_changelog_open,
 | 
			
		||||
	.changelog_read = _cache_changelog_read,
 | 
			
		||||
@@ -630,10 +612,6 @@ static int local_db_populate(alpm_db_t *db)
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* treat local metadata errors as warning-only,
 | 
			
		||||
		 * they are already installed and otherwise they can't be operated on */
 | 
			
		||||
		_alpm_pkg_check_meta(pkg);
 | 
			
		||||
 | 
			
		||||
		/* add to the collection */
 | 
			
		||||
		_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
 | 
			
		||||
				pkg->name, db->treename);
 | 
			
		||||
@@ -654,17 +632,6 @@ static int local_db_populate(alpm_db_t *db)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static alpm_pkgreason_t _read_pkgreason(alpm_handle_t *handle, const char *pkgname, const char *line) {
 | 
			
		||||
	if(strcmp(line, "0") == 0) {
 | 
			
		||||
		return ALPM_PKG_REASON_EXPLICIT;
 | 
			
		||||
	} else if(strcmp(line, "1") == 0) {
 | 
			
		||||
		return ALPM_PKG_REASON_DEPEND;
 | 
			
		||||
	} else {
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_ERROR, _("unknown install reason for package %s: %s\n"), pkgname, line);
 | 
			
		||||
		return ALPM_PKG_REASON_UNKNOWN;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Note: the return value must be freed by the caller */
 | 
			
		||||
char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
 | 
			
		||||
		const char *filename)
 | 
			
		||||
@@ -713,7 +680,7 @@ char *_alpm_local_db_pkgpath(alpm_db_t *db, alpm_pkg_t *info,
 | 
			
		||||
static int local_db_read(alpm_pkg_t *info, int inforeq)
 | 
			
		||||
{
 | 
			
		||||
	FILE *fp = NULL;
 | 
			
		||||
	char line[1024] = {0};
 | 
			
		||||
	char line[1024];
 | 
			
		||||
	alpm_db_t *db = info->origin_data.db;
 | 
			
		||||
 | 
			
		||||
	/* bitmask logic here:
 | 
			
		||||
@@ -736,6 +703,9 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
 | 
			
		||||
			"loading package data for %s : level=0x%x\n",
 | 
			
		||||
			info->name, inforeq);
 | 
			
		||||
 | 
			
		||||
	/* clear out 'line', to be certain - and to make valgrind happy */
 | 
			
		||||
	memset(line, 0, sizeof(line));
 | 
			
		||||
 | 
			
		||||
	/* DESC */
 | 
			
		||||
	if(inforeq & INFRQ_DESC && !(info->infolevel & INFRQ_DESC)) {
 | 
			
		||||
		char *path = _alpm_local_db_pkgpath(db, info, "desc");
 | 
			
		||||
@@ -787,7 +757,7 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
 | 
			
		||||
				READ_AND_STORE(info->packager);
 | 
			
		||||
			} else if(strcmp(line, "%REASON%") == 0) {
 | 
			
		||||
				READ_NEXT();
 | 
			
		||||
				info->reason = _read_pkgreason(db->handle, info->name, line);
 | 
			
		||||
				info->reason = (alpm_pkgreason_t)atoi(line);
 | 
			
		||||
			} else if(strcmp(line, "%VALIDATION%") == 0) {
 | 
			
		||||
				alpm_list_t *i, *v = NULL;
 | 
			
		||||
				READ_AND_STORE_ALL(v);
 | 
			
		||||
@@ -825,23 +795,6 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
 | 
			
		||||
				READ_AND_SPLITDEP(info->conflicts);
 | 
			
		||||
			} else if(strcmp(line, "%PROVIDES%") == 0) {
 | 
			
		||||
				READ_AND_SPLITDEP(info->provides);
 | 
			
		||||
			} else if(strcmp(line, "%XDATA%") == 0) {
 | 
			
		||||
				alpm_list_t *i, *lines = NULL;
 | 
			
		||||
				READ_AND_STORE_ALL(lines);
 | 
			
		||||
				for(i = lines; i; i = i->next) {
 | 
			
		||||
					alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
 | 
			
		||||
					if(pd == NULL || !alpm_list_append(&info->xdata, pd)) {
 | 
			
		||||
						_alpm_pkg_xdata_free(pd);
 | 
			
		||||
						FREELIST(lines);
 | 
			
		||||
						goto error;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				FREELIST(lines);
 | 
			
		||||
			} else {
 | 
			
		||||
				_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in local database\n"), info->name, line);
 | 
			
		||||
				alpm_list_t *lines = NULL;
 | 
			
		||||
				READ_AND_STORE_ALL(lines);
 | 
			
		||||
				FREELIST(lines);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
@@ -879,7 +832,12 @@ static int local_db_read(alpm_pkg_t *info, int inforeq)
 | 
			
		||||
				}
 | 
			
		||||
				/* attempt to hand back any memory we don't need */
 | 
			
		||||
				if(files_count > 0) {
 | 
			
		||||
					REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
 | 
			
		||||
					alpm_file_t *newfiles;
 | 
			
		||||
 | 
			
		||||
					newfiles = realloc(files, sizeof(alpm_file_t) * files_count);
 | 
			
		||||
					if(newfiles != NULL) {
 | 
			
		||||
						files = newfiles;
 | 
			
		||||
					}
 | 
			
		||||
				} else {
 | 
			
		||||
					FREE(files);
 | 
			
		||||
				}
 | 
			
		||||
@@ -1078,15 +1036,6 @@ int _alpm_local_db_write(alpm_db_t *db, alpm_pkg_t *info, int inforeq)
 | 
			
		||||
		write_deps(fp, "%CONFLICTS%", info->conflicts);
 | 
			
		||||
		write_deps(fp, "%PROVIDES%", info->provides);
 | 
			
		||||
 | 
			
		||||
		if(info->xdata) {
 | 
			
		||||
			fputs("%XDATA%\n", fp);
 | 
			
		||||
			for(lp = info->xdata; lp; lp = lp->next) {
 | 
			
		||||
				alpm_pkg_xdata_t *pd = lp->data;
 | 
			
		||||
				fprintf(fp, "%s=%s\n", pd->name, pd->value);
 | 
			
		||||
			}
 | 
			
		||||
			fputc('\n', fp);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		fclose(fp);
 | 
			
		||||
		fp = NULL;
 | 
			
		||||
	}
 | 
			
		||||
@@ -1205,7 +1154,7 @@ int SYMEXPORT alpm_pkg_set_reason(alpm_pkg_t *pkg, alpm_pkgreason_t reason)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct db_operations local_db_ops = {
 | 
			
		||||
struct db_operations local_db_ops = {
 | 
			
		||||
	.validate         = local_db_validate,
 | 
			
		||||
	.populate         = local_db_populate,
 | 
			
		||||
	.unregister       = _alpm_db_unregister,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  be_package.c : backend for packages
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -134,10 +134,11 @@ static int _package_changelog_close(const alpm_pkg_t UNUSED *pkg, void *fp)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Package file operations struct accessor. We implement this as a method
 | 
			
		||||
 * because we want to reuse the majority of the default_pkg_ops struct and
 | 
			
		||||
 * add only a few operations of our own on top.
 | 
			
		||||
 * rather than a static struct as in be_files because we want to reuse the
 | 
			
		||||
 * majority of the default_pkg_ops struct and add only a few operations of
 | 
			
		||||
 * our own on top.
 | 
			
		||||
 */
 | 
			
		||||
static const struct pkg_operations *get_file_pkg_ops(void)
 | 
			
		||||
static struct pkg_operations *get_file_pkg_ops(void)
 | 
			
		||||
{
 | 
			
		||||
	static struct pkg_operations file_pkg_ops;
 | 
			
		||||
	static int file_pkg_ops_initialized = 0;
 | 
			
		||||
@@ -163,8 +164,9 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
 | 
			
		||||
	char *ptr = NULL;
 | 
			
		||||
	char *key = NULL;
 | 
			
		||||
	int ret, linenum = 0;
 | 
			
		||||
	struct archive_read_buffer buf = {0};
 | 
			
		||||
	struct archive_read_buffer buf;
 | 
			
		||||
 | 
			
		||||
	memset(&buf, 0, sizeof(buf));
 | 
			
		||||
	/* 512K for a line length seems reasonable */
 | 
			
		||||
	buf.max_line_size = 512 * 1024;
 | 
			
		||||
 | 
			
		||||
@@ -200,15 +202,11 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
 | 
			
		||||
			} else if(strcmp(key, "pkgdesc") == 0) {
 | 
			
		||||
				STRDUP(newpkg->desc, ptr, return -1);
 | 
			
		||||
			} else if(strcmp(key, "group") == 0) {
 | 
			
		||||
				char *tmp = NULL;
 | 
			
		||||
				STRDUP(tmp, ptr, return -1);
 | 
			
		||||
				newpkg->groups = alpm_list_add(newpkg->groups, tmp);
 | 
			
		||||
				newpkg->groups = alpm_list_add(newpkg->groups, strdup(ptr));
 | 
			
		||||
			} else if(strcmp(key, "url") == 0) {
 | 
			
		||||
				STRDUP(newpkg->url, ptr, return -1);
 | 
			
		||||
			} else if(strcmp(key, "license") == 0) {
 | 
			
		||||
				char *tmp = NULL;
 | 
			
		||||
				STRDUP(tmp, ptr, return -1);
 | 
			
		||||
				newpkg->licenses = alpm_list_add(newpkg->licenses, tmp);
 | 
			
		||||
				newpkg->licenses = alpm_list_add(newpkg->licenses, strdup(ptr));
 | 
			
		||||
			} else if(strcmp(key, "builddate") == 0) {
 | 
			
		||||
				newpkg->builddate = _alpm_parsedate(ptr);
 | 
			
		||||
			} else if(strcmp(key, "packager") == 0) {
 | 
			
		||||
@@ -244,17 +242,13 @@ static int parse_descfile(alpm_handle_t *handle, struct archive *a, alpm_pkg_t *
 | 
			
		||||
				CALLOC(backup, 1, sizeof(alpm_backup_t), return -1);
 | 
			
		||||
				STRDUP(backup->name, ptr, FREE(backup); return -1);
 | 
			
		||||
				newpkg->backup = alpm_list_add(newpkg->backup, backup);
 | 
			
		||||
			} else if(strcmp(key, "xdata") == 0) {
 | 
			
		||||
				alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(ptr);
 | 
			
		||||
				if(pd == NULL || !alpm_list_append(&newpkg->xdata, pd)) {
 | 
			
		||||
					_alpm_pkg_xdata_free(pd);
 | 
			
		||||
					return -1;
 | 
			
		||||
				}
 | 
			
		||||
			} else if(strcmp(key, "force") == 0) {
 | 
			
		||||
				/* deprecated, skip it */
 | 
			
		||||
			} else if(strcmp(key, "makepkgopt") == 0) {
 | 
			
		||||
				/* not used atm */
 | 
			
		||||
			} else {
 | 
			
		||||
				const char *pkgname = newpkg->name ? newpkg->name : "error";
 | 
			
		||||
				_alpm_log(handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in package description\n"), pkgname, key);
 | 
			
		||||
				_alpm_log(handle, ALPM_LOG_DEBUG, "%s: unknown key '%s' in description file line %d\n",
 | 
			
		||||
									pkgname, key, linenum);
 | 
			
		||||
									newpkg->name ? newpkg->name : "error", key, linenum);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -314,7 +308,7 @@ int _alpm_pkg_validate_internal(alpm_handle_t *handle,
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(syncpkg && (!has_sig || !syncpkg->base64_sig)) {
 | 
			
		||||
	if(syncpkg && !has_sig) {
 | 
			
		||||
		if(syncpkg->md5sum && !syncpkg->sha256sum) {
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_DEBUG, "md5sum: %s\n", syncpkg->md5sum);
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_DEBUG, "checking md5sum for %s\n", pkgfile);
 | 
			
		||||
@@ -454,15 +448,18 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
 | 
			
		||||
	char *mtree_data = NULL;
 | 
			
		||||
	struct archive *mtree;
 | 
			
		||||
	struct archive_entry *mtree_entry = NULL;
 | 
			
		||||
	alpm_filelist_t filelist = {0};
 | 
			
		||||
	alpm_filelist_t filelist;
 | 
			
		||||
 | 
			
		||||
	_alpm_log(handle, ALPM_LOG_DEBUG,
 | 
			
		||||
			"found mtree for package %s, getting file list\n", pkg->filename);
 | 
			
		||||
 | 
			
		||||
	memset(&filelist, 0, sizeof(alpm_filelist_t));
 | 
			
		||||
 | 
			
		||||
	/* create a new archive to parse the mtree and load it from archive into memory */
 | 
			
		||||
	/* TODO: split this into a function */
 | 
			
		||||
	if((mtree = archive_read_new()) == NULL) {
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_archive_read_support_filter_all(mtree);
 | 
			
		||||
@@ -481,7 +478,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
 | 
			
		||||
		if(size < 0) {
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading package %s: %s\n"),
 | 
			
		||||
					pkg->filename, archive_error_string(archive));
 | 
			
		||||
			GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
			handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
			goto error;
 | 
			
		||||
		}
 | 
			
		||||
		if(size == 0) {
 | 
			
		||||
			break;
 | 
			
		||||
@@ -494,7 +492,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_DEBUG,
 | 
			
		||||
				_("error while reading mtree of package %s: %s\n"),
 | 
			
		||||
				pkg->filename, archive_error_string(mtree));
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while((ret = archive_read_next_header(mtree, &mtree_entry)) == ARCHIVE_OK) {
 | 
			
		||||
@@ -517,7 +516,8 @@ static int build_filelist_from_mtree(alpm_handle_t *handle, alpm_pkg_t *pkg, str
 | 
			
		||||
	if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_DEBUG, _("error while reading mtree of package %s: %s\n"),
 | 
			
		||||
				pkg->filename, archive_error_string(mtree));
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* throw away any files we loaded directly from the archive */
 | 
			
		||||
@@ -582,9 +582,11 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
 | 
			
		||||
	newpkg = _alpm_pkg_new();
 | 
			
		||||
	if(newpkg == NULL) {
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_MEMORY, error);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_MEMORY;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
	STRDUP(newpkg->filename, pkgfile, GOTO_ERR(handle, ALPM_ERR_MEMORY, error));
 | 
			
		||||
	STRDUP(newpkg->filename, pkgfile,
 | 
			
		||||
			handle->pm_errno = ALPM_ERR_MEMORY; goto error);
 | 
			
		||||
	newpkg->size = st.st_size;
 | 
			
		||||
 | 
			
		||||
	_alpm_log(handle, ALPM_LOG_DEBUG, "starting package load for %s\n", pkgfile);
 | 
			
		||||
@@ -634,7 +636,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
		if(archive_read_data_skip(archive)) {
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
 | 
			
		||||
					pkgfile, archive_error_string(archive));
 | 
			
		||||
			GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
			handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
			goto error;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* if we are not doing a full read, see if we have all we need */
 | 
			
		||||
@@ -646,7 +649,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
	if(ret != ARCHIVE_EOF && ret != ARCHIVE_OK) { /* An error occurred */
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_ERROR, _("error while reading package %s: %s\n"),
 | 
			
		||||
				pkgfile, archive_error_string(archive));
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_LIBARCHIVE, error);
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		goto error;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(!config) {
 | 
			
		||||
@@ -654,9 +658,12 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
		goto pkg_invalid;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_archive_read_free(archive);
 | 
			
		||||
	close(fd);
 | 
			
		||||
 | 
			
		||||
	/* internal fields for package struct */
 | 
			
		||||
	newpkg->origin = ALPM_PKG_FROM_FILE;
 | 
			
		||||
	STRDUP(newpkg->origin_data.file, pkgfile, goto error);
 | 
			
		||||
	newpkg->origin_data.file = strdup(pkgfile);
 | 
			
		||||
	newpkg->ops = get_file_pkg_ops();
 | 
			
		||||
	newpkg->handle = handle;
 | 
			
		||||
	newpkg->infolevel = INFRQ_BASE | INFRQ_DESC | INFRQ_SCRIPTLET;
 | 
			
		||||
@@ -665,7 +672,8 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
	if(full) {
 | 
			
		||||
		if(newpkg->files.files) {
 | 
			
		||||
			/* attempt to hand back any memory we don't need */
 | 
			
		||||
			REALLOC(newpkg->files.files, sizeof(alpm_file_t) * newpkg->files.count, (void)0);
 | 
			
		||||
			newpkg->files.files = realloc(newpkg->files.files,
 | 
			
		||||
					sizeof(alpm_file_t) * newpkg->files.count);
 | 
			
		||||
			/* "checking for conflicts" requires a sorted list, ensure that here */
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_DEBUG,
 | 
			
		||||
					"sorting package filelist for %s\n", pkgfile);
 | 
			
		||||
@@ -675,12 +683,6 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
		newpkg->infolevel |= INFRQ_FILES;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(_alpm_pkg_check_meta(newpkg) != 0) {
 | 
			
		||||
		goto pkg_invalid;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_archive_read_free(archive);
 | 
			
		||||
	close(fd);
 | 
			
		||||
	return newpkg;
 | 
			
		||||
 | 
			
		||||
pkg_invalid:
 | 
			
		||||
@@ -688,7 +690,9 @@ pkg_invalid:
 | 
			
		||||
error:
 | 
			
		||||
	_alpm_pkg_free(newpkg);
 | 
			
		||||
	_alpm_archive_read_free(archive);
 | 
			
		||||
	close(fd);
 | 
			
		||||
	if(fd >= 0) {
 | 
			
		||||
		close(fd);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -728,6 +732,7 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
 | 
			
		||||
	int validation = 0;
 | 
			
		||||
	char *sigpath;
 | 
			
		||||
	alpm_pkg_t *pkg_temp;
 | 
			
		||||
	char *packager;
 | 
			
		||||
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	ASSERT(pkg != NULL, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
@@ -753,7 +758,13 @@ int SYMEXPORT alpm_pkg_load(alpm_handle_t *handle, const char *filename, int ful
 | 
			
		||||
					char *key = k->data;
 | 
			
		||||
					if(_alpm_key_in_keychain(handle, key) == 0) {
 | 
			
		||||
						pkg_temp = _alpm_pkg_load_internal(handle, filename, full);
 | 
			
		||||
						if(_alpm_key_import(handle, NULL, key) == -1) {
 | 
			
		||||
						if(pkg_temp) {
 | 
			
		||||
							packager = pkg_temp->packager;
 | 
			
		||||
 | 
			
		||||
						} else {
 | 
			
		||||
							packager = NULL;
 | 
			
		||||
						}
 | 
			
		||||
						if(_alpm_key_import(handle, packager, key) == -1) {
 | 
			
		||||
							fail = 1;
 | 
			
		||||
						}
 | 
			
		||||
						_alpm_pkg_free(pkg_temp);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  be_sync.c : backend for sync databases
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -136,90 +136,178 @@ valid:
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force) {
 | 
			
		||||
/** Update a package database
 | 
			
		||||
 *
 | 
			
		||||
 * An update of the package database \a db will be attempted. Unless
 | 
			
		||||
 * \a force is true, the update will only be performed if the remote
 | 
			
		||||
 * database was modified since the last update.
 | 
			
		||||
 *
 | 
			
		||||
 * This operation requires a database lock, and will return an applicable error
 | 
			
		||||
 * if the lock could not be obtained.
 | 
			
		||||
 *
 | 
			
		||||
 * Example:
 | 
			
		||||
 * @code
 | 
			
		||||
 * alpm_list_t *syncs = alpm_get_syncdbs();
 | 
			
		||||
 * for(i = syncs; i; i = alpm_list_next(i)) {
 | 
			
		||||
 *     alpm_db_t *db = alpm_list_getdata(i);
 | 
			
		||||
 *     result = alpm_db_update(0, db);
 | 
			
		||||
 *
 | 
			
		||||
 *     if(result < 0) {
 | 
			
		||||
 *	       printf("Unable to update database: %s\n", alpm_strerrorlast());
 | 
			
		||||
 *     } else if(result == 1) {
 | 
			
		||||
 *         printf("Database already up to date\n");
 | 
			
		||||
 *     } else {
 | 
			
		||||
 *         printf("Database updated\n");
 | 
			
		||||
 *     }
 | 
			
		||||
 * }
 | 
			
		||||
 * @endcode
 | 
			
		||||
 *
 | 
			
		||||
 * @ingroup alpm_databases
 | 
			
		||||
 * @note After a successful update, the \link alpm_db_get_pkgcache()
 | 
			
		||||
 * package cache \endlink will be invalidated
 | 
			
		||||
 * @param force if true, then forces the update, otherwise update only in case
 | 
			
		||||
 * the database isn't up to date
 | 
			
		||||
 * @param db pointer to the package database to update
 | 
			
		||||
 * @return 0 on success, -1 on error (pm_errno is set accordingly), 1 if up to
 | 
			
		||||
 * to date
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_db_update(int force, alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	char *syncpath;
 | 
			
		||||
	const char *dbext = handle->dbext;
 | 
			
		||||
	const char *dbext;
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
	int updated = 0;
 | 
			
		||||
	int ret = -1;
 | 
			
		||||
	mode_t oldmask;
 | 
			
		||||
	alpm_list_t *payloads = NULL;
 | 
			
		||||
	alpm_event_t event;
 | 
			
		||||
	alpm_handle_t *handle;
 | 
			
		||||
	int siglevel;
 | 
			
		||||
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	ASSERT(dbs != NULL, return -1);
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
	handle = db->handle;
 | 
			
		||||
	handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
	ASSERT(db != handle->db_local, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
	ASSERT(db->servers != NULL, RET_ERR(handle, ALPM_ERR_SERVER_NONE, -1));
 | 
			
		||||
 | 
			
		||||
	if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	syncpath = get_sync_dir(handle);
 | 
			
		||||
	ASSERT(syncpath != NULL, return -1);
 | 
			
		||||
	if(!syncpath) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* force update of invalid databases to fix potential mismatched database/signature */
 | 
			
		||||
	if(db->status & DB_STATUS_INVALID) {
 | 
			
		||||
		force = 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* make sure we have a sane umask */
 | 
			
		||||
	oldmask = umask(0022);
 | 
			
		||||
 | 
			
		||||
	siglevel = alpm_db_get_siglevel(db);
 | 
			
		||||
 | 
			
		||||
	/* attempt to grab a lock */
 | 
			
		||||
	if(_alpm_handle_lock(handle)) {
 | 
			
		||||
		GOTO_ERR(handle, ALPM_ERR_HANDLE_LOCK, cleanup);
 | 
			
		||||
		free(syncpath);
 | 
			
		||||
		umask(oldmask);
 | 
			
		||||
		RET_ERR(handle, ALPM_ERR_HANDLE_LOCK, -1);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(i = dbs; i; i = i->next) {
 | 
			
		||||
		alpm_db_t *db = i->data;
 | 
			
		||||
		int dbforce = force;
 | 
			
		||||
		struct dload_payload *payload = NULL;
 | 
			
		||||
	dbext = db->handle->dbext;
 | 
			
		||||
 | 
			
		||||
	for(i = db->servers; i; i = i->next) {
 | 
			
		||||
		const char *server = i->data, *final_db_url = NULL;
 | 
			
		||||
		struct dload_payload payload;
 | 
			
		||||
		size_t len;
 | 
			
		||||
		int siglevel;
 | 
			
		||||
		int sig_ret = 0;
 | 
			
		||||
 | 
			
		||||
		if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		memset(&payload, 0, sizeof(struct dload_payload));
 | 
			
		||||
 | 
			
		||||
		ASSERT(db != handle->db_local, GOTO_ERR(handle, ALPM_ERR_WRONG_ARGS, cleanup));
 | 
			
		||||
		ASSERT(db->servers != NULL, GOTO_ERR(handle, ALPM_ERR_SERVER_NONE, cleanup));
 | 
			
		||||
		/* set hard upper limit of 128MiB */
 | 
			
		||||
		payload.max_size = 128 * 1024 * 1024;
 | 
			
		||||
 | 
			
		||||
		/* force update of invalid databases to fix potential mismatched database/signature */
 | 
			
		||||
		if(db->status & DB_STATUS_INVALID) {
 | 
			
		||||
			dbforce = 1;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		siglevel = alpm_db_get_siglevel(db);
 | 
			
		||||
 | 
			
		||||
		CALLOC(payload, 1, sizeof(*payload), GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
 | 
			
		||||
		payload->servers = db->servers;
 | 
			
		||||
		/* print server + filename into a buffer */
 | 
			
		||||
		len = strlen(db->treename) + strlen(dbext) + 1;
 | 
			
		||||
		MALLOC(payload->filepath, len,
 | 
			
		||||
			FREE(payload); GOTO_ERR(handle, ALPM_ERR_MEMORY, cleanup));
 | 
			
		||||
		snprintf(payload->filepath, len, "%s%s", db->treename, dbext);
 | 
			
		||||
		payload->handle = handle;
 | 
			
		||||
		payload->force = dbforce;
 | 
			
		||||
		payload->unlink_on_fail = 1;
 | 
			
		||||
		payload->download_signature = (siglevel & ALPM_SIG_DATABASE);
 | 
			
		||||
		payload->signature_optional = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
 | 
			
		||||
		/* set hard upper limit of 128 MiB */
 | 
			
		||||
		payload->max_size = 128 * 1024 * 1024;
 | 
			
		||||
		payloads = alpm_list_add(payloads, payload);
 | 
			
		||||
	}
 | 
			
		||||
	if(payloads == NULL) {
 | 
			
		||||
		ret = 0;
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
		len = strlen(server) + strlen(db->treename) + strlen(dbext) + 2;
 | 
			
		||||
		MALLOC(payload.fileurl, len,
 | 
			
		||||
			{
 | 
			
		||||
				free(syncpath);
 | 
			
		||||
				umask(oldmask);
 | 
			
		||||
				RET_ERR(handle, ALPM_ERR_MEMORY, -1);
 | 
			
		||||
			}
 | 
			
		||||
		);
 | 
			
		||||
		snprintf(payload.fileurl, len, "%s/%s%s", server, db->treename, dbext);
 | 
			
		||||
		payload.handle = handle;
 | 
			
		||||
		payload.force = force;
 | 
			
		||||
		payload.unlink_on_fail = 1;
 | 
			
		||||
 | 
			
		||||
	event.type = ALPM_EVENT_DB_RETRIEVE_START;
 | 
			
		||||
	EVENT(handle, &event);
 | 
			
		||||
	ret = _alpm_download(handle, payloads, syncpath);
 | 
			
		||||
	if(ret < 0) {
 | 
			
		||||
		event.type = ALPM_EVENT_DB_RETRIEVE_FAILED;
 | 
			
		||||
		EVENT(handle, &event);
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
	event.type = ALPM_EVENT_DB_RETRIEVE_DONE;
 | 
			
		||||
	EVENT(handle, &event);
 | 
			
		||||
		ret = _alpm_download(&payload, syncpath, NULL, &final_db_url);
 | 
			
		||||
		_alpm_dload_payload_reset(&payload);
 | 
			
		||||
		updated = (updated || ret == 0);
 | 
			
		||||
 | 
			
		||||
	for(i = dbs; i; i = i->next) {
 | 
			
		||||
		alpm_db_t *db = i->data;
 | 
			
		||||
		if(!(db->usage & ALPM_DB_USAGE_SYNC)) {
 | 
			
		||||
			continue;
 | 
			
		||||
		if(ret != -1 && updated && (siglevel & ALPM_SIG_DATABASE)) {
 | 
			
		||||
			/* an existing sig file is no good at this point */
 | 
			
		||||
			char *sigpath = _alpm_sigpath(handle, _alpm_db_path(db));
 | 
			
		||||
			if(!sigpath) {
 | 
			
		||||
				ret = -1;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			unlink(sigpath);
 | 
			
		||||
			free(sigpath);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
			/* check if the final URL from internal downloader looks reasonable */
 | 
			
		||||
			if(final_db_url != NULL) {
 | 
			
		||||
				if(strlen(final_db_url) < 3
 | 
			
		||||
						|| strcmp(final_db_url + strlen(final_db_url) - strlen(dbext),
 | 
			
		||||
								dbext) != 0) {
 | 
			
		||||
					final_db_url = NULL;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/* if we downloaded a DB, we want the .sig from the same server */
 | 
			
		||||
			if(final_db_url != NULL) {
 | 
			
		||||
				/* print final_db_url into a buffer (leave space for .sig) */
 | 
			
		||||
				len = strlen(final_db_url) + 5;
 | 
			
		||||
			} else {
 | 
			
		||||
				/* print server + filename into a buffer (leave space for separator and .sig) */
 | 
			
		||||
				len = strlen(server) + strlen(db->treename) + strlen(dbext) + 6;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			MALLOC(payload.fileurl, len,
 | 
			
		||||
				{
 | 
			
		||||
					free(syncpath);
 | 
			
		||||
					umask(oldmask);
 | 
			
		||||
					RET_ERR(handle, ALPM_ERR_MEMORY, -1);
 | 
			
		||||
				}
 | 
			
		||||
			);
 | 
			
		||||
 | 
			
		||||
			if(final_db_url != NULL) {
 | 
			
		||||
				snprintf(payload.fileurl, len, "%s.sig", final_db_url);
 | 
			
		||||
			} else {
 | 
			
		||||
				snprintf(payload.fileurl, len, "%s/%s%s.sig", server, db->treename, dbext);
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			payload.handle = handle;
 | 
			
		||||
			payload.force = 1;
 | 
			
		||||
			payload.errors_ok = (siglevel & ALPM_SIG_DATABASE_OPTIONAL);
 | 
			
		||||
 | 
			
		||||
			/* set hard upper limit of 16KiB */
 | 
			
		||||
			payload.max_size = 16 * 1024;
 | 
			
		||||
 | 
			
		||||
			sig_ret = _alpm_download(&payload, syncpath, NULL, NULL);
 | 
			
		||||
			/* errors_ok suppresses error messages, but not the return code */
 | 
			
		||||
			sig_ret = payload.errors_ok ? 0 : sig_ret;
 | 
			
		||||
			_alpm_dload_payload_reset(&payload);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if(ret != -1 && sig_ret != -1) {
 | 
			
		||||
			break;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(updated) {
 | 
			
		||||
		/* Cache needs to be rebuilt */
 | 
			
		||||
		_alpm_db_free_pkgcache(db);
 | 
			
		||||
 | 
			
		||||
@@ -230,29 +318,21 @@ int SYMEXPORT alpm_db_update(alpm_handle_t *handle, alpm_list_t *dbs, int force)
 | 
			
		||||
		db->status &= ~DB_STATUS_MISSING;
 | 
			
		||||
 | 
			
		||||
		/* if the download failed skip validation to preserve the download error */
 | 
			
		||||
		if(sync_db_validate(db) != 0) {
 | 
			
		||||
			_alpm_log(handle, ALPM_LOG_DEBUG, "failed to validate db: %s\n",
 | 
			
		||||
					db->treename);
 | 
			
		||||
		if(ret != -1 && sync_db_validate(db) != 0) {
 | 
			
		||||
			/* pm_errno should be set */
 | 
			
		||||
			ret = -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
cleanup:
 | 
			
		||||
	_alpm_handle_unlock(handle);
 | 
			
		||||
 | 
			
		||||
	if(ret == -1) {
 | 
			
		||||
		/* pm_errno was set by the download code */
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync dbs: %s\n",
 | 
			
		||||
		_alpm_log(handle, ALPM_LOG_DEBUG, "failed to sync db: %s\n",
 | 
			
		||||
				alpm_strerror(handle->pm_errno));
 | 
			
		||||
	} else {
 | 
			
		||||
		handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(payloads) {
 | 
			
		||||
		alpm_list_free_inner(payloads, (alpm_list_fn_free)_alpm_dload_payload_reset);
 | 
			
		||||
		FREELIST(payloads);
 | 
			
		||||
	}
 | 
			
		||||
	_alpm_handle_unlock(handle);
 | 
			
		||||
	free(syncpath);
 | 
			
		||||
	umask(oldmask);
 | 
			
		||||
	return ret;
 | 
			
		||||
@@ -285,22 +365,6 @@ static int _sync_get_validation(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->validation;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Package sync operations struct accessor. We implement this as a method
 | 
			
		||||
 * because we want to reuse the majority of the default_pkg_ops struct and
 | 
			
		||||
 * add only a few operations of our own on top.
 | 
			
		||||
 */
 | 
			
		||||
static const struct pkg_operations *get_sync_pkg_ops(void)
 | 
			
		||||
{
 | 
			
		||||
	static struct pkg_operations sync_pkg_ops;
 | 
			
		||||
	static int sync_pkg_ops_initalized = 0;
 | 
			
		||||
	if(!sync_pkg_ops_initalized) {
 | 
			
		||||
		sync_pkg_ops = default_pkg_ops;
 | 
			
		||||
		sync_pkg_ops.get_validation = _sync_get_validation;
 | 
			
		||||
		sync_pkg_ops_initalized = 1;
 | 
			
		||||
	}
 | 
			
		||||
	return &sync_pkg_ops;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
 | 
			
		||||
		const char **entry_filename, alpm_pkg_t *likely_pkg)
 | 
			
		||||
{
 | 
			
		||||
@@ -341,14 +405,10 @@ static alpm_pkg_t *load_pkg_for_entry(alpm_db_t *db, const char *entryname,
 | 
			
		||||
 | 
			
		||||
		pkg->origin = ALPM_PKG_FROM_SYNCDB;
 | 
			
		||||
		pkg->origin_data.db = db;
 | 
			
		||||
		pkg->ops = get_sync_pkg_ops();
 | 
			
		||||
		pkg->ops = &default_pkg_ops;
 | 
			
		||||
		pkg->ops->get_validation = _sync_get_validation;
 | 
			
		||||
		pkg->handle = db->handle;
 | 
			
		||||
 | 
			
		||||
		if(_alpm_pkg_check_meta(pkg) != 0) {
 | 
			
		||||
			_alpm_pkg_free(pkg);
 | 
			
		||||
			RET_ERR(db->handle, ALPM_ERR_PKG_INVALID, NULL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* add to the collection */
 | 
			
		||||
		_alpm_log(db->handle, ALPM_LOG_FUNCTION, "adding '%s' to package cache for db '%s'\n",
 | 
			
		||||
				pkg->name, db->treename);
 | 
			
		||||
@@ -441,8 +501,9 @@ static int sync_db_populate(alpm_db_t *db)
 | 
			
		||||
 | 
			
		||||
	db->pkgcache = _alpm_pkghash_create(est_count);
 | 
			
		||||
	if(db->pkgcache == NULL) {
 | 
			
		||||
		db->handle->pm_errno = ALPM_ERR_MEMORY;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		GOTO_ERR(db->handle, ALPM_ERR_MEMORY, cleanup);
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while((archive_ret = archive_read_next_header(archive, &entry)) == ARCHIVE_OK) {
 | 
			
		||||
@@ -457,20 +518,13 @@ static int sync_db_populate(alpm_db_t *db)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	/* the db file was successfully read, but contained errors */
 | 
			
		||||
	if(ret == -1) {
 | 
			
		||||
		db->status &= ~DB_STATUS_VALID;
 | 
			
		||||
		db->status |= DB_STATUS_INVALID;
 | 
			
		||||
		_alpm_db_free_pkgcache(db);
 | 
			
		||||
		GOTO_ERR(db->handle, ALPM_ERR_DB_INVALID, cleanup);
 | 
			
		||||
	}
 | 
			
		||||
	/* reading the db file failed */
 | 
			
		||||
	if(archive_ret != ARCHIVE_EOF) {
 | 
			
		||||
		_alpm_log(db->handle, ALPM_LOG_ERROR, _("could not read db '%s' (%s)\n"),
 | 
			
		||||
				db->treename, archive_error_string(archive));
 | 
			
		||||
		_alpm_db_free_pkgcache(db);
 | 
			
		||||
		db->handle->pm_errno = ALPM_ERR_LIBARCHIVE;
 | 
			
		||||
		ret = -1;
 | 
			
		||||
		GOTO_ERR(db->handle, ALPM_ERR_LIBARCHIVE, cleanup);
 | 
			
		||||
		goto cleanup;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	count = alpm_list_count(db->pkgcache->list);
 | 
			
		||||
@@ -547,7 +601,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
 | 
			
		||||
{
 | 
			
		||||
	const char *entryname, *filename;
 | 
			
		||||
	alpm_pkg_t *pkg;
 | 
			
		||||
	struct archive_read_buffer buf = {0};
 | 
			
		||||
	struct archive_read_buffer buf;
 | 
			
		||||
 | 
			
		||||
	entryname = archive_entry_pathname(entry);
 | 
			
		||||
	if(entryname == NULL) {
 | 
			
		||||
@@ -559,6 +613,7 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
 | 
			
		||||
	_alpm_log(db->handle, ALPM_LOG_FUNCTION, "loading package data from archive entry %s\n",
 | 
			
		||||
			entryname);
 | 
			
		||||
 | 
			
		||||
	memset(&buf, 0, sizeof(buf));
 | 
			
		||||
	/* 512K for a line length seems reasonable */
 | 
			
		||||
	buf.max_line_size = 512 * 1024;
 | 
			
		||||
 | 
			
		||||
@@ -672,30 +727,13 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
 | 
			
		||||
				}
 | 
			
		||||
				/* attempt to hand back any memory we don't need */
 | 
			
		||||
				if(files_count > 0) {
 | 
			
		||||
					REALLOC(files, sizeof(alpm_file_t) * files_count, (void)0);
 | 
			
		||||
					files = realloc(files, sizeof(alpm_file_t) * files_count);
 | 
			
		||||
				} else {
 | 
			
		||||
					FREE(files);
 | 
			
		||||
				}
 | 
			
		||||
				pkg->files.count = files_count;
 | 
			
		||||
				pkg->files.files = files;
 | 
			
		||||
				_alpm_filelist_sort(&pkg->files);
 | 
			
		||||
			} else if(strcmp(line, "%DATA%") == 0) {
 | 
			
		||||
				alpm_list_t *i, *lines = NULL;
 | 
			
		||||
				READ_AND_STORE_ALL(lines);
 | 
			
		||||
				for(i = lines; i; i = i->next) {
 | 
			
		||||
					alpm_pkg_xdata_t *pd = _alpm_pkg_parse_xdata(i->data);
 | 
			
		||||
					if(pd == NULL || !alpm_list_append(&pkg->xdata, pd)) {
 | 
			
		||||
						_alpm_pkg_xdata_free(pd);
 | 
			
		||||
						FREELIST(lines);
 | 
			
		||||
						goto error;
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				FREELIST(lines);
 | 
			
		||||
			} else {
 | 
			
		||||
				_alpm_log(db->handle, ALPM_LOG_WARNING, _("%s: unknown key '%s' in sync database\n"), pkg->name, line);
 | 
			
		||||
				alpm_list_t *lines = NULL;
 | 
			
		||||
				READ_AND_STORE_ALL(lines);
 | 
			
		||||
				FREELIST(lines);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		if(ret != ARCHIVE_EOF) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  conflict.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
 | 
			
		||||
@@ -50,8 +50,10 @@ static alpm_conflict_t *conflict_new(alpm_pkg_t *pkg1, alpm_pkg_t *pkg2,
 | 
			
		||||
 | 
			
		||||
	CALLOC(conflict, 1, sizeof(alpm_conflict_t), return NULL);
 | 
			
		||||
 | 
			
		||||
	ASSERT(_alpm_pkg_dup(pkg1, &conflict->package1) == 0, goto error);
 | 
			
		||||
	ASSERT(_alpm_pkg_dup(pkg2, &conflict->package2) == 0, goto error);
 | 
			
		||||
	conflict->package1_hash = pkg1->name_hash;
 | 
			
		||||
	conflict->package2_hash = pkg2->name_hash;
 | 
			
		||||
	STRDUP(conflict->package1, pkg1->name, goto error);
 | 
			
		||||
	STRDUP(conflict->package2, pkg2->name, goto error);
 | 
			
		||||
	conflict->reason = reason;
 | 
			
		||||
 | 
			
		||||
	return conflict;
 | 
			
		||||
@@ -61,12 +63,14 @@ error:
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Free a conflict and its members.
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT alpm_conflict_free(alpm_conflict_t *conflict)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(conflict != NULL, return);
 | 
			
		||||
	_alpm_pkg_free(conflict->package1);
 | 
			
		||||
	_alpm_pkg_free(conflict->package2);
 | 
			
		||||
 | 
			
		||||
	FREE(conflict->package2);
 | 
			
		||||
	FREE(conflict->package1);
 | 
			
		||||
	FREE(conflict);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -78,8 +82,10 @@ alpm_conflict_t *_alpm_conflict_dup(const alpm_conflict_t *conflict)
 | 
			
		||||
	alpm_conflict_t *newconflict;
 | 
			
		||||
	CALLOC(newconflict, 1, sizeof(alpm_conflict_t), return NULL);
 | 
			
		||||
 | 
			
		||||
	ASSERT(_alpm_pkg_dup(conflict->package1, &newconflict->package1) == 0, goto error);
 | 
			
		||||
	ASSERT(_alpm_pkg_dup(conflict->package2, &newconflict->package2) == 0, goto error);
 | 
			
		||||
	newconflict->package1_hash = conflict->package1_hash;
 | 
			
		||||
	newconflict->package2_hash = conflict->package2_hash;
 | 
			
		||||
	STRDUP(newconflict->package1, conflict->package1, goto error);
 | 
			
		||||
	STRDUP(newconflict->package2, conflict->package2, goto error);
 | 
			
		||||
	newconflict->reason = conflict->reason;
 | 
			
		||||
 | 
			
		||||
	return newconflict;
 | 
			
		||||
@@ -102,10 +108,10 @@ static int conflict_isin(alpm_conflict_t *needle, alpm_list_t *haystack)
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
	for(i = haystack; i; i = i->next) {
 | 
			
		||||
		alpm_conflict_t *conflict = i->data;
 | 
			
		||||
		if(needle->package1->name_hash == conflict->package1->name_hash
 | 
			
		||||
				&& needle->package2->name_hash == conflict->package2->name_hash
 | 
			
		||||
				&& strcmp(needle->package1->name, conflict->package1->name) == 0
 | 
			
		||||
				&& strcmp(needle->package2->name, conflict->package2->name) == 0) {
 | 
			
		||||
		if(needle->package1_hash == conflict->package1_hash
 | 
			
		||||
				&& needle->package2_hash == conflict->package2_hash
 | 
			
		||||
				&& strcmp(needle->package1, conflict->package1) == 0
 | 
			
		||||
				&& strcmp(needle->package2, conflict->package2) == 0) {
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -237,6 +243,14 @@ alpm_list_t *_alpm_outerconflicts(alpm_db_t *db, alpm_list_t *packages)
 | 
			
		||||
	return baddeps;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Check the package conflicts in a database
 | 
			
		||||
 *
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @param pkglist the list of packages to check
 | 
			
		||||
 *
 | 
			
		||||
 * @return an alpm_list_t of alpm_conflict_t
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_checkconflicts(alpm_handle_t *handle,
 | 
			
		||||
		alpm_list_t *pkglist)
 | 
			
		||||
{
 | 
			
		||||
@@ -286,6 +300,9 @@ error:
 | 
			
		||||
	RET_ERR(handle, ALPM_ERR_MEMORY, conflicts);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @brief Frees a conflict and its members.
 | 
			
		||||
 */
 | 
			
		||||
void SYMEXPORT alpm_fileconflict_free(alpm_fileconflict_t *conflict)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(conflict != NULL, return);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  conflict.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										163
									
								
								lib/libalpm/db.c
									
									
									
									
									
								
							
							
						
						
									
										163
									
								
								lib/libalpm/db.c
									
									
									
									
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  db.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
@@ -37,6 +37,12 @@
 | 
			
		||||
#include "package.h"
 | 
			
		||||
#include "group.h"
 | 
			
		||||
 | 
			
		||||
/** \addtogroup alpm_databases Database Functions
 | 
			
		||||
 * @brief Functions to query and manipulate the database of libalpm
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** Register a sync database of packages. */
 | 
			
		||||
alpm_db_t SYMEXPORT *alpm_register_syncdb(alpm_handle_t *handle,
 | 
			
		||||
		const char *treename, int siglevel)
 | 
			
		||||
{
 | 
			
		||||
@@ -75,6 +81,7 @@ void _alpm_db_unregister(alpm_db_t *db)
 | 
			
		||||
	_alpm_db_free(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Unregister all package databases. */
 | 
			
		||||
int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
@@ -95,6 +102,7 @@ int SYMEXPORT alpm_unregister_all_syncdbs(alpm_handle_t *handle)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Unregister a package database. */
 | 
			
		||||
int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	int found = 0;
 | 
			
		||||
@@ -131,43 +139,19 @@ int SYMEXPORT alpm_db_unregister(alpm_db_t *db)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_cache_servers(const alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
	return db->cache_servers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_db_set_cache_servers(alpm_db_t *db, alpm_list_t *cache_servers)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
	FREELIST(db->cache_servers);
 | 
			
		||||
	for(i = cache_servers; i; i = i->next) {
 | 
			
		||||
		char *url = i->data;
 | 
			
		||||
		if(alpm_db_add_cache_server(db, url) != 0) {
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the serverlist of a database. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_servers(const alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
	return db->servers;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Set the serverlist of a database. */
 | 
			
		||||
int SYMEXPORT alpm_db_set_servers(alpm_db_t *db, alpm_list_t *servers)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
	FREELIST(db->servers);
 | 
			
		||||
	for(i = servers; i; i = i->next) {
 | 
			
		||||
		char *url = i->data;
 | 
			
		||||
		if(alpm_db_add_server(db, url) != 0) {
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	db->servers = servers;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -184,25 +168,11 @@ static char *sanitize_url(const char *url)
 | 
			
		||||
	return newurl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_db_add_cache_server(alpm_db_t *db, const char *url)
 | 
			
		||||
{
 | 
			
		||||
	char *newurl;
 | 
			
		||||
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
	db->handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
	ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
 | 
			
		||||
	newurl = sanitize_url(url);
 | 
			
		||||
	ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
 | 
			
		||||
 | 
			
		||||
	db->cache_servers = alpm_list_add(db->cache_servers, newurl);
 | 
			
		||||
	_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new cache server URL to database '%s': %s\n",
 | 
			
		||||
			db->treename, newurl);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Add a download server to a database.
 | 
			
		||||
 * @param db database pointer
 | 
			
		||||
 * @param url url of the server
 | 
			
		||||
 * @return 0 on success, -1 on error (pm_errno is set accordingly)
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
 | 
			
		||||
{
 | 
			
		||||
	char *newurl;
 | 
			
		||||
@@ -213,8 +183,9 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
 | 
			
		||||
	ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
 | 
			
		||||
	newurl = sanitize_url(url);
 | 
			
		||||
	ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
 | 
			
		||||
 | 
			
		||||
	if(!newurl) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	db->servers = alpm_list_add(db->servers, newurl);
 | 
			
		||||
	_alpm_log(db->handle, ALPM_LOG_DEBUG, "adding new server URL to database '%s': %s\n",
 | 
			
		||||
			db->treename, newurl);
 | 
			
		||||
@@ -222,32 +193,12 @@ int SYMEXPORT alpm_db_add_server(alpm_db_t *db, const char *url)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_db_remove_cache_server(alpm_db_t *db, const char *url)
 | 
			
		||||
{
 | 
			
		||||
	char *newurl, *vdata = NULL;
 | 
			
		||||
	int ret = 1;
 | 
			
		||||
 | 
			
		||||
	/* Sanity checks */
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
	db->handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
	ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
 | 
			
		||||
	newurl = sanitize_url(url);
 | 
			
		||||
	ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
 | 
			
		||||
 | 
			
		||||
	db->cache_servers = alpm_list_remove_str(db->cache_servers, newurl, &vdata);
 | 
			
		||||
 | 
			
		||||
	if(vdata) {
 | 
			
		||||
		_alpm_log(db->handle, ALPM_LOG_DEBUG, "removed cache server URL from database '%s': %s\n",
 | 
			
		||||
				db->treename, newurl);
 | 
			
		||||
		free(vdata);
 | 
			
		||||
		ret = 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	free(newurl);
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Remove a download server from a database.
 | 
			
		||||
 * @param db database pointer
 | 
			
		||||
 * @param url url of the server
 | 
			
		||||
 * @return 0 on success, 1 on server not present,
 | 
			
		||||
 * -1 on error (pm_errno is set accordingly)
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
 | 
			
		||||
{
 | 
			
		||||
	char *newurl, *vdata = NULL;
 | 
			
		||||
@@ -259,7 +210,9 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
 | 
			
		||||
	ASSERT(url != NULL && strlen(url) != 0, RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
 | 
			
		||||
	newurl = sanitize_url(url);
 | 
			
		||||
	ASSERT(newurl != NULL, RET_ERR(db->handle, ALPM_ERR_MEMORY, -1));
 | 
			
		||||
	if(!newurl) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	db->servers = alpm_list_remove_str(db->servers, newurl, &vdata);
 | 
			
		||||
 | 
			
		||||
@@ -274,18 +227,14 @@ int SYMEXPORT alpm_db_remove_server(alpm_db_t *db, const char *url)
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_handle_t SYMEXPORT *alpm_db_get_handle(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
	return db->handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the name of a package database. */
 | 
			
		||||
const char SYMEXPORT *alpm_db_get_name(const alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
	return db->treename;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the signature verification level for a database. */
 | 
			
		||||
int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
@@ -296,6 +245,7 @@ int SYMEXPORT alpm_db_get_siglevel(alpm_db_t *db)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Check the validity of a database. */
 | 
			
		||||
int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
@@ -303,6 +253,7 @@ int SYMEXPORT alpm_db_get_valid(alpm_db_t *db)
 | 
			
		||||
	return db->ops->validate(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get a package entry from a package database. */
 | 
			
		||||
alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	alpm_pkg_t *pkg;
 | 
			
		||||
@@ -318,6 +269,7 @@ alpm_pkg_t SYMEXPORT *alpm_db_get_pkg(alpm_db_t *db, const char *name)
 | 
			
		||||
	return pkg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the package cache of a package database. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
@@ -325,6 +277,7 @@ alpm_list_t SYMEXPORT *alpm_db_get_pkgcache(alpm_db_t *db)
 | 
			
		||||
	return _alpm_db_get_pkgcache(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get a group entry from a package database. */
 | 
			
		||||
alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
@@ -335,6 +288,7 @@ alpm_group_t SYMEXPORT *alpm_db_get_group(alpm_db_t *db, const char *name)
 | 
			
		||||
	return _alpm_db_get_groupfromcache(db, name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Get the group cache of a package database. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
@@ -343,16 +297,16 @@ alpm_list_t SYMEXPORT *alpm_db_get_groupcache(alpm_db_t *db)
 | 
			
		||||
	return _alpm_db_get_groupcache(db);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
 | 
			
		||||
		alpm_list_t **ret)
 | 
			
		||||
/** Searches a database. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL && ret != NULL && *ret == NULL,
 | 
			
		||||
			RET_ERR(db->handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
	ASSERT(db != NULL, return NULL);
 | 
			
		||||
	db->handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
 | 
			
		||||
	return _alpm_db_search(db, needles, ret);
 | 
			
		||||
	return _alpm_db_search(db, needles);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Sets the usage bitmask for a repo */
 | 
			
		||||
int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
@@ -360,6 +314,7 @@ int SYMEXPORT alpm_db_set_usage(alpm_db_t *db, int usage)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Gets the usage bitmask for a repo */
 | 
			
		||||
int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(db != NULL, return -1);
 | 
			
		||||
@@ -368,6 +323,9 @@ int SYMEXPORT alpm_db_get_usage(alpm_db_t *db, int *usage)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
alpm_db_t *_alpm_db_new(const char *treename, int is_local)
 | 
			
		||||
{
 | 
			
		||||
	alpm_db_t *db;
 | 
			
		||||
@@ -390,7 +348,6 @@ void _alpm_db_free(alpm_db_t *db)
 | 
			
		||||
	/* cleanup pkgcache */
 | 
			
		||||
	_alpm_db_free_pkgcache(db);
 | 
			
		||||
	/* cleanup server list */
 | 
			
		||||
	FREELIST(db->cache_servers);
 | 
			
		||||
	FREELIST(db->servers);
 | 
			
		||||
	FREE(db->_path);
 | 
			
		||||
	FREE(db->treename);
 | 
			
		||||
@@ -439,13 +396,13 @@ int _alpm_db_cmp(const void *d1, const void *d2)
 | 
			
		||||
	return strcmp(db1->treename, db2->treename);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
 | 
			
		||||
		alpm_list_t **ret)
 | 
			
		||||
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles)
 | 
			
		||||
{
 | 
			
		||||
	const alpm_list_t *i, *j, *k;
 | 
			
		||||
	alpm_list_t *ret = NULL;
 | 
			
		||||
 | 
			
		||||
	if(!(db->usage & ALPM_DB_USAGE_SEARCH)) {
 | 
			
		||||
		return 0;
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* copy the pkgcache- we will free the list var after each needle */
 | 
			
		||||
@@ -458,15 +415,12 @@ int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
 | 
			
		||||
		if(i->data == NULL) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		*ret = NULL;
 | 
			
		||||
		ret = NULL;
 | 
			
		||||
		targ = i->data;
 | 
			
		||||
		_alpm_log(db->handle, ALPM_LOG_DEBUG, "searching for target '%s'\n", targ);
 | 
			
		||||
 | 
			
		||||
		if(regcomp(®, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
 | 
			
		||||
			db->handle->pm_errno = ALPM_ERR_INVALID_REGEX;
 | 
			
		||||
			alpm_list_free(list);
 | 
			
		||||
			alpm_list_free(*ret);
 | 
			
		||||
			return -1;
 | 
			
		||||
			RET_ERR(db->handle, ALPM_ERR_INVALID_REGEX, NULL);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for(j = list; j; j = j->next) {
 | 
			
		||||
@@ -509,18 +463,18 @@ int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
 | 
			
		||||
				_alpm_log(db->handle, ALPM_LOG_DEBUG,
 | 
			
		||||
						"search target '%s' matched '%s' on package '%s'\n",
 | 
			
		||||
						targ, matched, name);
 | 
			
		||||
				*ret = alpm_list_add(*ret, pkg);
 | 
			
		||||
				ret = alpm_list_add(ret, pkg);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Free the existing search list, and use the returned list for the
 | 
			
		||||
		 * next needle. This allows for AND-based package searching. */
 | 
			
		||||
		alpm_list_free(list);
 | 
			
		||||
		list = *ret;
 | 
			
		||||
		list = ret;
 | 
			
		||||
		regfree(®);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Returns a new package cache from db.
 | 
			
		||||
@@ -563,17 +517,18 @@ static void free_groupcache(alpm_db_t *db)
 | 
			
		||||
 | 
			
		||||
void _alpm_db_free_pkgcache(alpm_db_t *db)
 | 
			
		||||
{
 | 
			
		||||
	if(db == NULL || db->pkgcache == NULL) {
 | 
			
		||||
	if(db == NULL || !(db->status & DB_STATUS_PKGCACHE)) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_alpm_log(db->handle, ALPM_LOG_DEBUG,
 | 
			
		||||
			"freeing package cache for repository '%s'\n", db->treename);
 | 
			
		||||
 | 
			
		||||
	alpm_list_free_inner(db->pkgcache->list,
 | 
			
		||||
			(alpm_list_fn_free)_alpm_pkg_free);
 | 
			
		||||
	_alpm_pkghash_free(db->pkgcache);
 | 
			
		||||
	db->pkgcache = NULL;
 | 
			
		||||
	if(db->pkgcache) {
 | 
			
		||||
		alpm_list_free_inner(db->pkgcache->list,
 | 
			
		||||
				(alpm_list_fn_free)_alpm_pkg_free);
 | 
			
		||||
		_alpm_pkghash_free(db->pkgcache);
 | 
			
		||||
	}
 | 
			
		||||
	db->status &= ~DB_STATUS_PKGCACHE;
 | 
			
		||||
 | 
			
		||||
	free_groupcache(db);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  db.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
@@ -62,16 +62,15 @@ struct db_operations {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* Database */
 | 
			
		||||
struct _alpm_db_t {
 | 
			
		||||
struct __alpm_db_t {
 | 
			
		||||
	alpm_handle_t *handle;
 | 
			
		||||
	char *treename;
 | 
			
		||||
	/* do not access directly, use _alpm_db_path(db) for lazy access */
 | 
			
		||||
	char *_path;
 | 
			
		||||
	alpm_pkghash_t *pkgcache;
 | 
			
		||||
	alpm_list_t *grpcache;
 | 
			
		||||
	alpm_list_t *cache_servers;
 | 
			
		||||
	alpm_list_t *servers;
 | 
			
		||||
	const struct db_operations *ops;
 | 
			
		||||
	struct db_operations *ops;
 | 
			
		||||
 | 
			
		||||
	/* bitfields for validity, local, loaded caches, etc. */
 | 
			
		||||
	/* From _alpm_dbstatus_t */
 | 
			
		||||
@@ -88,8 +87,7 @@ alpm_db_t *_alpm_db_new(const char *treename, int is_local);
 | 
			
		||||
void _alpm_db_free(alpm_db_t *db);
 | 
			
		||||
const char *_alpm_db_path(alpm_db_t *db);
 | 
			
		||||
int _alpm_db_cmp(const void *d1, const void *d2);
 | 
			
		||||
int _alpm_db_search(alpm_db_t *db, const alpm_list_t *needles,
 | 
			
		||||
		alpm_list_t **ret);
 | 
			
		||||
alpm_list_t *_alpm_db_search(alpm_db_t *db, const alpm_list_t *needles);
 | 
			
		||||
alpm_db_t *_alpm_db_register_local(alpm_handle_t *handle);
 | 
			
		||||
alpm_db_t *_alpm_db_register_sync(alpm_handle_t *handle, const char *treename,
 | 
			
		||||
		int level);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  deps.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
@@ -286,6 +286,12 @@ static int no_dep_version(alpm_handle_t *handle)
 | 
			
		||||
	return (handle->trans->flags & ALPM_TRANS_FLAG_NODEPVERSION);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Find a package satisfying a specified dependency.
 | 
			
		||||
 * The dependency can include versions with depmod operators.
 | 
			
		||||
 * @param pkgs an alpm_list_t* of alpm_pkg_t where the satisfier will be searched
 | 
			
		||||
 * @param depstring package or provision name, versioned or not
 | 
			
		||||
 * @return a alpm_pkg_t* satisfying depstring
 | 
			
		||||
 */
 | 
			
		||||
alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstring)
 | 
			
		||||
{
 | 
			
		||||
	alpm_depend_t *dep = alpm_dep_from_string(depstring);
 | 
			
		||||
@@ -297,6 +303,15 @@ alpm_pkg_t SYMEXPORT *alpm_find_satisfier(alpm_list_t *pkgs, const char *depstri
 | 
			
		||||
	return pkg;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Checks dependencies and returns missing ones in a list.
 | 
			
		||||
 * Dependencies can include versions with depmod operators.
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @param pkglist the list of local packages
 | 
			
		||||
 * @param remove an alpm_list_t* of packages to be removed
 | 
			
		||||
 * @param upgrade an alpm_list_t* of packages to be upgraded (remove-then-upgrade)
 | 
			
		||||
 * @param reversedeps handles the backward dependencies
 | 
			
		||||
 * @return an alpm_list_t* of alpm_depmissing_t pointers.
 | 
			
		||||
 */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_checkdeps(alpm_handle_t *handle,
 | 
			
		||||
		alpm_list_t *pkglist, alpm_list_t *rem, alpm_list_t *upgrade,
 | 
			
		||||
		int reversedeps)
 | 
			
		||||
@@ -556,7 +571,7 @@ static void _alpm_select_depends(alpm_list_t **from, alpm_list_t **to,
 | 
			
		||||
	for(i = *from; i; i = next) {
 | 
			
		||||
		alpm_pkg_t *deppkg = i->data;
 | 
			
		||||
		next = i->next;
 | 
			
		||||
		if((explicit || alpm_pkg_get_reason(deppkg) == ALPM_PKG_REASON_DEPEND)
 | 
			
		||||
		if((explicit || alpm_pkg_get_reason(deppkg) != ALPM_PKG_REASON_EXPLICIT)
 | 
			
		||||
				&& _alpm_pkg_depends_on(pkg, deppkg)) {
 | 
			
		||||
			*to = alpm_list_add(*to, deppkg);
 | 
			
		||||
			*from = alpm_list_remove_item(*from, i);
 | 
			
		||||
@@ -748,6 +763,18 @@ static alpm_pkg_t *resolvedep(alpm_handle_t *handle, alpm_depend_t *dep,
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Find a package satisfying a specified dependency.
 | 
			
		||||
 * First look for a literal, going through each db one by one. Then look for
 | 
			
		||||
 * providers. The first satisfier that belongs to an installed package is
 | 
			
		||||
 * returned. If no providers belong to an installed package then an
 | 
			
		||||
 * alpm_question_select_provider_t is created to select the provider.
 | 
			
		||||
 * The dependency can include versions with depmod operators.
 | 
			
		||||
 *
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @param dbs an alpm_list_t* of alpm_db_t where the satisfier will be searched
 | 
			
		||||
 * @param depstring package or provision name, versioned or not
 | 
			
		||||
 * @return a alpm_pkg_t* satisfying depstring
 | 
			
		||||
 */
 | 
			
		||||
alpm_pkg_t SYMEXPORT *alpm_find_dbs_satisfier(alpm_handle_t *handle,
 | 
			
		||||
		alpm_list_t *dbs, const char *depstring)
 | 
			
		||||
{
 | 
			
		||||
@@ -862,6 +889,11 @@ int _alpm_resolvedeps(alpm_handle_t *handle, alpm_list_t *localpkgs,
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Reverse of splitdep; make a dep string from a alpm_depend_t struct.
 | 
			
		||||
 * The string must be freed!
 | 
			
		||||
 * @param dep the depend to turn into a string
 | 
			
		||||
 * @return a string-formatted dependency with operator if necessary
 | 
			
		||||
 */
 | 
			
		||||
char SYMEXPORT *alpm_dep_compute_string(const alpm_depend_t *dep)
 | 
			
		||||
{
 | 
			
		||||
	const char *name, *opr, *ver, *desc_delim, *desc;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  deps.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  diskspace.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2010-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2010-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -111,10 +111,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while((mnt = getmntent(fp))) {
 | 
			
		||||
		if(mnt->mnt_dir == NULL) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		STRDUP(mp->mount_dir, mnt->mnt_dir, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		mp->mount_dir_len = strlen(mp->mount_dir);
 | 
			
		||||
@@ -138,10 +134,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while((ret = getmntent(fp, &mnt)) == 0) {
 | 
			
		||||
		if(mnt->mnt_mountp == NULL) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		STRDUP(mp->mount_dir, mnt->mnt_mountp,  free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		mp->mount_dir_len = strlen(mp->mount_dir);
 | 
			
		||||
@@ -169,10 +161,6 @@ static alpm_list_t *mount_point_list(alpm_handle_t *handle)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for(; entries-- > 0; fsp++) {
 | 
			
		||||
		if(fsp->f_mntonname == NULL) {
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		CALLOC(mp, 1, sizeof(alpm_mountpoint_t), RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		STRDUP(mp->mount_dir, fsp->f_mntonname, free(mp); RET_ERR(handle, ALPM_ERR_MEMORY, NULL));
 | 
			
		||||
		mp->mount_dir_len = strlen(mp->mount_dir);
 | 
			
		||||
@@ -371,7 +359,7 @@ static int check_mountpoint(alpm_handle_t *handle, alpm_mountpoint_t *mp)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
 | 
			
		||||
		size_t num_files, const off_t *file_sizes)
 | 
			
		||||
		size_t num_files, off_t *file_sizes)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *mount_points;
 | 
			
		||||
	alpm_mountpoint_t *cachedir_mp;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  diskspace.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2010-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2010-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -43,7 +43,7 @@ enum mount_fsinfo {
 | 
			
		||||
	MOUNT_FSINFO_FAIL,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _alpm_mountpoint_t {
 | 
			
		||||
typedef struct __alpm_mountpoint_t {
 | 
			
		||||
	/* mount point information */
 | 
			
		||||
	char *mount_dir;
 | 
			
		||||
	size_t mount_dir_len;
 | 
			
		||||
@@ -58,6 +58,6 @@ typedef struct _alpm_mountpoint_t {
 | 
			
		||||
 | 
			
		||||
int _alpm_check_diskspace(alpm_handle_t *handle);
 | 
			
		||||
int _alpm_check_downloadspace(alpm_handle_t *handle, const char *cachedir,
 | 
			
		||||
		size_t num_files, const off_t *file_sizes);
 | 
			
		||||
		size_t num_files, off_t *file_sizes);
 | 
			
		||||
 | 
			
		||||
#endif /* ALPM_DISKSPACE_H */
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1054
									
								
								lib/libalpm/dload.c
									
									
									
									
									
								
							
							
						
						
									
										1054
									
								
								lib/libalpm/dload.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  dload.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -30,14 +30,7 @@ struct dload_payload {
 | 
			
		||||
	char *tempfile_name;
 | 
			
		||||
	char *destfile_name;
 | 
			
		||||
	char *content_disp_name;
 | 
			
		||||
	/* client has to provide either
 | 
			
		||||
	 *  1) fileurl - full URL to the file
 | 
			
		||||
	 *  2) pair of (servers, filepath), in this case ALPM iterates over the
 | 
			
		||||
	 *     server list and tries to download "$server/$filepath"
 | 
			
		||||
	 */
 | 
			
		||||
	char *fileurl;
 | 
			
		||||
	char *filepath; /* download URL path */
 | 
			
		||||
	alpm_list_t *cache_servers;
 | 
			
		||||
	alpm_list_t *servers;
 | 
			
		||||
	long respcode;
 | 
			
		||||
	off_t initial_size;
 | 
			
		||||
@@ -45,25 +38,19 @@ struct dload_payload {
 | 
			
		||||
	off_t prevprogress;
 | 
			
		||||
	int force;
 | 
			
		||||
	int allow_resume;
 | 
			
		||||
	int random_partfile;
 | 
			
		||||
	int errors_ok;
 | 
			
		||||
	int unlink_on_fail;
 | 
			
		||||
	int trust_remote_name;
 | 
			
		||||
	int download_signature; /* specifies if an accompanion *.sig file need to be downloaded*/
 | 
			
		||||
	int signature_optional; /* *.sig file is optional */
 | 
			
		||||
	int cb_initialized;
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	CURL *curl;
 | 
			
		||||
	char error_buffer[CURL_ERROR_SIZE];
 | 
			
		||||
	FILE *localf; /* temp download file */
 | 
			
		||||
	int signature; /* specifies if this payload is for a signature file */
 | 
			
		||||
	int request_errors_ok; /* per-request errors-ok */
 | 
			
		||||
	CURLcode curlerr;       /* last error produced by curl */
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void _alpm_dload_payload_reset(struct dload_payload *payload);
 | 
			
		||||
void _alpm_dload_payload_reset_for_retry(struct dload_payload *payload);
 | 
			
		||||
 | 
			
		||||
int _alpm_download(alpm_handle_t *handle,
 | 
			
		||||
		alpm_list_t *payloads /* struct dload_payload */,
 | 
			
		||||
		const char *localpath);
 | 
			
		||||
int _alpm_download(struct dload_payload *payload, const char *localpath,
 | 
			
		||||
		char **final_file, const char **final_url);
 | 
			
		||||
 | 
			
		||||
#endif /* ALPM_DLOAD_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  error.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -90,8 +90,6 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
 | 
			
		||||
			return _("transaction not initialized");
 | 
			
		||||
		case ALPM_ERR_TRANS_DUP_TARGET:
 | 
			
		||||
			return _("duplicate target");
 | 
			
		||||
		case ALPM_ERR_TRANS_DUP_FILENAME:
 | 
			
		||||
			return _("duplicate filename");
 | 
			
		||||
		case ALPM_ERR_TRANS_NOT_INITIALIZED:
 | 
			
		||||
			return _("transaction not initialized");
 | 
			
		||||
		case ALPM_ERR_TRANS_NOT_PREPARED:
 | 
			
		||||
@@ -125,6 +123,8 @@ const char SYMEXPORT *alpm_strerror(alpm_errno_t err)
 | 
			
		||||
			return _("package filename is not valid");
 | 
			
		||||
		case ALPM_ERR_PKG_INVALID_ARCH:
 | 
			
		||||
			return _("package architecture is not valid");
 | 
			
		||||
		case ALPM_ERR_PKG_REPO_NOT_FOUND:
 | 
			
		||||
			return _("could not find repository for target");
 | 
			
		||||
		/* Signatures */
 | 
			
		||||
		case ALPM_ERR_SIG_MISSING:
 | 
			
		||||
			return _("missing PGP signature");
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  filelist.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2012-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -118,12 +118,12 @@ static int _alpm_files_cmp(const void *f1, const void *f2)
 | 
			
		||||
	return strcmp(file1->name, file2->name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(const alpm_filelist_t *filelist,
 | 
			
		||||
alpm_file_t SYMEXPORT *alpm_filelist_contains(alpm_filelist_t *filelist,
 | 
			
		||||
		const char *path)
 | 
			
		||||
{
 | 
			
		||||
	alpm_file_t key;
 | 
			
		||||
 | 
			
		||||
	if(!filelist || filelist->count == 0) {
 | 
			
		||||
	if(!filelist) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  filelist.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2012-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2012-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  graph.c - helpful graph structure and setup/teardown methods
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2007-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2007-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  graph.h - helpful graph structure and setup/teardown methods
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2007-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2007-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -23,19 +23,19 @@
 | 
			
		||||
 | 
			
		||||
#include "alpm_list.h"
 | 
			
		||||
 | 
			
		||||
enum _alpm_graph_vertex_state {
 | 
			
		||||
enum __alpm_graph_vertex_state {
 | 
			
		||||
	ALPM_GRAPH_STATE_UNPROCESSED,
 | 
			
		||||
	ALPM_GRAPH_STATE_PROCESSING,
 | 
			
		||||
	ALPM_GRAPH_STATE_PROCESSED
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _alpm_graph_t {
 | 
			
		||||
typedef struct __alpm_graph_t {
 | 
			
		||||
	void *data;
 | 
			
		||||
	struct _alpm_graph_t *parent; /* where did we come from? */
 | 
			
		||||
	struct __alpm_graph_t *parent; /* where did we come from? */
 | 
			
		||||
	alpm_list_t *children;
 | 
			
		||||
	alpm_list_t *iterator; /* used for DFS without recursion */
 | 
			
		||||
	off_t weight; /* weight of the node */
 | 
			
		||||
	enum _alpm_graph_vertex_state state;
 | 
			
		||||
	enum __alpm_graph_vertex_state state;
 | 
			
		||||
} alpm_graph_t;
 | 
			
		||||
 | 
			
		||||
alpm_graph_t *_alpm_graph_new(void);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  group.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  group.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  handle.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Miklos Vajna <vmiklos@frugalware.org>
 | 
			
		||||
@@ -48,28 +48,12 @@ alpm_handle_t *_alpm_handle_new(void)
 | 
			
		||||
	return handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* free all in-memory resources */
 | 
			
		||||
void _alpm_handle_free(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *i;
 | 
			
		||||
	alpm_db_t *db;
 | 
			
		||||
 | 
			
		||||
	if(handle == NULL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* close local database */
 | 
			
		||||
	if((db = handle->db_local)) {
 | 
			
		||||
		db->ops->unregister(db);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* unregister all sync dbs */
 | 
			
		||||
	for(i = handle->dbs_sync; i; i = i->next) {
 | 
			
		||||
		db = i->data;
 | 
			
		||||
		db->ops->unregister(db);
 | 
			
		||||
	}
 | 
			
		||||
	alpm_list_free(handle->dbs_sync);
 | 
			
		||||
 | 
			
		||||
	/* close logfile */
 | 
			
		||||
	if(handle->logstream) {
 | 
			
		||||
		fclose(handle->logstream);
 | 
			
		||||
@@ -80,14 +64,13 @@ void _alpm_handle_free(alpm_handle_t *handle)
 | 
			
		||||
		closelog();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBGPGME
 | 
			
		||||
	FREELIST(handle->known_keys);
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	/* release curl handle */
 | 
			
		||||
	curl_easy_cleanup(handle->curl);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	curl_multi_cleanup(handle->curlm);
 | 
			
		||||
	curl_global_cleanup();
 | 
			
		||||
	FREELIST(handle->server_errors);
 | 
			
		||||
#ifdef HAVE_LIBGPGME
 | 
			
		||||
	FREELIST(handle->known_keys);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	/* free memory */
 | 
			
		||||
@@ -99,7 +82,7 @@ void _alpm_handle_free(alpm_handle_t *handle)
 | 
			
		||||
	FREELIST(handle->hookdirs);
 | 
			
		||||
	FREE(handle->logfile);
 | 
			
		||||
	FREE(handle->lockfile);
 | 
			
		||||
	FREELIST(handle->architectures);
 | 
			
		||||
	FREE(handle->arch);
 | 
			
		||||
	FREE(handle->gpgdir);
 | 
			
		||||
	FREELIST(handle->noupgrade);
 | 
			
		||||
	FREELIST(handle->noextract);
 | 
			
		||||
@@ -122,7 +105,7 @@ int _alpm_handle_lock(alpm_handle_t *handle)
 | 
			
		||||
	ASSERT(handle->lockfd < 0, return 0);
 | 
			
		||||
 | 
			
		||||
	/* create the dir of the lockfile first */
 | 
			
		||||
	STRDUP(dir, handle->lockfile, return -1);
 | 
			
		||||
	dir = strdup(handle->lockfile);
 | 
			
		||||
	ptr = strrchr(dir, '/');
 | 
			
		||||
	if(ptr) {
 | 
			
		||||
		*ptr = '\0';
 | 
			
		||||
@@ -140,6 +123,12 @@ int _alpm_handle_lock(alpm_handle_t *handle)
 | 
			
		||||
	return (handle->lockfd >= 0 ? 0 : -1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Remove the database lock file
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @return 0 on success, -1 on error
 | 
			
		||||
 *
 | 
			
		||||
 * @note Safe to call from inside signal handlers.
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_unlock(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(handle != NULL, return -1);
 | 
			
		||||
@@ -184,34 +173,22 @@ alpm_cb_log SYMEXPORT alpm_option_get_logcb(alpm_handle_t *handle)
 | 
			
		||||
	return handle->logcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_logcb_ctx(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->logcb_ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_download SYMEXPORT alpm_option_get_dlcb(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->dlcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_dlcb_ctx(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->dlcb_ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_fetch SYMEXPORT alpm_option_get_fetchcb(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->fetchcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_fetchcb_ctx(alpm_handle_t *handle)
 | 
			
		||||
alpm_cb_totaldl SYMEXPORT alpm_option_get_totaldlcb(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->fetchcb_ctx;
 | 
			
		||||
	return handle->totaldlcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
 | 
			
		||||
@@ -220,36 +197,18 @@ alpm_cb_event SYMEXPORT alpm_option_get_eventcb(alpm_handle_t *handle)
 | 
			
		||||
	return handle->eventcb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_eventcb_ctx(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->eventcb_ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_question SYMEXPORT alpm_option_get_questioncb(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->questioncb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_questioncb_ctx(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->questioncb_ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_cb_progress SYMEXPORT alpm_option_get_progresscb(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->progresscb;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SYMEXPORT *alpm_option_get_progresscb_ctx(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->progresscb_ctx;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char SYMEXPORT *alpm_option_get_root(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
@@ -334,10 +293,10 @@ alpm_list_t SYMEXPORT *alpm_option_get_assumeinstalled(alpm_handle_t *handle)
 | 
			
		||||
	return handle->assumeinstalled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_option_get_architectures(alpm_handle_t *handle)
 | 
			
		||||
const char SYMEXPORT *alpm_option_get_arch(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return NULL);
 | 
			
		||||
	return handle->architectures;
 | 
			
		||||
	return handle->arch;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_get_checkspace(alpm_handle_t *handle)
 | 
			
		||||
@@ -352,57 +311,52 @@ const char SYMEXPORT *alpm_option_get_dbext(alpm_handle_t *handle)
 | 
			
		||||
	return handle->dbext;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_get_parallel_downloads(alpm_handle_t *handle)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	return handle->parallel_downloads;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_logcb(alpm_handle_t *handle, alpm_cb_log cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->logcb = cb;
 | 
			
		||||
	handle->logcb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_dlcb(alpm_handle_t *handle, alpm_cb_download cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->dlcb = cb;
 | 
			
		||||
	handle->dlcb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_fetchcb(alpm_handle_t *handle, alpm_cb_fetch cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->fetchcb = cb;
 | 
			
		||||
	handle->fetchcb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_totaldlcb(alpm_handle_t *handle, alpm_cb_totaldl cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->totaldlcb = cb;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_eventcb(alpm_handle_t *handle, alpm_cb_event cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->eventcb = cb;
 | 
			
		||||
	handle->eventcb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_questioncb(alpm_handle_t *handle, alpm_cb_question cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->questioncb = cb;
 | 
			
		||||
	handle->questioncb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb, void *ctx)
 | 
			
		||||
int SYMEXPORT alpm_option_set_progresscb(alpm_handle_t *handle, alpm_cb_progress cb)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->progresscb = cb;
 | 
			
		||||
	handle->progresscb_ctx = ctx;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -784,29 +738,11 @@ int SYMEXPORT alpm_option_remove_assumeinstalled(alpm_handle_t *handle, const al
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_add_architecture(alpm_handle_t *handle, const char *arch)
 | 
			
		||||
{
 | 
			
		||||
	handle->architectures = alpm_list_add(handle->architectures, strdup(arch));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_architectures(alpm_handle_t *handle, alpm_list_t *arches)
 | 
			
		||||
int SYMEXPORT alpm_option_set_arch(alpm_handle_t *handle, const char *arch)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	if(handle->architectures) FREELIST(handle->architectures);
 | 
			
		||||
	handle->architectures = alpm_list_strdup(arches);
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_remove_architecture(alpm_handle_t *handle, const char *arch)
 | 
			
		||||
{
 | 
			
		||||
	char *vdata = NULL;
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	handle->architectures = alpm_list_remove_str(handle->architectures, arch, &vdata);
 | 
			
		||||
	if(vdata != NULL) {
 | 
			
		||||
		FREE(vdata);
 | 
			
		||||
		return 1;
 | 
			
		||||
	}
 | 
			
		||||
	if(handle->arch) FREE(handle->arch);
 | 
			
		||||
	STRDUP(handle->arch, arch, RET_ERR(handle, ALPM_ERR_MEMORY, -1));
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -919,15 +855,10 @@ int SYMEXPORT alpm_option_set_disable_dl_timeout(alpm_handle_t *handle,
 | 
			
		||||
		unsigned short disable_dl_timeout)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	handle->disable_dl_timeout = disable_dl_timeout;
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_option_set_parallel_downloads(alpm_handle_t *handle,
 | 
			
		||||
		unsigned int num_streams)
 | 
			
		||||
{
 | 
			
		||||
	CHECK_HANDLE(handle, return -1);
 | 
			
		||||
	ASSERT(num_streams >= 1, RET_ERR(handle, ALPM_ERR_WRONG_ARGS, -1));
 | 
			
		||||
	handle->parallel_downloads = num_streams;
 | 
			
		||||
#else
 | 
			
		||||
	(void)disable_dl_timeout; /* silence unused variable warnings */
 | 
			
		||||
#endif
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  handle.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -26,7 +26,6 @@
 | 
			
		||||
 | 
			
		||||
#include "alpm_list.h"
 | 
			
		||||
#include "alpm.h"
 | 
			
		||||
#include "trans.h"
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
#include <curl/curl.h>
 | 
			
		||||
@@ -35,23 +34,23 @@
 | 
			
		||||
#define EVENT(h, e) \
 | 
			
		||||
do { \
 | 
			
		||||
	if((h)->eventcb) { \
 | 
			
		||||
		(h)->eventcb((h)->eventcb_ctx, (alpm_event_t *) (e)); \
 | 
			
		||||
		(h)->eventcb((alpm_event_t *) (e)); \
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
#define QUESTION(h, q) \
 | 
			
		||||
do { \
 | 
			
		||||
	if((h)->questioncb) { \
 | 
			
		||||
		(h)->questioncb((h)->questioncb_ctx, (alpm_question_t *) (q)); \
 | 
			
		||||
		(h)->questioncb((alpm_question_t *) (q)); \
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
#define PROGRESS(h, e, p, per, n, r) \
 | 
			
		||||
do { \
 | 
			
		||||
	if((h)->progresscb) { \
 | 
			
		||||
		(h)->progresscb((h)->progresscb_ctx, e, p, per, n, r); \
 | 
			
		||||
		(h)->progresscb(e, p, per, n, r); \
 | 
			
		||||
	} \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
struct _alpm_handle_t {
 | 
			
		||||
struct __alpm_handle_t {
 | 
			
		||||
	/* internal usage */
 | 
			
		||||
	alpm_db_t *db_local;    /* local db pointer */
 | 
			
		||||
	alpm_list_t *dbs_sync;  /* List of (alpm_db_t *) */
 | 
			
		||||
@@ -60,12 +59,9 @@ struct _alpm_handle_t {
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBCURL
 | 
			
		||||
	/* libcurl handle */
 | 
			
		||||
	CURLM *curlm;
 | 
			
		||||
	alpm_list_t *server_errors;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	CURL *curl;             /* reusable curl_easy handle */
 | 
			
		||||
	unsigned short disable_dl_timeout;
 | 
			
		||||
	unsigned int parallel_downloads; /* number of download streams */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_LIBGPGME
 | 
			
		||||
	alpm_list_t *known_keys;  /* keys verified to be in our keychain */
 | 
			
		||||
@@ -73,17 +69,12 @@ struct _alpm_handle_t {
 | 
			
		||||
 | 
			
		||||
	/* callback functions */
 | 
			
		||||
	alpm_cb_log logcb;          /* Log callback function */
 | 
			
		||||
	void *logcb_ctx;
 | 
			
		||||
	alpm_cb_download dlcb;      /* Download callback function */
 | 
			
		||||
	void *dlcb_ctx;
 | 
			
		||||
	alpm_cb_totaldl totaldlcb;  /* Total download callback function */
 | 
			
		||||
	alpm_cb_fetch fetchcb;      /* Download file callback function */
 | 
			
		||||
	void *fetchcb_ctx;
 | 
			
		||||
	alpm_cb_event eventcb;
 | 
			
		||||
	void *eventcb_ctx;
 | 
			
		||||
	alpm_cb_question questioncb;
 | 
			
		||||
	void *questioncb_ctx;
 | 
			
		||||
	alpm_cb_progress progresscb;
 | 
			
		||||
	void *progresscb_ctx;
 | 
			
		||||
 | 
			
		||||
	/* filesystem paths */
 | 
			
		||||
	char *root;              /* Root path, default '/' */
 | 
			
		||||
@@ -103,7 +94,7 @@ struct _alpm_handle_t {
 | 
			
		||||
	alpm_list_t *assumeinstalled;   /* List of virtual packages used to satisfy dependencies */
 | 
			
		||||
 | 
			
		||||
	/* options */
 | 
			
		||||
	alpm_list_t *architectures; /* Architectures of packages we should allow */
 | 
			
		||||
	char *arch;              /* Architecture of packages we should allow */
 | 
			
		||||
	int usesyslog;           /* Use syslog instead of logfile? */ /* TODO move to frontend */
 | 
			
		||||
	int checkspace;          /* Check disk space before installing */
 | 
			
		||||
	char *dbext;             /* Sync DB extension */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  hook.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2015-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  hook.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2015-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2015-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								lib/libalpm/ini.c
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								lib/libalpm/ini.c
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
../../src/common/ini.c
 | 
			
		||||
							
								
								
									
										1
									
								
								lib/libalpm/ini.h
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								lib/libalpm/ini.h
									
									
									
									
									
										Symbolic link
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
../../src/common/ini.h
 | 
			
		||||
							
								
								
									
										13
									
								
								lib/libalpm/libalpm.pc.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								lib/libalpm/libalpm.pc.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
prefix=@prefix@
 | 
			
		||||
exec_prefix=@exec_prefix@
 | 
			
		||||
libdir=@libdir@
 | 
			
		||||
includedir=@includedir@
 | 
			
		||||
 | 
			
		||||
Name: libalpm
 | 
			
		||||
Description: Arch Linux package management library
 | 
			
		||||
URL: http://www.archlinux.org/pacman/
 | 
			
		||||
Version: @LIB_VERSION@
 | 
			
		||||
Requires.private: libarchive @pc_crypto@ @pc_libcurl@ @pc_gpgme@
 | 
			
		||||
Cflags: -I${includedir} @LFS_CFLAGS@
 | 
			
		||||
Libs: -L${libdir} -lalpm
 | 
			
		||||
Libs.private: @LIBS@ @pc_gpgme_libs@
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 * libarchive-compat.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2013-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2013-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -24,28 +24,48 @@
 | 
			
		||||
 | 
			
		||||
static inline int _alpm_archive_read_free(struct archive *archive)
 | 
			
		||||
{
 | 
			
		||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
 | 
			
		||||
	return archive_read_free(archive);
 | 
			
		||||
#else
 | 
			
		||||
	return archive_read_finish(archive);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int64_t _alpm_archive_compressed_ftell(struct archive *archive)
 | 
			
		||||
{
 | 
			
		||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
 | 
			
		||||
	return archive_filter_bytes(archive, -1);
 | 
			
		||||
#else
 | 
			
		||||
	return archive_position_compressed(archive);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int _alpm_archive_read_open_file(struct archive *archive,
 | 
			
		||||
		const char *filename, size_t block_size)
 | 
			
		||||
{
 | 
			
		||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
 | 
			
		||||
	return archive_read_open_filename(archive, filename, block_size);
 | 
			
		||||
#else
 | 
			
		||||
	return archive_read_open_file(archive, filename, block_size);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int _alpm_archive_filter_code(struct archive *archive)
 | 
			
		||||
{
 | 
			
		||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
 | 
			
		||||
	return archive_filter_code(archive, 0);
 | 
			
		||||
#else
 | 
			
		||||
	return archive_compression(archive);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline int _alpm_archive_read_support_filter_all(struct archive *archive)
 | 
			
		||||
{
 | 
			
		||||
#if ARCHIVE_VERSION_NUMBER >= 3000000
 | 
			
		||||
	return archive_read_support_filter_all(archive);
 | 
			
		||||
#else
 | 
			
		||||
	return archive_read_support_compression_all(archive);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif /* LIBARCHIVE_COMPAT_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  log.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
@@ -30,6 +30,11 @@
 | 
			
		||||
#include "util.h"
 | 
			
		||||
#include "alpm.h"
 | 
			
		||||
 | 
			
		||||
/** \addtogroup alpm_log Logging Functions
 | 
			
		||||
 * @brief Functions to log using libalpm
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
static int _alpm_log_leader(FILE *f, const char *prefix)
 | 
			
		||||
{
 | 
			
		||||
	time_t t = time(NULL);
 | 
			
		||||
@@ -42,6 +47,12 @@ static int _alpm_log_leader(FILE *f, const char *prefix)
 | 
			
		||||
	return fprintf(f, "[%s] [%s] ", timestamp, prefix);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** A printf-like function for logging.
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @param prefix caller-specific prefix for the log
 | 
			
		||||
 * @param fmt output format
 | 
			
		||||
 * @return 0 on success, -1 on error (pm_errno is set accordingly)
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
 | 
			
		||||
		const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
@@ -98,6 +109,8 @@ int SYMEXPORT alpm_logaction(alpm_handle_t *handle, const char *prefix,
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...)
 | 
			
		||||
{
 | 
			
		||||
	va_list args;
 | 
			
		||||
@@ -107,6 +120,6 @@ void _alpm_log(alpm_handle_t *handle, alpm_loglevel_t flag, const char *fmt, ...
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	va_start(args, fmt);
 | 
			
		||||
	handle->logcb(handle->logcb_ctx, flag, fmt, args);
 | 
			
		||||
	handle->logcb(flag, fmt, args);
 | 
			
		||||
	va_end(args);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  log.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *
 | 
			
		||||
 *  This program is free software; you can redistribute it and/or modify
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  package.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2005, 2006 by Christian Hamar <krics@linuxforum.hu>
 | 
			
		||||
@@ -21,7 +21,6 @@
 | 
			
		||||
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <limits.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
@@ -35,6 +34,12 @@
 | 
			
		||||
#include "handle.h"
 | 
			
		||||
#include "deps.h"
 | 
			
		||||
 | 
			
		||||
/** \addtogroup alpm_packages Package Functions
 | 
			
		||||
 * @brief Functions to manipulate libalpm packages
 | 
			
		||||
 * @{
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/** Free a package. */
 | 
			
		||||
int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return -1);
 | 
			
		||||
@@ -47,6 +52,7 @@ int SYMEXPORT alpm_pkg_free(alpm_pkg_t *pkg)
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Check the integrity (with md5) of a package from the sync cache. */
 | 
			
		||||
int SYMEXPORT alpm_pkg_checkmd5sum(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	char *fpath;
 | 
			
		||||
@@ -99,7 +105,6 @@ static alpm_list_t *_pkg_get_provides(alpm_pkg_t *pkg)   { return pkg->provides;
 | 
			
		||||
static alpm_list_t *_pkg_get_replaces(alpm_pkg_t *pkg)   { return pkg->replaces; }
 | 
			
		||||
static alpm_filelist_t *_pkg_get_files(alpm_pkg_t *pkg)  { return &(pkg->files); }
 | 
			
		||||
static alpm_list_t *_pkg_get_backup(alpm_pkg_t *pkg)     { return pkg->backup; }
 | 
			
		||||
static alpm_list_t *_pkg_get_xdata(alpm_pkg_t *pkg)      { return pkg->xdata; }
 | 
			
		||||
 | 
			
		||||
static void *_pkg_changelog_open(alpm_pkg_t UNUSED *pkg)
 | 
			
		||||
{
 | 
			
		||||
@@ -140,7 +145,7 @@ static int _pkg_force_load(alpm_pkg_t UNUSED *pkg) { return 0; }
 | 
			
		||||
/** The standard package operations struct. Get fields directly from the
 | 
			
		||||
 * struct itself with no abstraction layer or any type of lazy loading.
 | 
			
		||||
 */
 | 
			
		||||
const struct pkg_operations default_pkg_ops = {
 | 
			
		||||
struct pkg_operations default_pkg_ops = {
 | 
			
		||||
	.get_base        = _pkg_get_base,
 | 
			
		||||
	.get_desc        = _pkg_get_desc,
 | 
			
		||||
	.get_url         = _pkg_get_url,
 | 
			
		||||
@@ -164,7 +169,6 @@ const struct pkg_operations default_pkg_ops = {
 | 
			
		||||
	.get_replaces    = _pkg_get_replaces,
 | 
			
		||||
	.get_files       = _pkg_get_files,
 | 
			
		||||
	.get_backup      = _pkg_get_backup,
 | 
			
		||||
	.get_xdata       = _pkg_get_xdata,
 | 
			
		||||
 | 
			
		||||
	.changelog_open  = _pkg_changelog_open,
 | 
			
		||||
	.changelog_read  = _pkg_changelog_read,
 | 
			
		||||
@@ -194,12 +198,6 @@ const char SYMEXPORT *alpm_pkg_get_base(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->ops->get_base(pkg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_handle_t SYMEXPORT *alpm_pkg_get_handle(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
	return pkg->handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char SYMEXPORT *alpm_pkg_get_name(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
@@ -277,44 +275,6 @@ const char SYMEXPORT *alpm_pkg_get_base64_sig(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->base64_sig;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SYMEXPORT alpm_pkg_get_sig(alpm_pkg_t *pkg, unsigned char **sig, size_t *sig_len)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return -1);
 | 
			
		||||
 | 
			
		||||
	if(pkg->base64_sig) {
 | 
			
		||||
		int ret = alpm_decode_signature(pkg->base64_sig, sig, sig_len);
 | 
			
		||||
		if(ret != 0) {
 | 
			
		||||
			RET_ERR(pkg->handle, ALPM_ERR_SIG_INVALID, -1);
 | 
			
		||||
		}
 | 
			
		||||
		return 0;
 | 
			
		||||
	} else {
 | 
			
		||||
		char *pkgpath = NULL, *sigpath = NULL;
 | 
			
		||||
		alpm_errno_t err;
 | 
			
		||||
		int ret = -1;
 | 
			
		||||
 | 
			
		||||
		pkgpath = _alpm_filecache_find(pkg->handle, pkg->filename);
 | 
			
		||||
		if(!pkgpath) {
 | 
			
		||||
			GOTO_ERR(pkg->handle, ALPM_ERR_PKG_NOT_FOUND, cleanup);
 | 
			
		||||
		}
 | 
			
		||||
		sigpath = _alpm_sigpath(pkg->handle, pkgpath);
 | 
			
		||||
		if(!sigpath || _alpm_access(pkg->handle, NULL, sigpath, R_OK)) {
 | 
			
		||||
			GOTO_ERR(pkg->handle, ALPM_ERR_SIG_MISSING, cleanup);
 | 
			
		||||
		}
 | 
			
		||||
		err = _alpm_read_file(sigpath, sig, sig_len);
 | 
			
		||||
		if(err == ALPM_ERR_OK) {
 | 
			
		||||
			_alpm_log(pkg->handle, ALPM_LOG_DEBUG, "found detached signature %s with size %ld\n",
 | 
			
		||||
				sigpath, *sig_len);
 | 
			
		||||
		} else {
 | 
			
		||||
			GOTO_ERR(pkg->handle, err, cleanup);
 | 
			
		||||
		}
 | 
			
		||||
		ret = 0;
 | 
			
		||||
cleanup:
 | 
			
		||||
		FREE(pkgpath);
 | 
			
		||||
		FREE(sigpath);
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const char SYMEXPORT *alpm_pkg_get_arch(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
@@ -437,6 +397,7 @@ alpm_db_t SYMEXPORT *alpm_pkg_get_db(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->origin_data.db;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Open a package changelog for reading. */
 | 
			
		||||
void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
@@ -444,6 +405,7 @@ void SYMEXPORT *alpm_pkg_changelog_open(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->ops->changelog_open(pkg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Read data from an open changelog 'file stream'. */
 | 
			
		||||
size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
 | 
			
		||||
		const alpm_pkg_t *pkg, void *fp)
 | 
			
		||||
{
 | 
			
		||||
@@ -452,6 +414,7 @@ size_t SYMEXPORT alpm_pkg_changelog_read(void *ptr, size_t size,
 | 
			
		||||
	return pkg->ops->changelog_read(ptr, size, pkg, fp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Close a package changelog for reading. */
 | 
			
		||||
int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return -1);
 | 
			
		||||
@@ -459,6 +422,7 @@ int SYMEXPORT alpm_pkg_changelog_close(const alpm_pkg_t *pkg, void *fp)
 | 
			
		||||
	return pkg->ops->changelog_close(pkg, fp);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Open a package mtree file for reading. */
 | 
			
		||||
struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
@@ -466,6 +430,7 @@ struct archive SYMEXPORT *alpm_pkg_mtree_open(alpm_pkg_t * pkg)
 | 
			
		||||
	return pkg->ops->mtree_open(pkg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Read entry from an open mtree file. */
 | 
			
		||||
int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archive,
 | 
			
		||||
	struct archive_entry **entry)
 | 
			
		||||
{
 | 
			
		||||
@@ -474,6 +439,7 @@ int SYMEXPORT alpm_pkg_mtree_next(const alpm_pkg_t * pkg, struct archive *archiv
 | 
			
		||||
	return pkg->ops->mtree_next(pkg, archive, entry);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Close a package mtree file for reading. */
 | 
			
		||||
int SYMEXPORT alpm_pkg_mtree_close(const alpm_pkg_t * pkg, struct archive *archive)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return -1);
 | 
			
		||||
@@ -488,13 +454,6 @@ int SYMEXPORT alpm_pkg_has_scriptlet(alpm_pkg_t *pkg)
 | 
			
		||||
	return pkg->ops->has_scriptlet(pkg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_pkg_get_xdata(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	ASSERT(pkg != NULL, return NULL);
 | 
			
		||||
	pkg->handle->pm_errno = ALPM_ERR_OK;
 | 
			
		||||
	return pkg->ops->get_xdata(pkg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void find_requiredby(alpm_pkg_t *pkg, alpm_db_t *db, alpm_list_t **reqs,
 | 
			
		||||
		int optional)
 | 
			
		||||
{
 | 
			
		||||
@@ -551,16 +510,21 @@ static alpm_list_t *compute_requiredby(alpm_pkg_t *pkg, int optional)
 | 
			
		||||
	return reqs;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Compute the packages requiring a given package. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_pkg_compute_requiredby(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	return compute_requiredby(pkg, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Compute the packages optionally requiring a given package. */
 | 
			
		||||
alpm_list_t SYMEXPORT *alpm_pkg_compute_optionalfor(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	return compute_requiredby(pkg, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** @} */
 | 
			
		||||
 | 
			
		||||
alpm_file_t *_alpm_file_copy(alpm_file_t *dest,
 | 
			
		||||
		const alpm_file_t *src)
 | 
			
		||||
{
 | 
			
		||||
@@ -687,30 +651,6 @@ static void free_deplist(alpm_list_t *deps)
 | 
			
		||||
	alpm_list_free(deps);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string)
 | 
			
		||||
{
 | 
			
		||||
	alpm_pkg_xdata_t *pd;
 | 
			
		||||
	const char *sep;
 | 
			
		||||
	if(string == NULL || (sep = strchr(string, '=')) == NULL) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	CALLOC(pd, 1, sizeof(alpm_pkg_xdata_t), return NULL);
 | 
			
		||||
	STRNDUP(pd->name, string, sep - string, FREE(pd); return NULL);
 | 
			
		||||
	STRDUP(pd->value, sep + 1, FREE(pd->name); FREE(pd); return NULL);
 | 
			
		||||
 | 
			
		||||
	return pd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd)
 | 
			
		||||
{
 | 
			
		||||
	if(pd) {
 | 
			
		||||
		free(pd->name);
 | 
			
		||||
		free(pd->value);
 | 
			
		||||
		free(pd);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void _alpm_pkg_free(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	if(pkg == NULL) {
 | 
			
		||||
@@ -741,8 +681,6 @@ void _alpm_pkg_free(alpm_pkg_t *pkg)
 | 
			
		||||
	}
 | 
			
		||||
	alpm_list_free_inner(pkg->backup, (alpm_list_fn_free)_alpm_backup_free);
 | 
			
		||||
	alpm_list_free(pkg->backup);
 | 
			
		||||
	alpm_list_free_inner(pkg->xdata, (alpm_list_fn_free)_alpm_pkg_xdata_free);
 | 
			
		||||
	alpm_list_free(pkg->xdata);
 | 
			
		||||
	free_deplist(pkg->depends);
 | 
			
		||||
	free_deplist(pkg->optdepends);
 | 
			
		||||
	free_deplist(pkg->checkdepends);
 | 
			
		||||
@@ -826,6 +764,16 @@ alpm_pkg_t SYMEXPORT *alpm_pkg_find(alpm_list_t *haystack, const char *needle)
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** Test if a package should be ignored.
 | 
			
		||||
 *
 | 
			
		||||
 * Checks if the package is ignored via IgnorePkg, or if the package is
 | 
			
		||||
 * in a group ignored via IgnoreGroup.
 | 
			
		||||
 *
 | 
			
		||||
 * @param handle the context handle
 | 
			
		||||
 * @param pkg the package to test
 | 
			
		||||
 *
 | 
			
		||||
 * @return 1 if the package should be ignored, 0 otherwise
 | 
			
		||||
 */
 | 
			
		||||
int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	alpm_list_t *groups = NULL;
 | 
			
		||||
@@ -845,58 +793,3 @@ int SYMEXPORT alpm_pkg_should_ignore(alpm_handle_t *handle, alpm_pkg_t *pkg)
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* check that package metadata meets our requirements */
 | 
			
		||||
int _alpm_pkg_check_meta(alpm_pkg_t *pkg)
 | 
			
		||||
{
 | 
			
		||||
	char *c;
 | 
			
		||||
	int error_found = 0;
 | 
			
		||||
 | 
			
		||||
#define EPKGMETA(error) do { \
 | 
			
		||||
	error_found = -1; \
 | 
			
		||||
	_alpm_log(pkg->handle, ALPM_LOG_ERROR, error, pkg->name, pkg->version); \
 | 
			
		||||
} while(0)
 | 
			
		||||
 | 
			
		||||
	/* sanity check */
 | 
			
		||||
	if(pkg->handle == NULL) {
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* immediate bail if package doesn't have name or version */
 | 
			
		||||
	if(pkg->name == NULL || pkg->name[0] == '\0'
 | 
			
		||||
			|| pkg->version == NULL || pkg->version[0] == '\0') {
 | 
			
		||||
		_alpm_log(pkg->handle, ALPM_LOG_ERROR,
 | 
			
		||||
				_("invalid package metadata (name or version missing)"));
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if(pkg->name[0] == '-' || pkg->name[0] == '.') {
 | 
			
		||||
		EPKGMETA(_("invalid metadata for package %s-%s "
 | 
			
		||||
					"(package name cannot start with '.' or '-')\n"));
 | 
			
		||||
	}
 | 
			
		||||
	if(_alpm_fnmatch(pkg->name, "[![:alnum:]+_.@-]") == 0) {
 | 
			
		||||
		EPKGMETA(_("invalid metadata for package %s-%s "
 | 
			
		||||
					"(package name contains invalid characters)\n"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* multiple '-' in pkgver can cause local db entries for different packages
 | 
			
		||||
	 * to overlap (e.g. foo-1=2-3 and foo=1-2-3 both give foo-1-2-3) */
 | 
			
		||||
	if((c = strchr(pkg->version, '-')) && (strchr(c + 1, '-'))) {
 | 
			
		||||
		EPKGMETA(_("invalid metadata for package %s-%s "
 | 
			
		||||
					"(package version contains invalid characters)\n"));
 | 
			
		||||
	}
 | 
			
		||||
	if(strchr(pkg->version, '/')) {
 | 
			
		||||
		EPKGMETA(_("invalid metadata for package %s-%s "
 | 
			
		||||
					"(package version contains invalid characters)\n"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* local db entry is <pkgname>-<pkgver> */
 | 
			
		||||
	if(strlen(pkg->name) + strlen(pkg->version) + 1 > NAME_MAX) {
 | 
			
		||||
		EPKGMETA(_("invalid metadata for package %s-%s "
 | 
			
		||||
					"(package name and version too long)\n"));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
#undef EPKGMETA
 | 
			
		||||
 | 
			
		||||
	return error_found;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  package.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2006-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2006-2020 Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2002-2006 by Judd Vinet <jvinet@zeroflux.org>
 | 
			
		||||
 *  Copyright (c) 2005 by Aurelien Foret <orelien@chez.com>
 | 
			
		||||
 *  Copyright (c) 2006 by David Kimpe <dnaku@frugalware.org>
 | 
			
		||||
@@ -67,8 +67,6 @@ struct pkg_operations {
 | 
			
		||||
	alpm_filelist_t *(*get_files) (alpm_pkg_t *);
 | 
			
		||||
	alpm_list_t *(*get_backup) (alpm_pkg_t *);
 | 
			
		||||
 | 
			
		||||
	alpm_list_t *(*get_xdata) (alpm_pkg_t *);
 | 
			
		||||
 | 
			
		||||
	void *(*changelog_open) (alpm_pkg_t *);
 | 
			
		||||
	size_t (*changelog_read) (void *, size_t, const alpm_pkg_t *, void *);
 | 
			
		||||
	int (*changelog_close) (const alpm_pkg_t *, void *);
 | 
			
		||||
@@ -85,9 +83,9 @@ struct pkg_operations {
 | 
			
		||||
 * The actual definition is in package.c so it can have access to the
 | 
			
		||||
 * default accessor functions which are defined there.
 | 
			
		||||
 */
 | 
			
		||||
extern const struct pkg_operations default_pkg_ops;
 | 
			
		||||
extern struct pkg_operations default_pkg_ops;
 | 
			
		||||
 | 
			
		||||
struct _alpm_pkg_t {
 | 
			
		||||
struct __alpm_pkg_t {
 | 
			
		||||
	unsigned long name_hash;
 | 
			
		||||
	char *filename;
 | 
			
		||||
	char *base;
 | 
			
		||||
@@ -123,7 +121,7 @@ struct _alpm_pkg_t {
 | 
			
		||||
	alpm_list_t *removes; /* in transaction targets only */
 | 
			
		||||
	alpm_pkg_t *oldpkg; /* in transaction targets only */
 | 
			
		||||
 | 
			
		||||
	const struct pkg_operations *ops;
 | 
			
		||||
	struct pkg_operations *ops;
 | 
			
		||||
 | 
			
		||||
	alpm_filelist_t files;
 | 
			
		||||
 | 
			
		||||
@@ -138,8 +136,6 @@ struct _alpm_pkg_t {
 | 
			
		||||
	alpm_pkgreason_t reason;
 | 
			
		||||
	int scriptlet;
 | 
			
		||||
 | 
			
		||||
	alpm_list_t *xdata;
 | 
			
		||||
 | 
			
		||||
	/* Bitfield from alpm_dbinfrq_t */
 | 
			
		||||
	int infolevel;
 | 
			
		||||
	/* Bitfield from alpm_pkgvalidation_t */
 | 
			
		||||
@@ -162,9 +158,4 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle,
 | 
			
		||||
int _alpm_pkg_cmp(const void *p1, const void *p2);
 | 
			
		||||
int _alpm_pkg_compare_versions(alpm_pkg_t *local_pkg, alpm_pkg_t *pkg);
 | 
			
		||||
 | 
			
		||||
alpm_pkg_xdata_t *_alpm_pkg_parse_xdata(const char *string);
 | 
			
		||||
void _alpm_pkg_xdata_free(alpm_pkg_xdata_t *pd);
 | 
			
		||||
 | 
			
		||||
int _alpm_pkg_check_meta(alpm_pkg_t *pkg);
 | 
			
		||||
 | 
			
		||||
#endif /* ALPM_PACKAGE_H */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  pkghash.c
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2011-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2011-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
/*
 | 
			
		||||
 *  pkghash.h
 | 
			
		||||
 *
 | 
			
		||||
 *  Copyright (c) 2011-2024 Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
 *  Copyright (c) 2011-2020 Pacman Development Team <pacman-dev@archlinux.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
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
 * A combination of a hash table and a list, allowing for fast look-up
 | 
			
		||||
 * by package name but also iteration over the packages.
 | 
			
		||||
 */
 | 
			
		||||
struct _alpm_pkghash_t {
 | 
			
		||||
struct __alpm_pkghash_t {
 | 
			
		||||
	/** data held by the hash table */
 | 
			
		||||
	alpm_list_t **hash_table;
 | 
			
		||||
	/** head node of the hash table data in normal list format */
 | 
			
		||||
@@ -45,7 +45,7 @@ struct _alpm_pkghash_t {
 | 
			
		||||
	unsigned int limit;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
typedef struct _alpm_pkghash_t alpm_pkghash_t;
 | 
			
		||||
typedef struct __alpm_pkghash_t alpm_pkghash_t;
 | 
			
		||||
 | 
			
		||||
alpm_pkghash_t *_alpm_pkghash_create(unsigned int size);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
# Set of available languages.
 | 
			
		||||
ar
 | 
			
		||||
ast
 | 
			
		||||
az_AZ
 | 
			
		||||
bg
 | 
			
		||||
br
 | 
			
		||||
ca
 | 
			
		||||
 
 | 
			
		||||
@@ -15,11 +15,11 @@ XGETTEXT_OPTIONS = \
 | 
			
		||||
# This is the copyright holder that gets inserted into the header of the
 | 
			
		||||
# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
 | 
			
		||||
# package.
 | 
			
		||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@lists.archlinux.org>
 | 
			
		||||
COPYRIGHT_HOLDER = Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
 | 
			
		||||
# This is the email address or URL to which the translators shall report
 | 
			
		||||
# bugs in the untranslated strings.
 | 
			
		||||
MSGID_BUGS_ADDRESS = https://gitlab.archlinux.org/pacman/pacman/-/issues
 | 
			
		||||
MSGID_BUGS_ADDRESS = http://bugs.archlinux.org/index.php?project=3
 | 
			
		||||
 | 
			
		||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
 | 
			
		||||
# message catalogs shall be used.  It is usually empty.
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
# SOME DESCRIPTIVE TITLE.
 | 
			
		||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
 | 
			
		||||
# This file is distributed under the same license as the libalpm package.
 | 
			
		||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
# This file is distributed under the same license as the PACKAGE package.
 | 
			
		||||
#
 | 
			
		||||
# Translators:
 | 
			
		||||
# kraim <biskraim@gmail.com>, 2013
 | 
			
		||||
@@ -16,9 +16,9 @@
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2024-05-10 16:53+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2021-05-20 02:25+0000\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
 | 
			
		||||
"POT-Creation-Date: 2021-04-23 10:22+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
 | 
			
		||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
 | 
			
		||||
"Language-Team: Arabic (http://www.transifex.com/toofishes/archlinux-pacman/"
 | 
			
		||||
"language/ar/)\n"
 | 
			
		||||
@@ -29,17 +29,17 @@ msgstr ""
 | 
			
		||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
 | 
			
		||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
 | 
			
		||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s محدّثة -- سأتجاوزها\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:94
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s محدّثة -- سأعيد تثبيتها\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:99
 | 
			
		||||
#: lib/libalpm/add.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "downgrading package %s (%s => %s)\n"
 | 
			
		||||
msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
 | 
			
		||||
@@ -49,17 +49,17 @@ msgstr "سأُنزِل الحزمة %s (من %s إلى %s)\n"
 | 
			
		||||
msgid "cannot allocate disk archive object"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:389
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "warning given when extracting %s (%s)\n"
 | 
			
		||||
msgstr "تحذير عند الاستخراج %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:392
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "تعذّر استخراج %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:750 lib/libalpm/remove.c:550
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:580 lib/libalpm/remove.c:542
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr "تعذر إعادة تسمية %s إلى %s (%s)\n"
 | 
			
		||||
@@ -102,152 +102,137 @@ msgstr "الاستخراج: عدم الكتابة فوق المجلد بالمل
 | 
			
		||||
msgid "unable to extract %s.pacnew: path too long"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:335 lib/libalpm/util.c:605
 | 
			
		||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "غير  قادر على جلب مجلد العمل الحالي\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:340 lib/libalpm/util.c:610
 | 
			
		||||
#: lib/libalpm/util.c:665
 | 
			
		||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
 | 
			
		||||
#: lib/libalpm/util.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "غير قادر على تحويل المجلد إلى %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:410 lib/libalpm/util.c:789
 | 
			
		||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not restore working directory (%s)\n"
 | 
			
		||||
msgstr "تعذر استعادة مجلد العمل (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:579
 | 
			
		||||
#: lib/libalpm/add.c:583
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "حدثت مشكلة أثناء ترقية %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:585
 | 
			
		||||
#: lib/libalpm/add.c:589
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "حدثت مشكلة أثناء تثبيت %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:600
 | 
			
		||||
#: lib/libalpm/add.c:604
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr "غير قادر على تحديث مدخل قاعدة البيانات %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:610
 | 
			
		||||
#: lib/libalpm/add.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "غير قادر على إضافة المدخل '%s' إلى المخبئيات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:271
 | 
			
		||||
#: lib/libalpm/be_local.c:267
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading file %s: %s\n"
 | 
			
		||||
msgstr "خطأ أثناء قراءة الملف %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:382
 | 
			
		||||
#: lib/libalpm/be_local.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing invalid database: %s\n"
 | 
			
		||||
msgstr "تجري إزالة قاعدة البيانات الغير صالحة: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
 | 
			
		||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "غير قادر على إنشاء الدليل %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:322
 | 
			
		||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr "مدخل قاعدة بيانات غير صالح '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:616
 | 
			
		||||
#: lib/libalpm/be_local.c:598
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicated database entry '%s'\n"
 | 
			
		||||
msgstr "مدخل قاعدة بيانات مكرر '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:628
 | 
			
		||||
#: lib/libalpm/be_local.c:610
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "مدخل قاعدة بيانات معطوب '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:663
 | 
			
		||||
#, fuzzy, c-format
 | 
			
		||||
msgid "unknown install reason for package %s: %s\n"
 | 
			
		||||
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
 | 
			
		||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
 | 
			
		||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:859 lib/libalpm/util.c:254
 | 
			
		||||
#: lib/libalpm/util.c:270
 | 
			
		||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
 | 
			
		||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
 | 
			
		||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:428 lib/libalpm/util.c:253
 | 
			
		||||
#: lib/libalpm/util.c:269
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "غير قادر على فتح اللمف %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:595
 | 
			
		||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم الحزمة غير مطابق %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:601
 | 
			
		||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr "%s قاعدة البيانات غير متناسقة : إصدار الحزمة غير مطابق %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:806
 | 
			
		||||
#: lib/libalpm/be_local.c:776
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown validation type for package %s: %s\n"
 | 
			
		||||
msgstr "نوع التّحقق غير مألوف في الحزمة %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:841
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in local database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:255
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in package description\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
 | 
			
		||||
#: lib/libalpm/be_package.c:647
 | 
			
		||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
 | 
			
		||||
#: lib/libalpm/be_package.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "خطأ أثناء قراءة الحزمة %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
 | 
			
		||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading mtree of package %s: %s\n"
 | 
			
		||||
msgstr "خطأ أثناء قراءة  mtree في الحزمة %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:601
 | 
			
		||||
#: lib/libalpm/be_package.c:603
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "تعذّر تحليل ملف وصف الحزمة في %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:606
 | 
			
		||||
#: lib/libalpm/be_package.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "اسم الحزمة مفقود في %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:610
 | 
			
		||||
#: lib/libalpm/be_package.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "إصدارة الحزمة مفقودة في %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:614
 | 
			
		||||
#: lib/libalpm/be_package.c:616
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package version in %s\n"
 | 
			
		||||
msgstr "إصدارة الحزمة غير صالح في  %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:653
 | 
			
		||||
#: lib/libalpm/be_package.c:657
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "معلومات الحزمة مفقودة في %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:745
 | 
			
		||||
#: lib/libalpm/be_package.c:750
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read signature file: %s\n"
 | 
			
		||||
msgstr "فشل في قراءة ملف التّوقيع: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:958
 | 
			
		||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:971
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "required key missing from keyring\n"
 | 
			
		||||
msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n"
 | 
			
		||||
@@ -257,37 +242,32 @@ msgstr "مفتاح ضروري غير موجود في حلقة المفاتيح\n
 | 
			
		||||
msgid "removing invalid file: %s\n"
 | 
			
		||||
msgstr "يجري حذف ملف غير صالح: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:454
 | 
			
		||||
#: lib/libalpm/be_sync.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file '%s' from db '%s'\n"
 | 
			
		||||
msgstr "تعذّر تحليل ملف وصف الحزمة '%s' من قاعدة البيانات '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:469
 | 
			
		||||
#: lib/libalpm/be_sync.c:522
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not read db '%s' (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:502 lib/libalpm/be_sync.c:507
 | 
			
		||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
 | 
			
		||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة غير قانوني %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:512
 | 
			
		||||
#: lib/libalpm/be_sync.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
 | 
			
		||||
msgstr "%s قاعدة البيانات غير متناسقة : اسم ملف الحزمة طويل جدًا %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:577
 | 
			
		||||
#: lib/libalpm/be_sync.c:632
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown database file: %s\n"
 | 
			
		||||
msgstr "ملف قاعدة البيانات مجهول : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:695
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in sync database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:413
 | 
			
		||||
#: lib/libalpm/db.c:370
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "مسار قاعدة البيانات غير معروف\n"
 | 
			
		||||
@@ -307,12 +287,12 @@ msgstr "%s سيتم إزالتها بعد %s اعتمادياتها\n"
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr "%s سيتم تثبيتها قبل %s اعتمادياتها\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
 | 
			
		||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "تجاهل الحزمة %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:842
 | 
			
		||||
#: lib/libalpm/deps.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "تعذّر تحليل \"%s\"، اعتمادية لـ \"%s\"\n"
 | 
			
		||||
@@ -327,111 +307,80 @@ msgstr "تعذّر الحصول على معلومات نظام الملفات م
 | 
			
		||||
msgid "could not open file: %s: %s\n"
 | 
			
		||||
msgstr "تعذر فتح الملف: %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
 | 
			
		||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get filesystem information\n"
 | 
			
		||||
msgstr "غير قادر على جلب معلومات نظام الملفات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:254
 | 
			
		||||
#: lib/libalpm/diskspace.c:242
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get file information for %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
 | 
			
		||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine mount point for file %s\n"
 | 
			
		||||
msgstr "تعذّر تحديد نقطة الوصل من أجل الملف %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:366
 | 
			
		||||
#: lib/libalpm/diskspace.c:354
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
 | 
			
		||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine filesystem mount points\n"
 | 
			
		||||
msgstr "تعذّر تحديد نقاط وصل أنظمة الملفات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:397
 | 
			
		||||
#: lib/libalpm/diskspace.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine cachedir mount point %s\n"
 | 
			
		||||
msgstr "تعذّر تحديد نقطة وصل مجلد المخبئيات %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:450
 | 
			
		||||
#: lib/libalpm/diskspace.c:438
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine root mount point %s\n"
 | 
			
		||||
msgstr "غير قادر على تحديد نقطة وصل الجذر %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:498
 | 
			
		||||
#: lib/libalpm/diskspace.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s is mounted read only\n"
 | 
			
		||||
msgstr "القسم %s موصول بصفة القراءة فقط\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:128
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"too many errors from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:145
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:263
 | 
			
		||||
#: lib/libalpm/dload.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "القرص"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:438
 | 
			
		||||
#: lib/libalpm/dload.c:348
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to create temporary file for download\n"
 | 
			
		||||
msgstr "غير قادر على إنشاء ملف مؤقت للتحميل\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:550 lib/libalpm/dload.c:588 lib/libalpm/dload.c:602
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "فشل في استقبال الملف '%s' من %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:580
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr "فشل في استقبال الملف '%s' من %s : تم تجاوز حجم التحميل\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:728
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s يبدو غير موثوقًا: %jd/%jd بايت\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:823
 | 
			
		||||
#: lib/libalpm/dload.c:393
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid\n"
 | 
			
		||||
msgstr "العنوان '%s' غير صالح\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:929
 | 
			
		||||
#: lib/libalpm/dload.c:470 lib/libalpm/dload.c:491 lib/libalpm/dload.c:502
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to setup a download payload for %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "فشل في استقبال الملف '%s' من %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:941
 | 
			
		||||
#: lib/libalpm/dload.c:483
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl returned error %d from transfer\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr "فشل في استقبال الملف '%s' من %s : تم تجاوز حجم التحميل\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:965
 | 
			
		||||
#: lib/libalpm/dload.c:538
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl transfer error: %d\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s يبدو غير موثوقًا: %jd/%jd بايت\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1144 lib/libalpm/sync.c:845
 | 
			
		||||
#: lib/libalpm/dload.c:683 lib/libalpm/dload.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "تعذّر استقبال بعض الملفات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "download completed successfully but no file in the cache\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "tag td jpldg %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:40
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -548,7 +497,7 @@ msgstr "لا يوجد خواديم مهيأة للمستودع"
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr "المُبادلة مهيأة بالفعل"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr "لم يتم تهيئة المُبادلة"
 | 
			
		||||
@@ -558,86 +507,86 @@ msgstr "لم يتم تهيئة المُبادلة"
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr "الهدف مكرر"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicate filename"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr "المُبادلة غير مجهزة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr "أحبطت المُبادلة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr "العملية غير متوافقة مع نوع المُبادلة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "تتم محاولة بدء المُبادلة عند إلغاء قفل قاعدة البيانات"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:106
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to run transaction hooks"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "غير قادر على إيجاد أو قراءة الحزمة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "ألغيت العملية بسبب حزمة متجاهلة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "حزمة غير صالحة أو معطوبة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (checksum)"
 | 
			
		||||
msgstr "حزمة معطوبة أو غير صالحة (البصمة)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (PGP signature)"
 | 
			
		||||
msgstr "حزمة معطوبة أو غير صالحة (توقيع PGP)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package missing required signature"
 | 
			
		||||
msgstr "الحزمة مفقودة مطلوب توقيع"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr "غير قادر على فتح ملف الحزمة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr "غير قادر على مسح جميع ملفات الجزمة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package filename is not valid"
 | 
			
		||||
msgstr "اسم ملف الحزمة غير سليم"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package architecture is not valid"
 | 
			
		||||
msgstr "معمارية الحزمة غير سليمة"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find repository for target"
 | 
			
		||||
msgstr "تعذّر العثور على المستودع الهدف"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:130
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing PGP signature"
 | 
			
		||||
@@ -703,12 +652,12 @@ msgstr ""
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr "خطأ غير متوقع"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:164
 | 
			
		||||
#: lib/libalpm/handle.c:153
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "lock file missing %s\n"
 | 
			
		||||
msgstr "الملف المغلق مفقود  %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:170
 | 
			
		||||
#: lib/libalpm/handle.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "تعذّر إزالة ملف القفل %s\n"
 | 
			
		||||
@@ -780,7 +729,7 @@ msgstr ""
 | 
			
		||||
msgid "unable to run hook %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open directory: %s: %s\n"
 | 
			
		||||
msgstr "تعذّر فتح المجلد: %s: %s\n"
 | 
			
		||||
@@ -790,7 +739,7 @@ msgstr "تعذّر فتح المجلد: %s: %s\n"
 | 
			
		||||
msgid "could not open file: %s%s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:260
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not stat file %s: %s\n"
 | 
			
		||||
msgstr "تعذّر إحصاء الملف %s: %s\n"
 | 
			
		||||
@@ -800,320 +749,283 @@ msgstr "تعذّر إحصاء الملف %s: %s\n"
 | 
			
		||||
msgid "could not read directory: %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:614
 | 
			
		||||
#: lib/libalpm/package.c:578
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fully load metadata for package %s-%s\n"
 | 
			
		||||
msgstr "غير قادر على استيراد معلومات الميتا للحزمة %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package metadata (name or version missing)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:874
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
 | 
			
		||||
"'-')\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:878
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package version contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:895
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name and version too long)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:111
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "لم يعثر على %s في قاعدة البيانات -- يجري التجاوز\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:146
 | 
			
		||||
#: lib/libalpm/remove.c:154
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing %s from target list\n"
 | 
			
		||||
msgstr "يجري حذف %s من قائمة الأهداف\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:338
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"تعذر إزالة  الملف '%s': %s\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
 | 
			
		||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not backup %s due to PATH_MAX overflow\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:570
 | 
			
		||||
#: lib/libalpm/remove.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove %s (%s)\n"
 | 
			
		||||
msgstr "تعذّر إزالة %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:743
 | 
			
		||||
#: lib/libalpm/remove.c:735
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "تعذّر إزالة مدخل قاعدة البيانات %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:748
 | 
			
		||||
#: lib/libalpm/remove.c:740
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "تعذر إزالة المدخل '%s' من المخبئيات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:163
 | 
			
		||||
#: lib/libalpm/signing.c:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Public keyring not found; have you run '%s'?\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
 | 
			
		||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "GPGME error: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:275
 | 
			
		||||
#: lib/libalpm/signing.c:284
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "looking up key %s using WKD\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:289
 | 
			
		||||
#: lib/libalpm/signing.c:293
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "gpg error: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
 | 
			
		||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "keyring is not writable\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:537
 | 
			
		||||
#: lib/libalpm/signing.c:539
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" on keyserver\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:542
 | 
			
		||||
#: lib/libalpm/signing.c:544
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be imported\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:546
 | 
			
		||||
#: lib/libalpm/signing.c:548
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be looked up remotely\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1034
 | 
			
		||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1040
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: missing required signature\n"
 | 
			
		||||
msgstr "التوقيع المطلوب مفقود :%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:947
 | 
			
		||||
#: lib/libalpm/signing.c:958
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is marginal trust\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:955
 | 
			
		||||
#: lib/libalpm/signing.c:966
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is unknown trust\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:962
 | 
			
		||||
#: lib/libalpm/signing.c:973
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" should never be trusted\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:974
 | 
			
		||||
#: lib/libalpm/signing.c:985
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is unknown\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:983
 | 
			
		||||
#: lib/libalpm/signing.c:994
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is disabled\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:987
 | 
			
		||||
#: lib/libalpm/signing.c:998
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is expired\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:991
 | 
			
		||||
#: lib/libalpm/signing.c:1002
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is invalid\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
 | 
			
		||||
#: lib/libalpm/signing.c:1189
 | 
			
		||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
 | 
			
		||||
#: lib/libalpm/signing.c:1226
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature format error\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
 | 
			
		||||
#: lib/libalpm/signing.c:1183
 | 
			
		||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
 | 
			
		||||
#: lib/libalpm/signing.c:1220
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unsupported signature format\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:96
 | 
			
		||||
#: lib/libalpm/sync.c:99
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: يجري تجاهل تحديث الحزمة (%s => %s) \n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:108
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: يجري تجاهل إرجاع الحزمة (%s => %s) \n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#: lib/libalpm/sync.c:114
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: يجري الإرجاع من الإصدار %s إلى الإصدار %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:117
 | 
			
		||||
#: lib/libalpm/sync.c:120
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr "%s: (%s) المحلّي أحدث من  %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:158
 | 
			
		||||
#: lib/libalpm/sync.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "يجري تجاهل استبدال الحزمة (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:174
 | 
			
		||||
#: lib/libalpm/sync.c:177
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "تعذر استبدال %s بـ %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:475
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "packages %s and %s have the same filename: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:544 lib/libalpm/sync.c:616
 | 
			
		||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr "حدثت تعارضات حزميّة تعذّر تحليلها\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:564
 | 
			
		||||
#: lib/libalpm/sync.c:555
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
 | 
			
		||||
msgstr " يجري حذف '%s' من قائمة الأهداف بسبب تعارضها مع '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1002 lib/libalpm/sync.c:1169
 | 
			
		||||
#: lib/libalpm/sync.c:859
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: could not find package in cache\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "تعذّر استقبال بعض الملفات\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1048
 | 
			
		||||
#: lib/libalpm/sync.c:1054
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read file %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1306
 | 
			
		||||
#: lib/libalpm/sync.c:1241
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "not enough free disk space\n"
 | 
			
		||||
msgstr "لا توجد مساحة خالية كافية على القرص\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1328
 | 
			
		||||
#: lib/libalpm/sync.c:1263
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "تعذّر بدء مُبادلة الإزالة\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1336
 | 
			
		||||
#: lib/libalpm/sync.c:1271
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "فشل في بدء المُبادلة\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:369
 | 
			
		||||
#: lib/libalpm/trans.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "تعذّر إنشاء مجلد مؤقت\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:384
 | 
			
		||||
#: lib/libalpm/trans.c:379
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "تعذّر نسخ الملف المؤقّت إلى %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:415
 | 
			
		||||
#: lib/libalpm/trans.c:410
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"تعذر إزالة %s\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:419
 | 
			
		||||
#: lib/libalpm/trans.c:414
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "تعذّر إزالة المجلد المؤقّت %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:493
 | 
			
		||||
#: lib/libalpm/util.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to write to pipe (%s)\n"
 | 
			
		||||
msgstr "تعذّرت الكتابة إلى الأنبوب (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:552
 | 
			
		||||
#: lib/libalpm/util.c:545
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to read from pipe (%s)\n"
 | 
			
		||||
msgstr "تعذّرت القراءة من الأنبوب (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:622 lib/libalpm/util.c:628
 | 
			
		||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create pipe (%s)\n"
 | 
			
		||||
msgstr "غير قادر على إنشاء العبارة (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:636
 | 
			
		||||
#: lib/libalpm/util.c:623
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "تعذّر تفريع العملية إلى عملية جديدة (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:661
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "تعذّر التعديل على مجلد الجذر (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:681
 | 
			
		||||
#: lib/libalpm/util.c:658
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to execv failed (%s)\n"
 | 
			
		||||
msgstr "تعذّر مخاطبة execv (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:760
 | 
			
		||||
#: lib/libalpm/util.c:737
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "تعذّر مخاطبةwaitpid  (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:770
 | 
			
		||||
#: lib/libalpm/util.c:747
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "فشل تطبيق الأمر بشكل صحيح\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:777
 | 
			
		||||
#: lib/libalpm/util.c:754
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Unknown signal"
 | 
			
		||||
msgstr "إشارة مجهوله"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:779
 | 
			
		||||
#: lib/libalpm/util.c:756
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command terminated by signal %d: %s\n"
 | 
			
		||||
msgstr "تم انهاء الامر بواسطة الاشارة  %d: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:897
 | 
			
		||||
#: lib/libalpm/util.c:853
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "لا يوجد %s مخبئي، يجري الإنشاء...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:928
 | 
			
		||||
#: lib/libalpm/util.c:884
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't find or create package cache, using %s instead\n"
 | 
			
		||||
msgstr "تعذّر إيجاد أو إنشاء مخبئية للحزم ، استخدم %s بدلًا عنها\n"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,20 @@
 | 
			
		||||
# SOME DESCRIPTIVE TITLE.
 | 
			
		||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
 | 
			
		||||
# This file is distributed under the same license as the libalpm package.
 | 
			
		||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
# This file is distributed under the same license as the PACKAGE package.
 | 
			
		||||
#
 | 
			
		||||
# Translators:
 | 
			
		||||
# enolp <enolp@softastur.org>, 2015-2016,2018-2020
 | 
			
		||||
# Ḷḷumex03, 2014
 | 
			
		||||
# enolp <enolp@softastur.org>, 2015-2016,2018-2019
 | 
			
		||||
# Ḷḷumex03, 2014
 | 
			
		||||
# Ḷḷumex03, 2014
 | 
			
		||||
# Ḷḷumex03, 2014-2015
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2024-05-10 16:53+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
 | 
			
		||||
"Last-Translator: Ḷḷumex03, 2014\n"
 | 
			
		||||
"Language-Team: Asturian (http://app.transifex.com/toofishes/archlinux-pacman/"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
 | 
			
		||||
"POT-Creation-Date: 2021-04-23 10:22+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2019-10-07 08:12+0000\n"
 | 
			
		||||
"Last-Translator: Allan McRae <allan@archlinux.org>\n"
 | 
			
		||||
"Language-Team: Asturian (http://www.transifex.com/toofishes/archlinux-pacman/"
 | 
			
		||||
"language/ast/)\n"
 | 
			
		||||
"Language: ast\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
@@ -23,17 +22,17 @@ msgstr ""
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
 | 
			
		||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s ta anováu -- saltando\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:94
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s ta anováu -- reinstalando\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:99
 | 
			
		||||
#: lib/libalpm/add.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "downgrading package %s (%s => %s)\n"
 | 
			
		||||
msgstr "baxando de versión el paquete %s (%s => %s)\n"
 | 
			
		||||
@@ -43,17 +42,17 @@ msgstr "baxando de versión el paquete %s (%s => %s)\n"
 | 
			
		||||
msgid "cannot allocate disk archive object"
 | 
			
		||||
msgstr "nun pue allugase l'oxetu del archivu del discu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:389
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "warning given when extracting %s (%s)\n"
 | 
			
		||||
msgstr "alvertencia dada al estrayer el paquete %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:392
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "nun pudo estrayese %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:750 lib/libalpm/remove.c:550
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:580 lib/libalpm/remove.c:542
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr "nun pudo renomase %s a %s (%s)\n"
 | 
			
		||||
@@ -98,154 +97,139 @@ msgstr "estración: nun pue sobrescribise'l direutoriu col ficheru %s\n"
 | 
			
		||||
msgid "unable to extract %s.pacnew: path too long"
 | 
			
		||||
msgstr "nun pue estrayese %s.pacnew: camín perllargu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:335 lib/libalpm/util.c:605
 | 
			
		||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "nun pudo consiguise'l direutoriu de trabayu actual\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:340 lib/libalpm/util.c:610
 | 
			
		||||
#: lib/libalpm/util.c:665
 | 
			
		||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
 | 
			
		||||
#: lib/libalpm/util.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "nun pudo cambiase'l direutoriu a %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:410 lib/libalpm/util.c:789
 | 
			
		||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not restore working directory (%s)\n"
 | 
			
		||||
msgstr "nun pudo restaurase'l direutoriu de trabayu (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:579
 | 
			
		||||
#: lib/libalpm/add.c:583
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "asocedió un problema al anovar %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:585
 | 
			
		||||
#: lib/libalpm/add.c:589
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "asocedió un problema al instalar %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:600
 | 
			
		||||
#: lib/libalpm/add.c:604
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr "nun pudo anovase la entrada de base de datos %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:610
 | 
			
		||||
#: lib/libalpm/add.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "nun pudo amestase la entrada '%s' na caché\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:271
 | 
			
		||||
#: lib/libalpm/be_local.c:267
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading file %s: %s\n"
 | 
			
		||||
msgstr "fallu al lleer el ficheru %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:382
 | 
			
		||||
#: lib/libalpm/be_local.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing invalid database: %s\n"
 | 
			
		||||
msgstr "desaniciando base de datos non válida: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
 | 
			
		||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "nun pudo crease'l direutoriu %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:322
 | 
			
		||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr "nome non válidu pa la base de datos '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:616
 | 
			
		||||
#: lib/libalpm/be_local.c:598
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicated database entry '%s'\n"
 | 
			
		||||
msgstr "entrada de base de datos duplicada '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:628
 | 
			
		||||
#: lib/libalpm/be_local.c:610
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "entrada de base de datos toyida '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:663
 | 
			
		||||
#, fuzzy, c-format
 | 
			
		||||
msgid "unknown install reason for package %s: %s\n"
 | 
			
		||||
msgstr "triba de validación desconocida pal paquete %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
 | 
			
		||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
 | 
			
		||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:859 lib/libalpm/util.c:254
 | 
			
		||||
#: lib/libalpm/util.c:270
 | 
			
		||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
 | 
			
		||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
 | 
			
		||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:428 lib/libalpm/util.c:253
 | 
			
		||||
#: lib/libalpm/util.c:269
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "nun pudo abrise'l ficheru %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:595
 | 
			
		||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"la base de datos %s ye inconsistente: el nome nun concasa nel paquete %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:601
 | 
			
		||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"la base de datos %s ye inconsistente: la versión nun concasa nel paquete %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:806
 | 
			
		||||
#: lib/libalpm/be_local.c:776
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown validation type for package %s: %s\n"
 | 
			
		||||
msgstr "triba de validación desconocida pal paquete %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:841
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in local database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:255
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in package description\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
 | 
			
		||||
#: lib/libalpm/be_package.c:647
 | 
			
		||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
 | 
			
		||||
#: lib/libalpm/be_package.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "fallu al lleer el paquete %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
 | 
			
		||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading mtree of package %s: %s\n"
 | 
			
		||||
msgstr "fallu al lleer el mtree del paquete %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:601
 | 
			
		||||
#: lib/libalpm/be_package.c:603
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "nun pudo analizase'l ficheru de descripción del paquete en %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:606
 | 
			
		||||
#: lib/libalpm/be_package.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "nome de paquete faltante en %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:610
 | 
			
		||||
#: lib/libalpm/be_package.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "versión de paquete faltante en %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:614
 | 
			
		||||
#: lib/libalpm/be_package.c:616
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package version in %s\n"
 | 
			
		||||
msgstr "versión del paquete non válida en %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:653
 | 
			
		||||
#: lib/libalpm/be_package.c:657
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "datos meta de paquete faltantes en %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:745
 | 
			
		||||
#: lib/libalpm/be_package.c:750
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read signature file: %s\n"
 | 
			
		||||
msgstr "fallu al lleer el ficheru de robla: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:958
 | 
			
		||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:971
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "required key missing from keyring\n"
 | 
			
		||||
msgstr "clave riquida del aniellu claves faltante\n"
 | 
			
		||||
@@ -255,41 +239,36 @@ msgstr "clave riquida del aniellu claves faltante\n"
 | 
			
		||||
msgid "removing invalid file: %s\n"
 | 
			
		||||
msgstr "desaniciando ficheru non válidu: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:454
 | 
			
		||||
#: lib/libalpm/be_sync.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file '%s' from db '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"nun pudo analizase'l ficheru de descripción del paquete '%s' de la base de "
 | 
			
		||||
"datos '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:469
 | 
			
		||||
#: lib/libalpm/be_sync.c:522
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not read db '%s' (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:502 lib/libalpm/be_sync.c:507
 | 
			
		||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"la base de datos %s ye inconsistente: el nome del paquete %s ye illegal\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:512
 | 
			
		||||
#: lib/libalpm/be_sync.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"la base de datos %s ye inconsistente: el nome del paquete %s ye perllargu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:577
 | 
			
		||||
#: lib/libalpm/be_sync.c:632
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown database file: %s\n"
 | 
			
		||||
msgstr "ficheru de base de datos desconocíu: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:695
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in sync database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:413
 | 
			
		||||
#: lib/libalpm/db.c:370
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "nun ta definíu'l camín de la base de datos\n"
 | 
			
		||||
@@ -309,12 +288,12 @@ msgstr "%s desaniciaráse dempués de la so dependencia %s\n"
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr "%s desaniciaráse enantes de la so dependencia %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
 | 
			
		||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "inorando paquete %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:842
 | 
			
		||||
#: lib/libalpm/deps.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "nun pue iguase \"%s\", una dependencia de \"%s\"\n"
 | 
			
		||||
@@ -329,111 +308,80 @@ msgstr "nun pudo consiguise la información del sistema ficheros pa %s: %s\n"
 | 
			
		||||
msgid "could not open file: %s: %s\n"
 | 
			
		||||
msgstr "nun pudo abrise'l ficheru: %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
 | 
			
		||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get filesystem information\n"
 | 
			
		||||
msgstr "nun pudo consiguise la información del sistema de ficheros\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:254
 | 
			
		||||
#: lib/libalpm/diskspace.c:242
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get file information for %s\n"
 | 
			
		||||
msgstr "nun pudo consiguise la información pa %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
 | 
			
		||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine mount point for file %s\n"
 | 
			
		||||
msgstr "nun pudo determinase'l puntu montaxe pal ficheru %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:366
 | 
			
		||||
#: lib/libalpm/diskspace.c:354
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
 | 
			
		||||
msgstr "La partición %s ta enllena: necesítense %jd, %ju bloques llibres\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
 | 
			
		||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine filesystem mount points\n"
 | 
			
		||||
msgstr "nun pudieron determinase los puntos de montaxe del sistema ficheros\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:397
 | 
			
		||||
#: lib/libalpm/diskspace.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine cachedir mount point %s\n"
 | 
			
		||||
msgstr "nun pudo determinase'l puntu del direutoriu caché %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:450
 | 
			
		||||
#: lib/libalpm/diskspace.c:438
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine root mount point %s\n"
 | 
			
		||||
msgstr "nun pudo determinase'l puntu de montaxe root %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:498
 | 
			
		||||
#: lib/libalpm/diskspace.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s is mounted read only\n"
 | 
			
		||||
msgstr "La partición %s ta montada como namái llectura\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:128
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"too many errors from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:145
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:263
 | 
			
		||||
#: lib/libalpm/dload.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "discu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:438
 | 
			
		||||
#: lib/libalpm/dload.c:348
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to create temporary file for download\n"
 | 
			
		||||
msgstr "fallu al crear el ficheru temporal pa la descarga\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:550 lib/libalpm/dload.c:588 lib/libalpm/dload.c:602
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:580
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: tamañu de descarga superáu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:728
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:823
 | 
			
		||||
#: lib/libalpm/dload.c:393
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid\n"
 | 
			
		||||
msgstr "l'enllaz '%s' ye inválidu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:929
 | 
			
		||||
#: lib/libalpm/dload.c:470 lib/libalpm/dload.c:491 lib/libalpm/dload.c:502
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to setup a download payload for %s\n"
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:483
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr "fallu recibiendo'l ficheru '%s' de %s: tamañu de descarga superáu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:538
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:941
 | 
			
		||||
#: lib/libalpm/dload.c:683 lib/libalpm/dload.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl returned error %d from transfer\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:965
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl transfer error: %d\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1144 lib/libalpm/sync.c:845
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "fallu al recuperar dellos ficheros\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "download completed successfully but no file in the cache\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "fallu al lleer %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:40
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -550,7 +498,7 @@ msgstr "nun se configuró dengún sirvidor pal repositoriu"
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr "yá s'anició la transaición"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr "nun s'anició la transaición"
 | 
			
		||||
@@ -560,86 +508,86 @@ msgstr "nun s'anició la transaición"
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr "oxetivu duplicáu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicate filename"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr "nun se tresnó la transaición"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr "albortóse la transaición"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr "la operación nun ye compatible cola triba de transaición"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "intentu d'unviu de transaiciones al nun tar bloquiada la base de datos"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:106
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to run transaction hooks"
 | 
			
		||||
msgstr "fallu al executar los gabitos de transaiciones"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "nun pudo alcontrase o lleese'l paquete"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "operación encaboxada pola mor de ignorepkg"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "paquete toriáu o non válidu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (checksum)"
 | 
			
		||||
msgstr "paquete toriáu o non válidu (suma de comprobación)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (PGP signature)"
 | 
			
		||||
msgstr "paquete toriáu o non válidu (robla PGP)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package missing required signature"
 | 
			
		||||
msgstr "el paquete rique una robla que falta"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr "nun pue abrise'l ficheru de paquete"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr "nun puen desaniciase tolos ficheros del paquete"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package filename is not valid"
 | 
			
		||||
msgstr "el nome del paquete nun ye válidu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package architecture is not valid"
 | 
			
		||||
msgstr "l'arquietctura del paquete nun ye válida"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find repository for target"
 | 
			
		||||
msgstr "nun pudo alcontrase'l repositoriu pal oxetivu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:130
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing PGP signature"
 | 
			
		||||
@@ -705,12 +653,12 @@ msgstr ""
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr "fallu inesperáu"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:164
 | 
			
		||||
#: lib/libalpm/handle.c:153
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "lock file missing %s\n"
 | 
			
		||||
msgstr "falta'l ficheru de bloquéu %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:170
 | 
			
		||||
#: lib/libalpm/handle.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "nun pudo desaniciase'l ficheru de bloquéu %s\n"
 | 
			
		||||
@@ -782,7 +730,7 @@ msgstr ""
 | 
			
		||||
msgid "unable to run hook %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open directory: %s: %s\n"
 | 
			
		||||
msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
 | 
			
		||||
@@ -790,9 +738,9 @@ msgstr "nun pudo abrise'l direutoriu: %s: %s\n"
 | 
			
		||||
#: lib/libalpm/hook.c:575
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file: %s%s: %s\n"
 | 
			
		||||
msgstr "nun pudo abrise'l ficheru: %s%s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:260
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not stat file %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -800,318 +748,282 @@ msgstr ""
 | 
			
		||||
#: lib/libalpm/hook.c:621
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not read directory: %s: %s\n"
 | 
			
		||||
msgstr "nun pudo lleese'l ficheru: %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:614
 | 
			
		||||
#: lib/libalpm/package.c:578
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fully load metadata for package %s-%s\n"
 | 
			
		||||
msgstr "nun pudieron cargase dafechu los datos meta pal paquete %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package metadata (name or version missing)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:874
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
 | 
			
		||||
"'-')\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:878
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package version contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:895
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name and version too long)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:111
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "nun pudo alcontrase %s na base de datos -- saltando\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:146
 | 
			
		||||
#: lib/libalpm/remove.c:154
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing %s from target list\n"
 | 
			
		||||
msgstr "desaniciando %s de la llista d'oxetivos\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:338
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "nun pue desaniciase'l ficheru '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
 | 
			
		||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not backup %s due to PATH_MAX overflow\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:570
 | 
			
		||||
#: lib/libalpm/remove.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove %s (%s)\n"
 | 
			
		||||
msgstr "nun pue desaniciase %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:743
 | 
			
		||||
#: lib/libalpm/remove.c:735
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "nun pudo desaniciase la entrada de la base de datos %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:748
 | 
			
		||||
#: lib/libalpm/remove.c:740
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "nun pudo desaniciase la entrada '%s' de la caché\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:163
 | 
			
		||||
#: lib/libalpm/signing.c:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Public keyring not found; have you run '%s'?\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
 | 
			
		||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "GPGME error: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:275
 | 
			
		||||
#: lib/libalpm/signing.c:284
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "looking up key %s using WKD\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:289
 | 
			
		||||
#: lib/libalpm/signing.c:293
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "gpg error: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
 | 
			
		||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "keyring is not writable\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:537
 | 
			
		||||
#: lib/libalpm/signing.c:539
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" on keyserver\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:542
 | 
			
		||||
#: lib/libalpm/signing.c:544
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be imported\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:546
 | 
			
		||||
#: lib/libalpm/signing.c:548
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be looked up remotely\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1034
 | 
			
		||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1040
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: missing required signature\n"
 | 
			
		||||
msgstr "%s: falta la robla riquida\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:947
 | 
			
		||||
#: lib/libalpm/signing.c:958
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is marginal trust\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:955
 | 
			
		||||
#: lib/libalpm/signing.c:966
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is unknown trust\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:962
 | 
			
		||||
#: lib/libalpm/signing.c:973
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" should never be trusted\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:974
 | 
			
		||||
#: lib/libalpm/signing.c:985
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is unknown\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:983
 | 
			
		||||
#: lib/libalpm/signing.c:994
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is disabled\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:987
 | 
			
		||||
#: lib/libalpm/signing.c:998
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is expired\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:991
 | 
			
		||||
#: lib/libalpm/signing.c:1002
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is invalid\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
 | 
			
		||||
#: lib/libalpm/signing.c:1189
 | 
			
		||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
 | 
			
		||||
#: lib/libalpm/signing.c:1226
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature format error\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
 | 
			
		||||
#: lib/libalpm/signing.c:1183
 | 
			
		||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
 | 
			
		||||
#: lib/libalpm/signing.c:1220
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unsupported signature format\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:96
 | 
			
		||||
#: lib/libalpm/sync.c:99
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: inorando anovamientu del paquete (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:108
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: inorando baxada de versión del paquete (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#: lib/libalpm/sync.c:114
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: baxando de la versión %s a la %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:117
 | 
			
		||||
#: lib/libalpm/sync.c:120
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr "%s: llocal (%s) ye más nuevu que %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:158
 | 
			
		||||
#: lib/libalpm/sync.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "inorando troquéu de paquete (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:174
 | 
			
		||||
#: lib/libalpm/sync.c:177
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "nun pue trocase %s por %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:475
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "packages %s and %s have the same filename: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:544 lib/libalpm/sync.c:616
 | 
			
		||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr "deteutaos conflictos de paquete que nun puen iguase\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:564
 | 
			
		||||
#: lib/libalpm/sync.c:555
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
 | 
			
		||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"desaniciando '%s' de la llista d'oxetivos porque ta en conflictu con '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1002 lib/libalpm/sync.c:1169
 | 
			
		||||
#: lib/libalpm/sync.c:859
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: could not find package in cache\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "fallu al recuperar dellos ficheros\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1048
 | 
			
		||||
#: lib/libalpm/sync.c:1054
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read file %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1306
 | 
			
		||||
#: lib/libalpm/sync.c:1241
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "not enough free disk space\n"
 | 
			
		||||
msgstr "nun hai espaciu llibre abondu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1328
 | 
			
		||||
#: lib/libalpm/sync.c:1263
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "nun pudo unviase la transaición de desaniciu\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1336
 | 
			
		||||
#: lib/libalpm/sync.c:1271
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "nun pudo unviase la transaición\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:369
 | 
			
		||||
#: lib/libalpm/trans.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "nun pudo creaase'l direutoriu temporal\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:384
 | 
			
		||||
#: lib/libalpm/trans.c:379
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "nun pudo copiase'l ficheru temporal a %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:415
 | 
			
		||||
#: lib/libalpm/trans.c:410
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove %s\n"
 | 
			
		||||
msgstr "nun pudo desaniciase %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:419
 | 
			
		||||
#: lib/libalpm/trans.c:414
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "nun pudo desaniciase'l direutoriu temporal %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:493
 | 
			
		||||
#: lib/libalpm/util.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to write to pipe (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:552
 | 
			
		||||
#: lib/libalpm/util.c:545
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to read from pipe (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:622 lib/libalpm/util.c:628
 | 
			
		||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create pipe (%s)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:636
 | 
			
		||||
#: lib/libalpm/util.c:623
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "Nun pudo bifurcase un procesu nuevu (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:661
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "nun pudo cambiase'l direutoriu root (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:681
 | 
			
		||||
#: lib/libalpm/util.c:658
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to execv failed (%s)\n"
 | 
			
		||||
msgstr "llamada a execv fallida (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:760
 | 
			
		||||
#: lib/libalpm/util.c:737
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "llamada a waitpid fallida (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:770
 | 
			
		||||
#: lib/libalpm/util.c:747
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "el comandu falló al executase afayadizamente\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:777
 | 
			
		||||
#: lib/libalpm/util.c:754
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Unknown signal"
 | 
			
		||||
msgstr "Señal desconocida"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:779
 | 
			
		||||
#: lib/libalpm/util.c:756
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command terminated by signal %d: %s\n"
 | 
			
		||||
msgstr "comandu fináu pola señal %d: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:897
 | 
			
		||||
#: lib/libalpm/util.c:853
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "nun esiste'l caché %s, creando...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:928
 | 
			
		||||
#: lib/libalpm/util.c:884
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't find or create package cache, using %s instead\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,35 +1,36 @@
 | 
			
		||||
# SOME DESCRIPTIVE TITLE.
 | 
			
		||||
# Copyright (C) YEAR "Pacman Development Team <pacman-dev@archlinux.org>"
 | 
			
		||||
# This file is distributed under the same license as the libalpm package.
 | 
			
		||||
# Copyright (C) YEAR Pacman Development Team <pacman-dev@archlinux.org>
 | 
			
		||||
# This file is distributed under the same license as the PACKAGE package.
 | 
			
		||||
#
 | 
			
		||||
# Translators:
 | 
			
		||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024
 | 
			
		||||
# Galin Iskrenov <loot270@abv.bg>, 2017-2019
 | 
			
		||||
# Ivailo Monev <xakepa10@gmail.com>, 2014-2016
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Arch Linux Pacman package manager\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: https://gitlab.archlinux.org/pacman/pacman/-/issues\n"
 | 
			
		||||
"POT-Creation-Date: 2024-05-10 16:53+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2010-11-29 23:17+0000\n"
 | 
			
		||||
"Last-Translator: Galin Iskrenov <loot270@abv.bg>, 2017-2019,2022,2024\n"
 | 
			
		||||
"Language-Team: Bulgarian (http://app.transifex.com/toofishes/archlinux-pacman/language/bg/)\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: http://bugs.archlinux.org/index.php?project=3\n"
 | 
			
		||||
"POT-Creation-Date: 2021-04-23 10:22+1000\n"
 | 
			
		||||
"PO-Revision-Date: 2019-10-11 13:05+0000\n"
 | 
			
		||||
"Last-Translator: Galin Iskrenov <loot270@abv.bg>\n"
 | 
			
		||||
"Language-Team: Bulgarian (http://www.transifex.com/toofishes/archlinux-"
 | 
			
		||||
"pacman/language/bg/)\n"
 | 
			
		||||
"Language: bg\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=UTF-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Language: bg\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:90 lib/libalpm/sync.c:279
 | 
			
		||||
#: lib/libalpm/add.c:91 lib/libalpm/sync.c:290
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- skipping\n"
 | 
			
		||||
msgstr "%s-%s е актуален -- пропускане\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:94
 | 
			
		||||
#: lib/libalpm/add.c:95
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s-%s is up to date -- reinstalling\n"
 | 
			
		||||
msgstr "%s-%s е актуален -- преинсталиране\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:99
 | 
			
		||||
#: lib/libalpm/add.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "downgrading package %s (%s => %s)\n"
 | 
			
		||||
msgstr "понижаване на пакет %s (%s => %s)\n"
 | 
			
		||||
@@ -39,17 +40,17 @@ msgstr "понижаване на пакет %s (%s => %s)\n"
 | 
			
		||||
msgid "cannot allocate disk archive object"
 | 
			
		||||
msgstr "не се открие указания архив на диск"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:389
 | 
			
		||||
#: lib/libalpm/add.c:143 lib/libalpm/util.c:382
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "warning given when extracting %s (%s)\n"
 | 
			
		||||
msgstr "има предупреждение при извличане %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:392
 | 
			
		||||
#: lib/libalpm/add.c:146 lib/libalpm/util.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not extract %s (%s)\n"
 | 
			
		||||
msgstr "не може да се извлече %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:750 lib/libalpm/remove.c:550
 | 
			
		||||
#: lib/libalpm/add.c:159 lib/libalpm/dload.c:580 lib/libalpm/remove.c:542
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not rename %s to %s (%s)\n"
 | 
			
		||||
msgstr "не може да се преименува %s на %s (%s)\n"
 | 
			
		||||
@@ -57,7 +58,9 @@ msgstr "не може да се преименува %s на %s (%s)\n"
 | 
			
		||||
#: lib/libalpm/add.c:210
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "file not found in file list for package %s. skipping extraction of %s\n"
 | 
			
		||||
msgstr "файл не е намерен в листа с файлове на пекет %s. пропускане извличането на %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"файл не е намерен в листа с файлове на пекет %s. пропускане извличането на "
 | 
			
		||||
"%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:219
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -69,14 +72,18 @@ msgstr "неспешно извличането на %s%s: пътят е твъ
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory permissions differ on %s\n"
 | 
			
		||||
"filesystem: %o  package: %o\n"
 | 
			
		||||
msgstr "разлика в правата на папка за %s\nfilesystem: %o  пакет: %o\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"разлика в правата на папка за %s\n"
 | 
			
		||||
"filesystem: %o  пакет: %o\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:276
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"directory ownership differs on %s\n"
 | 
			
		||||
"filesystem: %u:%u  package: %u:%u\n"
 | 
			
		||||
msgstr "правата на директория се различава от %s\nfilesystem: %u:%u пакет: %u:%u\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"правата на директория се различава от %s\n"
 | 
			
		||||
"filesystem: %u:%u пакет: %u:%u\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:292
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -88,152 +95,137 @@ msgstr "извличане: не се презаписва папка с фай
 | 
			
		||||
msgid "unable to extract %s.pacnew: path too long"
 | 
			
		||||
msgstr "неспешно извличането на %s.pacnew: пътят е твърде дълъг"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:510 lib/libalpm/util.c:335 lib/libalpm/util.c:605
 | 
			
		||||
#: lib/libalpm/add.c:513 lib/libalpm/util.c:334 lib/libalpm/util.c:592
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get current working directory\n"
 | 
			
		||||
msgstr "не може да се разбере текущата директория\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:515 lib/libalpm/util.c:340 lib/libalpm/util.c:610
 | 
			
		||||
#: lib/libalpm/util.c:665
 | 
			
		||||
#: lib/libalpm/add.c:518 lib/libalpm/util.c:339 lib/libalpm/util.c:597
 | 
			
		||||
#: lib/libalpm/util.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change directory to %s (%s)\n"
 | 
			
		||||
msgstr "не може да се смени директория на %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:571 lib/libalpm/util.c:410 lib/libalpm/util.c:789
 | 
			
		||||
#: lib/libalpm/add.c:575 lib/libalpm/util.c:403 lib/libalpm/util.c:766
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not restore working directory (%s)\n"
 | 
			
		||||
msgstr "не може да се възстанови работната директория (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:579
 | 
			
		||||
#: lib/libalpm/add.c:583
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while upgrading %s\n"
 | 
			
		||||
msgstr "възникнал проблем при подновяване %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:585
 | 
			
		||||
#: lib/libalpm/add.c:589
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "problem occurred while installing %s\n"
 | 
			
		||||
msgstr "възникнал проблем при инсталиране %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:600
 | 
			
		||||
#: lib/libalpm/add.c:604
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not update database entry %s-%s\n"
 | 
			
		||||
msgstr "не може да се поднови запис в базата %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/add.c:610
 | 
			
		||||
#: lib/libalpm/add.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not add entry '%s' in cache\n"
 | 
			
		||||
msgstr "не може да се добави запис '%s' в кеша\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:271
 | 
			
		||||
#: lib/libalpm/be_local.c:267
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading file %s: %s\n"
 | 
			
		||||
msgstr "грешка при четене на файл %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:382
 | 
			
		||||
#: lib/libalpm/be_local.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing invalid database: %s\n"
 | 
			
		||||
msgstr "премахване на невалидна база: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:433 lib/libalpm/be_local.c:947
 | 
			
		||||
#: lib/libalpm/be_local.c:415 lib/libalpm/be_local.c:905
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create directory %s: %s\n"
 | 
			
		||||
msgstr "не се създава директория %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:608 lib/libalpm/be_sync.c:322
 | 
			
		||||
#: lib/libalpm/be_local.c:590 lib/libalpm/be_sync.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid name for database entry '%s'\n"
 | 
			
		||||
msgstr "невалидно име за запис в базата '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:616
 | 
			
		||||
#: lib/libalpm/be_local.c:598
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicated database entry '%s'\n"
 | 
			
		||||
msgstr "дублиран запис в базата '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:628
 | 
			
		||||
#: lib/libalpm/be_local.c:610
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "corrupted database entry '%s'\n"
 | 
			
		||||
msgstr "повреден запис в базата '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:663
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown install reason for package %s: %s\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:743 lib/libalpm/be_local.c:856
 | 
			
		||||
#: lib/libalpm/be_local.c:996 lib/libalpm/be_local.c:1102
 | 
			
		||||
#: lib/libalpm/diskspace.c:135 lib/libalpm/dload.c:859 lib/libalpm/util.c:254
 | 
			
		||||
#: lib/libalpm/util.c:270
 | 
			
		||||
#: lib/libalpm/be_local.c:713 lib/libalpm/be_local.c:809
 | 
			
		||||
#: lib/libalpm/be_local.c:954 lib/libalpm/be_local.c:1051
 | 
			
		||||
#: lib/libalpm/diskspace.c:131 lib/libalpm/dload.c:428 lib/libalpm/util.c:253
 | 
			
		||||
#: lib/libalpm/util.c:269
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open file %s: %s\n"
 | 
			
		||||
msgstr "не се отваря файл %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:759 lib/libalpm/be_sync.c:595
 | 
			
		||||
#: lib/libalpm/be_local.c:729 lib/libalpm/be_sync.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: name mismatch on package %s\n"
 | 
			
		||||
msgstr "%s несъответствие в базата: името не съответства на пакета %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:765 lib/libalpm/be_sync.c:601
 | 
			
		||||
#: lib/libalpm/be_local.c:735 lib/libalpm/be_sync.c:656
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: version mismatch on package %s\n"
 | 
			
		||||
msgstr "%s несъответствие в базата: версията не съответства на пакета %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:806
 | 
			
		||||
#: lib/libalpm/be_local.c:776
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown validation type for package %s: %s\n"
 | 
			
		||||
msgstr "непознат валидиращ тип на пакета %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_local.c:841
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in local database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:255
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in package description\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:482 lib/libalpm/be_package.c:635
 | 
			
		||||
#: lib/libalpm/be_package.c:647
 | 
			
		||||
#: lib/libalpm/be_package.c:479 lib/libalpm/be_package.c:637
 | 
			
		||||
#: lib/libalpm/be_package.c:650
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading package %s: %s\n"
 | 
			
		||||
msgstr "грешка при четене на пакет %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:495 lib/libalpm/be_package.c:518
 | 
			
		||||
#: lib/libalpm/be_package.c:493 lib/libalpm/be_package.c:517
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "error while reading mtree of package %s: %s\n"
 | 
			
		||||
msgstr "грешка при зареждане на mtree на пакет %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:601
 | 
			
		||||
#: lib/libalpm/be_package.c:603
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file in %s\n"
 | 
			
		||||
msgstr "не може да се анализира описателния файл в %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:606
 | 
			
		||||
#: lib/libalpm/be_package.c:608
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package name in %s\n"
 | 
			
		||||
msgstr "липсващо име на пакет в %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:610
 | 
			
		||||
#: lib/libalpm/be_package.c:612
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package version in %s\n"
 | 
			
		||||
msgstr "липсваща версия на пакет в %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:614
 | 
			
		||||
#: lib/libalpm/be_package.c:616
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package version in %s\n"
 | 
			
		||||
msgstr "невалидна версия на пакет в %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:653
 | 
			
		||||
#: lib/libalpm/be_package.c:657
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing package metadata in %s\n"
 | 
			
		||||
msgstr "липсват метаданни за пакета %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:745
 | 
			
		||||
#: lib/libalpm/be_package.c:750
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read signature file: %s\n"
 | 
			
		||||
msgstr "не се чете подписващият файл: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_package.c:768 lib/libalpm/sync.c:958
 | 
			
		||||
#: lib/libalpm/be_package.c:779 lib/libalpm/sync.c:971
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "required key missing from keyring\n"
 | 
			
		||||
msgstr "нужния ключ липсва от keyring\n"
 | 
			
		||||
@@ -243,37 +235,32 @@ msgstr "нужния ключ липсва от keyring\n"
 | 
			
		||||
msgid "removing invalid file: %s\n"
 | 
			
		||||
msgstr "премахване невалиден файл: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:454
 | 
			
		||||
#: lib/libalpm/be_sync.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not parse package description file '%s' from db '%s'\n"
 | 
			
		||||
msgstr "не може да се анализира описателния файл '%s' от db '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:469
 | 
			
		||||
#: lib/libalpm/be_sync.c:522
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not read db '%s' (%s)\n"
 | 
			
		||||
msgstr "не да се прочете db '%s' (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:502 lib/libalpm/be_sync.c:507
 | 
			
		||||
#: lib/libalpm/be_sync.c:556 lib/libalpm/be_sync.c:561
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is illegal\n"
 | 
			
		||||
msgstr "%s базата е непълна: името на пакета %s е  недопустимо\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:512
 | 
			
		||||
#: lib/libalpm/be_sync.c:566
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s database is inconsistent: filename of package %s is too long\n"
 | 
			
		||||
msgstr "%s базата е непълна: името на пакета %s е твърде дълго\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:577
 | 
			
		||||
#: lib/libalpm/be_sync.c:632
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unknown database file: %s\n"
 | 
			
		||||
msgstr "непознат датабаза файл: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/be_sync.c:695
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unknown key '%s' in sync database\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/db.c:413
 | 
			
		||||
#: lib/libalpm/db.c:370
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "database path is undefined\n"
 | 
			
		||||
msgstr "пътя към базата е неопределен\n"
 | 
			
		||||
@@ -293,12 +280,12 @@ msgstr "%s ще бъде премахната след зависимостта
 | 
			
		||||
msgid "%s will be installed before its %s dependency\n"
 | 
			
		||||
msgstr "%s ще бъде инсталиран преди зависимостта %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:666 lib/libalpm/deps.c:697
 | 
			
		||||
#: lib/libalpm/deps.c:681 lib/libalpm/deps.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package %s-%s\n"
 | 
			
		||||
msgstr "пренебрегване на пакет %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/deps.c:842
 | 
			
		||||
#: lib/libalpm/deps.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot resolve \"%s\", a dependency of \"%s\"\n"
 | 
			
		||||
msgstr "не може да се разреши \"%s\", зависи от \"%s\"\n"
 | 
			
		||||
@@ -313,111 +300,84 @@ msgstr "не се получава системната информация з
 | 
			
		||||
msgid "could not open file: %s: %s\n"
 | 
			
		||||
msgstr "не се отворя файл: %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:154 lib/libalpm/diskspace.c:167
 | 
			
		||||
#: lib/libalpm/diskspace.c:146 lib/libalpm/diskspace.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get filesystem information\n"
 | 
			
		||||
msgstr "не се получава системна информация\n\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"не се получава системна информация\n"
 | 
			
		||||
"\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:254
 | 
			
		||||
#: lib/libalpm/diskspace.c:242
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not get file information for %s\n"
 | 
			
		||||
msgstr "неможе да се вземе информация отностно %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:268 lib/libalpm/diskspace.c:327
 | 
			
		||||
#: lib/libalpm/diskspace.c:256 lib/libalpm/diskspace.c:315
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine mount point for file %s\n"
 | 
			
		||||
msgstr "не може да се определи точката за монтиране на %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:366
 | 
			
		||||
#: lib/libalpm/diskspace.c:354
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s too full: %jd blocks needed, %ju blocks free\n"
 | 
			
		||||
msgstr "Партишанът %s е твърде пълен: %jd блока са нужни, %ju блока свободни\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:391 lib/libalpm/diskspace.c:445
 | 
			
		||||
#: lib/libalpm/diskspace.c:379 lib/libalpm/diskspace.c:433
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine filesystem mount points\n"
 | 
			
		||||
msgstr "не може да се опреди filesystem mount points\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:397
 | 
			
		||||
#: lib/libalpm/diskspace.c:385
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine cachedir mount point %s\n"
 | 
			
		||||
msgstr "не може да се определи cachedir mount point %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:450
 | 
			
		||||
#: lib/libalpm/diskspace.c:438
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not determine root mount point %s\n"
 | 
			
		||||
msgstr "не може да се определи root mount point %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/diskspace.c:498
 | 
			
		||||
#: lib/libalpm/diskspace.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Partition %s is mounted read only\n"
 | 
			
		||||
msgstr "Дялът %s е монтиран само за четене\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:128
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"too many errors from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr "твърде много грешки от %s, прескачане на останалото от транзакцията\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:145
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "fatal error from %s, skipping for the remainder of this transaction\n"
 | 
			
		||||
msgstr "фатална грешка от %s, прескачам остатъка от тази транзакция\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:263
 | 
			
		||||
#: lib/libalpm/dload.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "disk"
 | 
			
		||||
msgstr "диск"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:438
 | 
			
		||||
#: lib/libalpm/dload.c:348
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to create temporary file for download\n"
 | 
			
		||||
msgstr "не може да се създаде временен файл за сваляне\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:550 lib/libalpm/dload.c:588 lib/libalpm/dload.c:602
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "неуспех при извличане на файл '%s' от %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:580
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr "неуспех при получаването на файл '%s' от %s : очакваният размер за сваляне е надвишен\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:728
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s изглежда частичен: %jd/%jd bytes\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:823
 | 
			
		||||
#: lib/libalpm/dload.c:393
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "url '%s' is invalid\n"
 | 
			
		||||
msgstr "url '%s' е невалиден\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:929
 | 
			
		||||
#: lib/libalpm/dload.c:470 lib/libalpm/dload.c:491 lib/libalpm/dload.c:502
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to setup a download payload for %s\n"
 | 
			
		||||
msgstr "Неуспешно настройване на нужното за изтегляне %s\n"
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : %s\n"
 | 
			
		||||
msgstr "неуспех при извличане на файл '%s' от %s : %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:941
 | 
			
		||||
#: lib/libalpm/dload.c:483
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl returned error %d from transfer\n"
 | 
			
		||||
msgstr "curl върна грешка %d при трансфера\n"
 | 
			
		||||
msgid "failed retrieving file '%s' from %s : expected download size exceeded\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
"неуспех при получаването на файл '%s' от %s : очакваният размер за сваляне е "
 | 
			
		||||
"надвишен\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:965
 | 
			
		||||
#: lib/libalpm/dload.c:538
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "curl transfer error: %d\n"
 | 
			
		||||
msgstr "curl трансферна грешка: %d\n"
 | 
			
		||||
msgid "%s appears to be truncated: %jd/%jd bytes\n"
 | 
			
		||||
msgstr "%s изглежда частичен: %jd/%jd bytes\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1144 lib/libalpm/sync.c:845
 | 
			
		||||
#: lib/libalpm/dload.c:683 lib/libalpm/dload.c:712
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "неуспех при извличане на файлове\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/dload.c:1167
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "download completed successfully but no file in the cache\n"
 | 
			
		||||
msgstr "изтеглянето завърши успешно, но няма файл в кеша\n"
 | 
			
		||||
msgid "failed to download %s\n"
 | 
			
		||||
msgstr "неуспех при сваляне на %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:40
 | 
			
		||||
#, c-format
 | 
			
		||||
@@ -534,7 +494,7 @@ msgstr "няма конфигуриран сърър за източник"
 | 
			
		||||
msgid "transaction already initialized"
 | 
			
		||||
msgstr "транзакцията вече е инициализирана"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:96
 | 
			
		||||
#: lib/libalpm/error.c:90 lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not initialized"
 | 
			
		||||
msgstr " транзакцията не е инициализирана"
 | 
			
		||||
@@ -544,86 +504,86 @@ msgstr " транзакцията не е инициализирана"
 | 
			
		||||
msgid "duplicate target"
 | 
			
		||||
msgstr "дублирана цел"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:94
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "duplicate filename"
 | 
			
		||||
msgstr "дублиране на файлово име"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#: lib/libalpm/error.c:96
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction not prepared"
 | 
			
		||||
msgstr "транзакцията не е подготвена"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#: lib/libalpm/error.c:98
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction aborted"
 | 
			
		||||
msgstr "транзакцията е преустановена"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#: lib/libalpm/error.c:100
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation not compatible with the transaction type"
 | 
			
		||||
msgstr "операцията е несъвместима с типа транзакция"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#: lib/libalpm/error.c:102
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "transaction commit attempt when database is not locked"
 | 
			
		||||
msgstr "транзакцията иска достъп до незаключена база"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:106
 | 
			
		||||
#: lib/libalpm/error.c:104
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to run transaction hooks"
 | 
			
		||||
msgstr "неуспех при пускането на транзакционни куки"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#: lib/libalpm/error.c:107
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find or read package"
 | 
			
		||||
msgstr "няма или не се чете пакет"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#: lib/libalpm/error.c:109
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "operation cancelled due to ignorepkg"
 | 
			
		||||
msgstr "отменена операция според ignorepkg"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#: lib/libalpm/error.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package"
 | 
			
		||||
msgstr "невалиден или повреден пакет"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#: lib/libalpm/error.c:113
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (checksum)"
 | 
			
		||||
msgstr "невалиден или повреден пакет (checksum)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#: lib/libalpm/error.c:115
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid or corrupted package (PGP signature)"
 | 
			
		||||
msgstr "невалиден или повреден пакет (PGP signature)"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#: lib/libalpm/error.c:117
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package missing required signature"
 | 
			
		||||
msgstr "липсва изискващ се подпис на пакет"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#: lib/libalpm/error.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot open package file"
 | 
			
		||||
msgstr "не се отваря пакетен файл"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#: lib/libalpm/error.c:121
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove all files for package"
 | 
			
		||||
msgstr "не се премахват всички файлове на пакета"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#: lib/libalpm/error.c:123
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package filename is not valid"
 | 
			
		||||
msgstr "името на пакета не е валидно"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#: lib/libalpm/error.c:125
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "package architecture is not valid"
 | 
			
		||||
msgstr "архитектурата на пакета не е валидна"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:127
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find repository for target"
 | 
			
		||||
msgstr "не може да се открие източник за целта"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/error.c:130
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "missing PGP signature"
 | 
			
		||||
@@ -689,12 +649,12 @@ msgstr "компилиран без поддръжка на подпис"
 | 
			
		||||
msgid "unexpected error"
 | 
			
		||||
msgstr "неочаквана грешка"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:164
 | 
			
		||||
#: lib/libalpm/handle.c:153
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "lock file missing %s\n"
 | 
			
		||||
msgstr "липсва заключващ файл %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/handle.c:170
 | 
			
		||||
#: lib/libalpm/handle.c:159
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove lock file %s\n"
 | 
			
		||||
msgstr "не се премахва заключен файл %s\n"
 | 
			
		||||
@@ -766,7 +726,7 @@ msgstr "кука %s ред %d: невъзможно да се зададе оп
 | 
			
		||||
msgid "unable to run hook %s: %s\n"
 | 
			
		||||
msgstr "невъзможно е пускане на куката %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:378
 | 
			
		||||
#: lib/libalpm/hook.c:547 lib/libalpm/hook.c:559 lib/libalpm/remove.c:386
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not open directory: %s: %s\n"
 | 
			
		||||
msgstr "не се отваря папка: %s: %s\n"
 | 
			
		||||
@@ -776,7 +736,7 @@ msgstr "не се отваря папка: %s: %s\n"
 | 
			
		||||
msgid "could not open file: %s%s: %s\n"
 | 
			
		||||
msgstr "не може да се отвори файл: %s%s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:260
 | 
			
		||||
#: lib/libalpm/hook.c:595 lib/libalpm/util.c:259
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not stat file %s: %s\n"
 | 
			
		||||
msgstr "не се коригира %s: %s\n"
 | 
			
		||||
@@ -786,315 +746,279 @@ msgstr "не се коригира %s: %s\n"
 | 
			
		||||
msgid "could not read directory: %s: %s\n"
 | 
			
		||||
msgstr "не може да се прочете папката: %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:614
 | 
			
		||||
#: lib/libalpm/package.c:578
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fully load metadata for package %s-%s\n"
 | 
			
		||||
msgstr "не пълно извеждане на метаданни за пакет %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:869
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid package metadata (name or version missing)"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:874
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name cannot start with '.' or "
 | 
			
		||||
"'-')\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:878
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package name contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:885 lib/libalpm/package.c:889
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid ""
 | 
			
		||||
"invalid metadata for package %s-%s (package version contains invalid "
 | 
			
		||||
"characters)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/package.c:895
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "invalid metadata for package %s-%s (package name and version too long)\n"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:111
 | 
			
		||||
#: lib/libalpm/remove.c:119
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not find %s in database -- skipping\n"
 | 
			
		||||
msgstr "няма %s в базата -- пропускане\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:146
 | 
			
		||||
#: lib/libalpm/remove.c:154
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing %s from target list\n"
 | 
			
		||||
msgstr "премахване %s от списъка с целите\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:338
 | 
			
		||||
#: lib/libalpm/remove.c:346
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove file '%s': %s\n"
 | 
			
		||||
msgstr "не се премахва файла '%s': %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:403 lib/libalpm/remove.c:412
 | 
			
		||||
#: lib/libalpm/remove.c:411 lib/libalpm/remove.c:420
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not backup %s due to PATH_MAX overflow\n"
 | 
			
		||||
msgstr "не може да се архивира %s поради препълване на PATH_MAX\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:570
 | 
			
		||||
#: lib/libalpm/remove.c:562
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot remove %s (%s)\n"
 | 
			
		||||
msgstr "не се премахва %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:743
 | 
			
		||||
#: lib/libalpm/remove.c:735
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove database entry %s-%s\n"
 | 
			
		||||
msgstr "не може да се премахне запис в базата %s-%s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/remove.c:748
 | 
			
		||||
#: lib/libalpm/remove.c:740
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove entry '%s' from cache\n"
 | 
			
		||||
msgstr "не може да се премахне '%s' от кеша\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:163
 | 
			
		||||
#: lib/libalpm/signing.c:171
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Public keyring not found; have you run '%s'?\n"
 | 
			
		||||
msgstr "Публичният ключодържател не е открит; Ще пуснете ли '%s'?\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:199 lib/libalpm/signing.c:773
 | 
			
		||||
#: lib/libalpm/signing.c:207 lib/libalpm/signing.c:784
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "GPGME error: %s\n"
 | 
			
		||||
msgstr "GPGME грешка: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:275
 | 
			
		||||
#: lib/libalpm/signing.c:284
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "looking up key %s using WKD\n"
 | 
			
		||||
msgstr "търсене на ключ %s използвайки WKD\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:289
 | 
			
		||||
#: lib/libalpm/signing.c:293
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "gpg error: %s\n"
 | 
			
		||||
msgstr "gpg грешка: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:440 lib/libalpm/signing.c:513
 | 
			
		||||
#: lib/libalpm/signing.c:441 lib/libalpm/signing.c:515
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "keyring is not writable\n"
 | 
			
		||||
msgstr "ключодържателя не се записва\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:537
 | 
			
		||||
#: lib/libalpm/signing.c:539
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" on keyserver\n"
 | 
			
		||||
msgstr "ключ \"%s\" на ключов съвър\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:542
 | 
			
		||||
#: lib/libalpm/signing.c:544
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be imported\n"
 | 
			
		||||
msgstr "ключ \"%s\" не може да се внесе\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:546
 | 
			
		||||
#: lib/libalpm/signing.c:548
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "key \"%s\" could not be looked up remotely\n"
 | 
			
		||||
msgstr "ключ \"%s\" не може да се прегледа отдалечено\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:932 lib/libalpm/sync.c:1034
 | 
			
		||||
#: lib/libalpm/signing.c:943 lib/libalpm/sync.c:1040
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: missing required signature\n"
 | 
			
		||||
msgstr "%s: липсва изискващ се подпис\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:947
 | 
			
		||||
#: lib/libalpm/signing.c:958
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is marginal trust\n"
 | 
			
		||||
msgstr "%s: подписът от \"%s\" е изрично доверен\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:955
 | 
			
		||||
#: lib/libalpm/signing.c:966
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is unknown trust\n"
 | 
			
		||||
msgstr "%s: подписът от \"%s\" е с непознато доверие\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:962
 | 
			
		||||
#: lib/libalpm/signing.c:973
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" should never be trusted\n"
 | 
			
		||||
msgstr "%s: подписът от \"%s\" никога да не се му вярва\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:974
 | 
			
		||||
#: lib/libalpm/signing.c:985
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is unknown\n"
 | 
			
		||||
msgstr "%s: ключ \"%s\" е непознат\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:983
 | 
			
		||||
#: lib/libalpm/signing.c:994
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: key \"%s\" is disabled\n"
 | 
			
		||||
msgstr "%s: ключа е \"%s\" е негоден\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:987
 | 
			
		||||
#: lib/libalpm/signing.c:998
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is expired\n"
 | 
			
		||||
msgstr "%s: подписът от \"%s\" е изтекъл\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:991
 | 
			
		||||
#: lib/libalpm/signing.c:1002
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature from \"%s\" is invalid\n"
 | 
			
		||||
msgstr "%s: подписът от \"%s\" е невалиден\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1049 lib/libalpm/signing.c:1110
 | 
			
		||||
#: lib/libalpm/signing.c:1189
 | 
			
		||||
#: lib/libalpm/signing.c:1079 lib/libalpm/signing.c:1147
 | 
			
		||||
#: lib/libalpm/signing.c:1226
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: signature format error\n"
 | 
			
		||||
msgstr "%s: грешен формат на подписа\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/signing.c:1142 lib/libalpm/signing.c:1175
 | 
			
		||||
#: lib/libalpm/signing.c:1183
 | 
			
		||||
#: lib/libalpm/signing.c:1179 lib/libalpm/signing.c:1212
 | 
			
		||||
#: lib/libalpm/signing.c:1220
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: unsupported signature format\n"
 | 
			
		||||
msgstr "%s: неподдържан формат на подписа\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:96
 | 
			
		||||
#: lib/libalpm/sync.c:99
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package upgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: игнориране надграждането на пакет (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:108
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: ignoring package downgrade (%s => %s)\n"
 | 
			
		||||
msgstr "%s: игнориране на пакетен downgrade (%s => %s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:111
 | 
			
		||||
#: lib/libalpm/sync.c:114
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: downgrading from version %s to version %s\n"
 | 
			
		||||
msgstr "%s: снижаване на версията от %s към версия %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:117
 | 
			
		||||
#: lib/libalpm/sync.c:120
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: local (%s) is newer than %s (%s)\n"
 | 
			
		||||
msgstr "%s: текущият (%s) е по-нов от %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:158
 | 
			
		||||
#: lib/libalpm/sync.c:161
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "ignoring package replacement (%s-%s => %s-%s)\n"
 | 
			
		||||
msgstr "игнориране замяната на пакет (%s-%s => %s-%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:174
 | 
			
		||||
#: lib/libalpm/sync.c:177
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "cannot replace %s by %s\n"
 | 
			
		||||
msgstr "не може да се замести %s от %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:475
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "packages %s and %s have the same filename: %s\n"
 | 
			
		||||
msgstr "пакети %s и %s имат еднакво име: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:544 lib/libalpm/sync.c:616
 | 
			
		||||
#: lib/libalpm/sync.c:535 lib/libalpm/sync.c:605
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unresolvable package conflicts detected\n"
 | 
			
		||||
msgstr "засечени нерешени пакетни конфликти\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:564
 | 
			
		||||
#: lib/libalpm/sync.c:555
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "removing '%s-%s' from target list because it conflicts with '%s-%s'\n"
 | 
			
		||||
msgstr "Премахване на '%s-%s' от целевия списък, защото противоречи на '%s-%s'\n"
 | 
			
		||||
msgid "removing '%s' from target list because it conflicts with '%s'\n"
 | 
			
		||||
msgstr "премахване '%s' от целевия списък заради конфликт с '%s'\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1002 lib/libalpm/sync.c:1169
 | 
			
		||||
#: lib/libalpm/sync.c:859
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "%s: could not find package in cache\n"
 | 
			
		||||
msgstr "%s: не можах да намеря пакет в кеша\n"
 | 
			
		||||
msgid "failed to retrieve some files\n"
 | 
			
		||||
msgstr "неуспех при извличане на файлове\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1048
 | 
			
		||||
#: lib/libalpm/sync.c:1054
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "failed to read file %s: %s\n"
 | 
			
		||||
msgstr "не успя да се прочете файла %s: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1306
 | 
			
		||||
#: lib/libalpm/sync.c:1241
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "not enough free disk space\n"
 | 
			
		||||
msgstr "няма достатъчно свободно място на диска\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1328
 | 
			
		||||
#: lib/libalpm/sync.c:1263
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit removal transaction\n"
 | 
			
		||||
msgstr "не се потвърждава транзакцията по премахване\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/sync.c:1336
 | 
			
		||||
#: lib/libalpm/sync.c:1271
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not commit transaction\n"
 | 
			
		||||
msgstr "не се потвърждава транзакцията\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:369
 | 
			
		||||
#: lib/libalpm/trans.c:364
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create temp directory\n"
 | 
			
		||||
msgstr "не се създава temp папка\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:384
 | 
			
		||||
#: lib/libalpm/trans.c:379
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not copy tempfile to %s (%s)\n"
 | 
			
		||||
msgstr "не се копира tempfile в %s (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:415
 | 
			
		||||
#: lib/libalpm/trans.c:410
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove %s\n"
 | 
			
		||||
msgstr "не се премахва %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/trans.c:419
 | 
			
		||||
#: lib/libalpm/trans.c:414
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not remove tmpdir %s\n"
 | 
			
		||||
msgstr "не се премахва tmpdir %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:493
 | 
			
		||||
#: lib/libalpm/util.c:486
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to write to pipe (%s)\n"
 | 
			
		||||
msgstr "неъспешно записването в тръбата (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:552
 | 
			
		||||
#: lib/libalpm/util.c:545
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "unable to read from pipe (%s)\n"
 | 
			
		||||
msgstr "неуспешно четенето от тръбата (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:622 lib/libalpm/util.c:628
 | 
			
		||||
#: lib/libalpm/util.c:609 lib/libalpm/util.c:615
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not create pipe (%s)\n"
 | 
			
		||||
msgstr "не се създава pipe (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:636
 | 
			
		||||
#: lib/libalpm/util.c:623
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not fork a new process (%s)\n"
 | 
			
		||||
msgstr "could not fork a new process (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:661
 | 
			
		||||
#: lib/libalpm/util.c:646
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "could not change the root directory (%s)\n"
 | 
			
		||||
msgstr "не може да се промени root папката (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:681
 | 
			
		||||
#: lib/libalpm/util.c:658
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to execv failed (%s)\n"
 | 
			
		||||
msgstr "неуспех при извикване execv (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:760
 | 
			
		||||
#: lib/libalpm/util.c:737
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "call to waitpid failed (%s)\n"
 | 
			
		||||
msgstr "неуспех при извикване на waitpid (%s)\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:770
 | 
			
		||||
#: lib/libalpm/util.c:747
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command failed to execute correctly\n"
 | 
			
		||||
msgstr "неуспешно правилно изпълнение на команда\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:777
 | 
			
		||||
#: lib/libalpm/util.c:754
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "Unknown signal"
 | 
			
		||||
msgstr "Неизвестен сигнал"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:779
 | 
			
		||||
#: lib/libalpm/util.c:756
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "command terminated by signal %d: %s\n"
 | 
			
		||||
msgstr "командата прекратена от сигнал %d: %s\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:897
 | 
			
		||||
#: lib/libalpm/util.c:853
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "no %s cache exists, creating...\n"
 | 
			
		||||
msgstr "не %s съществуваш кеш, създаване...\n"
 | 
			
		||||
 | 
			
		||||
#: lib/libalpm/util.c:928
 | 
			
		||||
#: lib/libalpm/util.c:884
 | 
			
		||||
#, c-format
 | 
			
		||||
msgid "couldn't find or create package cache, using %s instead\n"
 | 
			
		||||
msgstr "не се открива или създава пакетен кеш, използва се %s\n"
 | 
			
		||||
 
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user