mirror of
https://gitlab.archlinux.org/archlinux/devtools.git
synced 2025-09-15 10:56:19 +02:00
Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
24a298d475 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -3,6 +3,7 @@ devtools-*.tar.gz*
|
|||||||
archbuild
|
archbuild
|
||||||
archco
|
archco
|
||||||
archrelease
|
archrelease
|
||||||
|
archrm
|
||||||
bash_completion
|
bash_completion
|
||||||
checkpkg
|
checkpkg
|
||||||
commitpkg
|
commitpkg
|
||||||
@@ -15,4 +16,3 @@ zsh_completion
|
|||||||
find-libdeps
|
find-libdeps
|
||||||
crossrepomove
|
crossrepomove
|
||||||
arch-nspawn
|
arch-nspawn
|
||||||
doc/*.1
|
|
||||||
|
28
.travis.yml
28
.travis.yml
@@ -1,28 +0,0 @@
|
|||||||
language: shell
|
|
||||||
sudo: required
|
|
||||||
|
|
||||||
services:
|
|
||||||
- docker
|
|
||||||
|
|
||||||
arch:
|
|
||||||
packages:
|
|
||||||
- openssh
|
|
||||||
- subversion
|
|
||||||
- rsync
|
|
||||||
- arch-install-scripts
|
|
||||||
- git
|
|
||||||
- bzr
|
|
||||||
- mercurial
|
|
||||||
- diffutils
|
|
||||||
- asciidoc
|
|
||||||
- shellcheck
|
|
||||||
script:
|
|
||||||
- sudo pacman -Syu --noconfirm --needed "${CONFIG_PACKAGES[@]}"
|
|
||||||
- make PREFIX=/usr
|
|
||||||
- make PREFIX=/usr DESTDIR="$(mktemp -d)" install
|
|
||||||
- make check || true
|
|
||||||
- SHELLCHECK_OPTS="-S error" make check
|
|
||||||
|
|
||||||
script: 'curl -s https://raw.githubusercontent.com/mikkeloscar/arch-travis/master/arch-travis.sh | bash'
|
|
||||||
|
|
||||||
# vim: ft=yaml ts=2 sw=2 et:
|
|
43
Makefile
43
Makefile
@@ -1,13 +1,13 @@
|
|||||||
V=20190329
|
V=20170824
|
||||||
|
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
MANDIR = $(PREFIX)/share/man
|
|
||||||
|
|
||||||
IN_PROGS = \
|
BINPROGS = \
|
||||||
checkpkg \
|
checkpkg \
|
||||||
commitpkg \
|
commitpkg \
|
||||||
archco \
|
archco \
|
||||||
archrelease \
|
archrelease \
|
||||||
|
archrm \
|
||||||
archbuild \
|
archbuild \
|
||||||
lddd \
|
lddd \
|
||||||
finddeps \
|
finddeps \
|
||||||
@@ -18,11 +18,8 @@ IN_PROGS = \
|
|||||||
mkarchroot \
|
mkarchroot \
|
||||||
makechrootpkg
|
makechrootpkg
|
||||||
|
|
||||||
BINPROGS = \
|
|
||||||
$(IN_PROGS) \
|
|
||||||
sogrep
|
|
||||||
|
|
||||||
CONFIGFILES = \
|
CONFIGFILES = \
|
||||||
|
makepkg-i686.conf \
|
||||||
makepkg-x86_64.conf \
|
makepkg-x86_64.conf \
|
||||||
pacman-extra.conf \
|
pacman-extra.conf \
|
||||||
pacman-testing.conf \
|
pacman-testing.conf \
|
||||||
@@ -35,6 +32,7 @@ CONFIGFILES = \
|
|||||||
|
|
||||||
COMMITPKG_LINKS = \
|
COMMITPKG_LINKS = \
|
||||||
extrapkg \
|
extrapkg \
|
||||||
|
corepkg \
|
||||||
testingpkg \
|
testingpkg \
|
||||||
stagingpkg \
|
stagingpkg \
|
||||||
communitypkg \
|
communitypkg \
|
||||||
@@ -47,13 +45,18 @@ COMMITPKG_LINKS = \
|
|||||||
gnome-unstablepkg
|
gnome-unstablepkg
|
||||||
|
|
||||||
ARCHBUILD_LINKS = \
|
ARCHBUILD_LINKS = \
|
||||||
|
extra-i686-build \
|
||||||
extra-x86_64-build \
|
extra-x86_64-build \
|
||||||
|
testing-i686-build \
|
||||||
testing-x86_64-build \
|
testing-x86_64-build \
|
||||||
|
staging-i686-build \
|
||||||
staging-x86_64-build \
|
staging-x86_64-build \
|
||||||
multilib-build \
|
multilib-build \
|
||||||
multilib-testing-build \
|
multilib-testing-build \
|
||||||
multilib-staging-build \
|
multilib-staging-build \
|
||||||
|
kde-unstable-i686-build \
|
||||||
kde-unstable-x86_64-build \
|
kde-unstable-x86_64-build \
|
||||||
|
gnome-unstable-i686-build \
|
||||||
gnome-unstable-x86_64-build
|
gnome-unstable-x86_64-build
|
||||||
|
|
||||||
CROSSREPOMOVE_LINKS = \
|
CROSSREPOMOVE_LINKS = \
|
||||||
@@ -64,18 +67,7 @@ BASHCOMPLETION_LINKS = \
|
|||||||
archco \
|
archco \
|
||||||
communityco
|
communityco
|
||||||
|
|
||||||
|
all: $(BINPROGS) bash_completion zsh_completion
|
||||||
MANS = \
|
|
||||||
doc/lddd.1 \
|
|
||||||
doc/checkpkg.1 \
|
|
||||||
doc/sogrep.1 \
|
|
||||||
doc/mkarchroot.1 \
|
|
||||||
doc/find-libdeps.1 \
|
|
||||||
doc/find-libprovides.1
|
|
||||||
|
|
||||||
|
|
||||||
all: $(BINPROGS) bash_completion zsh_completion man
|
|
||||||
man: $(MANS)
|
|
||||||
|
|
||||||
edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
|
edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
|
||||||
|
|
||||||
@@ -87,13 +79,8 @@ edit = sed -e "s|@pkgdatadir[@]|$(DESTDIR)$(PREFIX)/share/devtools|g"
|
|||||||
@chmod +x "$@"
|
@chmod +x "$@"
|
||||||
@bash -O extglob -n "$@"
|
@bash -O extglob -n "$@"
|
||||||
|
|
||||||
$(MANS): doc/asciidoc.conf doc/footer.asciidoc
|
|
||||||
|
|
||||||
doc/%: doc/%.asciidoc
|
|
||||||
a2x --no-xmllint --asciidoc-opts="-f doc/asciidoc.conf" -d manpage -f manpage -D doc $<
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(IN_PROGS) bash_completion zsh_completion $(MANS)
|
rm -f $(BINPROGS) bash_completion zsh_completion
|
||||||
|
|
||||||
install:
|
install:
|
||||||
install -dm0755 $(DESTDIR)$(PREFIX)/bin
|
install -dm0755 $(DESTDIR)$(PREFIX)/bin
|
||||||
@@ -108,9 +95,6 @@ install:
|
|||||||
for l in ${BASHCOMPLETION_LINKS}; do ln -sf devtools $(DESTDIR)/usr/share/bash-completion/completions/$$l; done
|
for l in ${BASHCOMPLETION_LINKS}; do ln -sf devtools $(DESTDIR)/usr/share/bash-completion/completions/$$l; done
|
||||||
install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
|
install -Dm0644 zsh_completion $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
|
||||||
ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco
|
ln -sf archco $(DESTDIR)$(PREFIX)/bin/communityco
|
||||||
for manfile in $(MANS); do \
|
|
||||||
install -Dm644 $$manfile -t $(DESTDIR)$(MANDIR)/man$${manfile##*.}; \
|
|
||||||
done;
|
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
for f in ${BINPROGS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$f; done
|
for f in ${BINPROGS}; do rm -f $(DESTDIR)$(PREFIX)/bin/$$f; done
|
||||||
@@ -122,9 +106,6 @@ uninstall:
|
|||||||
rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
|
rm $(DESTDIR)$(PREFIX)/share/zsh/site-functions/_devtools
|
||||||
rm -f $(DESTDIR)$(PREFIX)/bin/communityco
|
rm -f $(DESTDIR)$(PREFIX)/bin/communityco
|
||||||
rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
|
rm -f $(DESTDIR)$(PREFIX)/bin/find-libprovides
|
||||||
for manfile in $(MANS); do \
|
|
||||||
rm -f $(DESTDIR)$(MANDIR)/man$${manfile##*.}/$${manfile#doc/}; \
|
|
||||||
done;
|
|
||||||
|
|
||||||
dist:
|
dist:
|
||||||
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz
|
git archive --format=tar --prefix=devtools-$(V)/ $(V) | gzip -9 > devtools-$(V).tar.gz
|
||||||
|
24
README.md
24
README.md
@@ -1,24 +0,0 @@
|
|||||||
# Devtools - development tools for Arch Linux
|
|
||||||
|
|
||||||
This repository contains tools for the Arch Linux distribution for building
|
|
||||||
and maintaining official repository packages.
|
|
||||||
|
|
||||||
## Patches
|
|
||||||
|
|
||||||
Patches can be send to arch-projects@archlinux.org or via a pull request on
|
|
||||||
Github. When sending patches to the mailing list make sure to set a valid
|
|
||||||
subjectprefix otherwise the email is denied by mailman. Git can be configured
|
|
||||||
as following.
|
|
||||||
|
|
||||||
```
|
|
||||||
git config format.subjectprefix 'devtools] [PATCH'
|
|
||||||
```
|
|
||||||
|
|
||||||
## Releasing
|
|
||||||
|
|
||||||
1. bump the version in the Makefile
|
|
||||||
2. Commit everything as ```Version $(date +"%Y%m%d")```
|
|
||||||
3. Create a new tag ```git tag -s $(date +"%Y%m%d")```
|
|
||||||
4. Push changes
|
|
||||||
5. Upload the source tarball with ```make dist upload```
|
|
||||||
6. Update the package
|
|
@@ -58,21 +58,18 @@ else
|
|||||||
cache_dirs=("$cache_dir")
|
cache_dirs=("$cache_dir")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pacconf_cmd=$(command -v pacman-conf || command -v pacconf)
|
|
||||||
# shellcheck disable=2016
|
# shellcheck disable=2016
|
||||||
host_mirrors=($($pacconf_cmd --repo extra Server 2> /dev/null | sed -r 's#(.*/)extra/os/.*#\1$repo/os/$arch#'))
|
host_mirror=$(pacman --cachedir /doesnt/exist -Sddp extra/devtools 2>/dev/null | sed -r 's#(.*/)extra/os/.*#\1$repo/os/$arch#')
|
||||||
# shellcheck disable=2016
|
# shellcheck disable=2016
|
||||||
|
[[ $host_mirror == *file://* ]] && host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
|
||||||
|
|
||||||
# {{{ functions
|
# {{{ functions
|
||||||
build_mount_args() {
|
build_mount_args() {
|
||||||
declare -g mount_args=()
|
declare -g mount_args=()
|
||||||
|
|
||||||
for host_mirror in "${host_mirrors[@]}"; do
|
if [[ -n $host_mirror_path ]]; then
|
||||||
if [[ $host_mirror == *file://* ]]; then
|
mount_args+=("--bind-ro=$host_mirror_path")
|
||||||
host_mirror_path=$(echo "$host_mirror" | sed -r 's#file://(/.*)/\$repo/os/\$arch#\1#g')
|
fi
|
||||||
mount_args+=("--bind-ro=$host_mirror_path")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
mount_args+=("--bind=${cache_dirs[0]}")
|
mount_args+=("--bind=${cache_dirs[0]}")
|
||||||
|
|
||||||
@@ -83,7 +80,7 @@ build_mount_args() {
|
|||||||
|
|
||||||
copy_hostconf () {
|
copy_hostconf () {
|
||||||
cp -a /etc/pacman.d/gnupg "$working_dir/etc/pacman.d"
|
cp -a /etc/pacman.d/gnupg "$working_dir/etc/pacman.d"
|
||||||
printf 'Server = %s\n' "${host_mirrors[@]}" >"$working_dir/etc/pacman.d/mirrorlist"
|
echo "Server = $host_mirror" >"$working_dir/etc/pacman.d/mirrorlist"
|
||||||
|
|
||||||
[[ -n $pac_conf ]] && cp "$pac_conf" "$working_dir/etc/pacman.conf"
|
[[ -n $pac_conf ]] && cp "$pac_conf" "$working_dir/etc/pacman.conf"
|
||||||
[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
|
[[ -n $makepkg_conf ]] && cp "$makepkg_conf" "$working_dir/etc/makepkg.conf"
|
||||||
@@ -94,7 +91,7 @@ copy_hostconf () {
|
|||||||
cp -T "$file" "$working_dir$file"
|
cp -T "$file" "$working_dir$file"
|
||||||
done
|
done
|
||||||
|
|
||||||
sed -r "s|^#?\\s*CacheDir.+|CacheDir = ${cache_dirs[*]}|g" -i "$working_dir/etc/pacman.conf"
|
sed -r "s|^#?\\s*CacheDir.+|CacheDir = $(echo -n "${cache_dirs[@]}")|g" -i "$working_dir/etc/pacman.conf"
|
||||||
}
|
}
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
@@ -110,13 +107,12 @@ fi
|
|||||||
build_mount_args
|
build_mount_args
|
||||||
copy_hostconf
|
copy_hostconf
|
||||||
|
|
||||||
eval "$(grep -a '^CARCH=' "$working_dir/etc/makepkg.conf")"
|
eval "$(grep '^CARCH=' "$working_dir/etc/makepkg.conf")"
|
||||||
|
|
||||||
[[ -z $nosetarch ]] || unset CARCH
|
[[ -z $nosetarch ]] || unset CARCH
|
||||||
|
|
||||||
exec ${CARCH:+setarch "$CARCH"} systemd-nspawn -q \
|
exec ${CARCH:+setarch "$CARCH"} systemd-nspawn -q \
|
||||||
-D "$working_dir" \
|
-D "$working_dir" \
|
||||||
-E "PATH=/usr/local/sbin:/usr/local/bin:/usr/bin" \
|
--register=no --keep-unit \
|
||||||
--register=no --keep-unit --as-pid2 \
|
|
||||||
"${mount_args[@]}" \
|
"${mount_args[@]}" \
|
||||||
"$@"
|
"$@"
|
||||||
|
@@ -39,7 +39,7 @@ while getopts 'hcr:' arg; do
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
check_root SOURCE_DATE_EPOCH,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER,GNUPGHOME
|
check_root
|
||||||
|
|
||||||
# Pass all arguments after -- right to makepkg
|
# Pass all arguments after -- right to makepkg
|
||||||
makechrootpkg_args+=("${@:$OPTIND}")
|
makechrootpkg_args+=("${@:$OPTIND}")
|
||||||
@@ -74,10 +74,5 @@ else
|
|||||||
pacman -Syu --noconfirm || abort
|
pacman -Syu --noconfirm || abort
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Always build official packages reproducibly
|
|
||||||
if [[ ! -v SOURCE_DATE_EPOCH ]]; then
|
|
||||||
export SOURCE_DATE_EPOCH=$(date +%s)
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg "Building in chroot for [%s] (%s)..." "${repo}" "${arch}"
|
msg "Building in chroot for [%s] (%s)..." "${repo}" "${arch}"
|
||||||
exec makechrootpkg -r "${chroots}/${repo}-${arch}" "${makechrootpkg_args[@]}"
|
exec makechrootpkg -r "${chroots}/${repo}-${arch}" "${makechrootpkg_args[@]}"
|
||||||
|
16
archrm.in
Normal file
16
archrm.in
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# License: Unspecified
|
||||||
|
|
||||||
|
m4_include(lib/common.sh)
|
||||||
|
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
echo 'Usage: archrm <path to checkout>'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# FIXME: Check if there are uncommited changes
|
||||||
|
#pushd $1
|
||||||
|
#
|
||||||
|
#popd
|
||||||
|
|
||||||
|
rm -rf "$1"
|
@@ -189,11 +189,12 @@ if [[ ${#uploads[*]} -gt 0 ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${arch[*]}" == 'any' ]]; then
|
if [[ "${arch[*]}" == 'any' ]]; then
|
||||||
if [[ -d ../repos/$repo-x86_64 ]]; then
|
if [[ -d ../repos/$repo-i686 && -d ../repos/$repo-x86_64 ]]; then
|
||||||
pushd ../repos/ >/dev/null
|
pushd ../repos/ >/dev/null
|
||||||
stat_busy "Removing %s" "$repo-x86_64"
|
stat_busy "Removing %s and %s" "$repo-i686" "$repo-x86_64"
|
||||||
|
svn rm -q "$repo-i686"
|
||||||
svn rm -q "$repo-x86_64"
|
svn rm -q "$repo-x86_64"
|
||||||
svn commit -q -m "Removed $repo-x86_64 for $pkgname"
|
svn commit -q -m "Removed $repo-i686 and $repo-x86_64 for $pkgname"
|
||||||
stat_done
|
stat_done
|
||||||
popd >/dev/null
|
popd >/dev/null
|
||||||
fi
|
fi
|
||||||
|
@@ -64,6 +64,7 @@ done
|
|||||||
|
|
||||||
msg "Adding %s to %s" "${pkgbase}" "${target_repo}"
|
msg "Adding %s to %s" "${pkgbase}" "${target_repo}"
|
||||||
svn -q add "target_checkout/${pkgbase}"
|
svn -q add "target_checkout/${pkgbase}"
|
||||||
|
svn -q propset svn:keywords 'Id' "target_checkout/${pkgbase}/trunk/PKGBUILD"
|
||||||
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" target_checkout
|
svn -q commit -m"${scriptname}: Moving ${pkgbase} from ${source_repo} to ${target_repo}" target_checkout
|
||||||
pushd "target_checkout/${pkgbase}/trunk" >/dev/null
|
pushd "target_checkout/${pkgbase}/trunk" >/dev/null
|
||||||
archrelease "${arch[@]/#/$target_repo-}" || die
|
archrelease "${arch[@]/#/$target_repo-}" || die
|
||||||
|
@@ -1,37 +0,0 @@
|
|||||||
## linkman: macro
|
|
||||||
# Inspired by/borrowed from the GIT source tree at Documentation/asciidoc.conf
|
|
||||||
#
|
|
||||||
# Usage: linkman:command[manpage-section]
|
|
||||||
#
|
|
||||||
# Note, {0} is the manpage section, while {target} is the command.
|
|
||||||
#
|
|
||||||
# Show man link as: <command>(<section>); if section is defined, else just show
|
|
||||||
# the command.
|
|
||||||
|
|
||||||
[macros]
|
|
||||||
(?su)[\\]?(?P<name>linkman):(?P<target>\S*?)\[(?P<attrlist>.*?)\]=
|
|
||||||
|
|
||||||
[attributes]
|
|
||||||
asterisk=*
|
|
||||||
plus=+
|
|
||||||
caret=^
|
|
||||||
startsb=[
|
|
||||||
endsb=]
|
|
||||||
backslash=\
|
|
||||||
tilde=~
|
|
||||||
apostrophe='
|
|
||||||
backtick=`
|
|
||||||
litdd=--
|
|
||||||
|
|
||||||
ifdef::backend-docbook[]
|
|
||||||
[linkman-inlinemacro]
|
|
||||||
{0%{target}}
|
|
||||||
{0#<citerefentry>}
|
|
||||||
{0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>}
|
|
||||||
{0#</citerefentry>}
|
|
||||||
endif::backend-docbook[]
|
|
||||||
|
|
||||||
ifdef::backend-xhtml11[]
|
|
||||||
[linkman-inlinemacro]
|
|
||||||
<a href="{target}.{0}.html">{target}{0?({0})}</a>
|
|
||||||
endif::backend-xhtml11[]
|
|
@@ -1,27 +0,0 @@
|
|||||||
checkpkg(1)
|
|
||||||
===========
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
checkpkg - Compare the current build package with the repository version
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
checkpkg
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Searches for a locally built package corresponding to the PKGBUILD, and
|
|
||||||
downloads the last version of that package from the Pacman repositories. It
|
|
||||||
then compares the list of .so files provided by each version of the package and
|
|
||||||
outputs if there are soname differences for the new package. A directory is
|
|
||||||
also created using mktemp with files containing a file list for both packages
|
|
||||||
and a library list for both packages.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
--------
|
|
||||||
|
|
||||||
linkman:find-libprovides[1]
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -1,24 +0,0 @@
|
|||||||
find-libdeps(1)
|
|
||||||
===============
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
find-libdeps - Find soname dependencies for a package
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
find-libdeps [options]
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
Finds soname dependencies of a package and prints out a list in the following
|
|
||||||
format '<soname>=<soversion>-<soarch>'.
|
|
||||||
|
|
||||||
Options
|
|
||||||
-------
|
|
||||||
|
|
||||||
*--ignore-internal*::
|
|
||||||
Ignore internal libraries.
|
|
||||||
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -1,24 +0,0 @@
|
|||||||
find-libprovides(1)
|
|
||||||
===================
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
find-libprovides - Find soname's which are provided by a package
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
find-libprovides [options]
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Finds soname's provided by a package and prints out a list in the following
|
|
||||||
format '<soname>=<soversion>-<soarch>'.
|
|
||||||
|
|
||||||
Options
|
|
||||||
-------
|
|
||||||
|
|
||||||
*--ignore-internal*::
|
|
||||||
Ignore internal libraries.
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -1,29 +0,0 @@
|
|||||||
|
|
||||||
Bugs
|
|
||||||
----
|
|
||||||
Bugs can be reported on the bug tracker 'https://bugs.archlinux.org' in the Arch
|
|
||||||
Linux category and title prefixed with [devtools] or via
|
|
||||||
mailto:arch-projects@archlinux.org[].
|
|
||||||
|
|
||||||
|
|
||||||
Authors
|
|
||||||
-------
|
|
||||||
|
|
||||||
Maintainers:
|
|
||||||
|
|
||||||
* Aaron Griffin <aaronmgriffin@gmail.com>
|
|
||||||
* Allan McRae <allan@archlinux.org>
|
|
||||||
* Bartłomiej Piotrowski <bpiotrowski@archlinux.org>
|
|
||||||
* Dan McGee <dan@archlinux.org>
|
|
||||||
* Dave Reisner <dreisner@archlinux.org>
|
|
||||||
* Evangelos Foutras <evangelos@foutrelis.com>
|
|
||||||
* Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
|
|
||||||
* Jelle van der Waa <jelle@archlinux.org>
|
|
||||||
* Levente Polyak <anthraxx@archlinux.org>
|
|
||||||
* Pierre Schmitz <pierre@archlinux.de>
|
|
||||||
* Sébastien Luttringer <seblu@seblu.net>
|
|
||||||
* Sven-Hendrik Haase <svenstaro@gmail.com>
|
|
||||||
* Thomas Bächler <thomas@archlinux.org>
|
|
||||||
|
|
||||||
For additional contributors, use `git shortlog -s` on the devtools.git
|
|
||||||
repository.
|
|
@@ -1,25 +0,0 @@
|
|||||||
lddd(1)
|
|
||||||
=======
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
lddd - Find broken library links on your system
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
lddd
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Scans '$PATH', '/lib', '/usr/lib', '/usr/local/lib' and
|
|
||||||
'/etc/ld.so.conf.d/*.conf' directories for ELF files with references to missing
|
|
||||||
shared libraries, and suggests which packages might need to be rebuilt. The
|
|
||||||
collected data is written to a temporary directory created by mktemp.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
--------
|
|
||||||
|
|
||||||
linkman:ldd[1]
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -1,46 +0,0 @@
|
|||||||
mkarchroot(1)
|
|
||||||
==============
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
mkarchroot - Creates an arch chroot in a specified location with a specified set of packages
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
mkarchroot [options] [location] [packages]
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
|
|
||||||
'mkarchroot' is a script to create an Arch Linux chroot at a specified location
|
|
||||||
with specified packages. Typically used by 'makechrootpkg' to create build
|
|
||||||
chroots. Apart from installing specified packages the chroot is created with an
|
|
||||||
en_US.UTF-8 and de_DE.UTF-8 locale and a generated machine-id.
|
|
||||||
|
|
||||||
Options
|
|
||||||
-------
|
|
||||||
|
|
||||||
*-C* <file>::
|
|
||||||
Location of a pacman config file.
|
|
||||||
|
|
||||||
*-M* <file>::
|
|
||||||
Location of a makepkg config file.
|
|
||||||
|
|
||||||
*-c* <dir>::
|
|
||||||
Set pacman cache.
|
|
||||||
|
|
||||||
*-f* <file>::
|
|
||||||
Copy file from the host to the chroot.
|
|
||||||
|
|
||||||
*-s*::
|
|
||||||
Do not run setarch.
|
|
||||||
|
|
||||||
*-h*::
|
|
||||||
Output command line options.
|
|
||||||
|
|
||||||
See Also
|
|
||||||
--------
|
|
||||||
|
|
||||||
linkman:pacman[1]
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -1,48 +0,0 @@
|
|||||||
sogrep(1)
|
|
||||||
=========
|
|
||||||
|
|
||||||
Name
|
|
||||||
----
|
|
||||||
sogrep - Find shared library links in an Arch Linux repository
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
--------
|
|
||||||
sogrep [options] repo libname
|
|
||||||
|
|
||||||
Description
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Check the soname links database for Arch Linux repositories containing packages
|
|
||||||
linked to a given shared library. If the repository specified is "all", then
|
|
||||||
all repositories will be searched, otherwise only the named repository will be
|
|
||||||
searched.
|
|
||||||
|
|
||||||
If the links database does not exist, it will be downloaded first.
|
|
||||||
|
|
||||||
Options
|
|
||||||
-------
|
|
||||||
|
|
||||||
*-v, --verbose*::
|
|
||||||
Provide detailed output containing the matched links for each package, the
|
|
||||||
repository it came from (in the event that all repositories are being
|
|
||||||
searched), and, in combination with `-r`, a progress bar for the links
|
|
||||||
database download.
|
|
||||||
|
|
||||||
*-r, --refresh*::
|
|
||||||
Refresh the links databases
|
|
||||||
|
|
||||||
*-h, --help*::
|
|
||||||
Show a help text
|
|
||||||
|
|
||||||
|
|
||||||
Environment Variables
|
|
||||||
---------------------
|
|
||||||
**SOLINKS_MIRROR**="https://mirror.foo.com"
|
|
||||||
Alternative mirror to use for downloading soname links database.
|
|
||||||
|
|
||||||
**SOCACHE_DIR**="/path/to/directory"::
|
|
||||||
Directory where soname links database is stored, overrides the default
|
|
||||||
directory set by the **XDG_CACHE_HOME** environment variable or the
|
|
||||||
**HOME** environment variable if **XDG_CACHE_HOME** is not set.
|
|
||||||
|
|
||||||
include::footer.asciidoc[]
|
|
@@ -46,7 +46,7 @@ process_sofile() {
|
|||||||
# extract the major version: 1
|
# extract the major version: 1
|
||||||
soversion="${sofile##*\.so\.}"
|
soversion="${sofile##*\.so\.}"
|
||||||
if [[ "$soversion" = "$sofile" ]] && ((IGNORE_INTERNAL)); then
|
if [[ "$soversion" = "$sofile" ]] && ((IGNORE_INTERNAL)); then
|
||||||
return
|
continue
|
||||||
fi
|
fi
|
||||||
if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then
|
if ! in_array "${soname}=${soversion}-${soarch}" "${soobjects[@]}"; then
|
||||||
# libfoo.so=1-64
|
# libfoo.so=1-64
|
||||||
@@ -57,7 +57,7 @@ process_sofile() {
|
|||||||
|
|
||||||
case $script_mode in
|
case $script_mode in
|
||||||
deps) find_args=(-perm -u+x);;
|
deps) find_args=(-perm -u+x);;
|
||||||
provides) find_args=(-name '*.so*');;
|
provides) find_args=(-name '*.so*');;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
find . -type f "${find_args[@]}" | while read -r filename; do
|
find . -type f "${find_args[@]}" | while read -r filename; do
|
||||||
|
@@ -6,15 +6,13 @@
|
|||||||
CHROOT_VERSION='v4'
|
CHROOT_VERSION='v4'
|
||||||
|
|
||||||
##
|
##
|
||||||
# usage : check_root $keepenv
|
# usage : check_root
|
||||||
##
|
##
|
||||||
orig_argv=("$0" "$@")
|
orig_argv=("$0" "$@")
|
||||||
check_root() {
|
check_root() {
|
||||||
local keepenv=$1
|
|
||||||
|
|
||||||
(( EUID == 0 )) && return
|
(( EUID == 0 )) && return
|
||||||
if type -P sudo >/dev/null; then
|
if type -P sudo >/dev/null; then
|
||||||
exec sudo --preserve-env=$keepenv -- "${orig_argv[@]}"
|
exec sudo -- "${orig_argv[@]}"
|
||||||
else
|
else
|
||||||
exec su root -c "$(printf ' %q' "${orig_argv[@]}")"
|
exec su root -c "$(printf ' %q' "${orig_argv[@]}")"
|
||||||
fi
|
fi
|
||||||
|
104
lib/common.sh
104
lib/common.sh
@@ -4,12 +4,7 @@
|
|||||||
# License: Unspecified
|
# License: Unspecified
|
||||||
|
|
||||||
[[ -z ${_INCLUDE_COMMON_SH:-} ]] || return 0
|
[[ -z ${_INCLUDE_COMMON_SH:-} ]] || return 0
|
||||||
_INCLUDE_COMMON_SH="$(set +o|grep nounset)"
|
_INCLUDE_COMMON_SH=true
|
||||||
|
|
||||||
set +u +o posix
|
|
||||||
# shellcheck disable=1091
|
|
||||||
. /usr/share/makepkg/util.sh
|
|
||||||
$_INCLUDE_COMMON_SH
|
|
||||||
|
|
||||||
# Avoid any encoding problems
|
# Avoid any encoding problems
|
||||||
export LANG=C
|
export LANG=C
|
||||||
@@ -17,12 +12,56 @@ export LANG=C
|
|||||||
shopt -s extglob
|
shopt -s extglob
|
||||||
|
|
||||||
# check if messages are to be printed using color
|
# check if messages are to be printed using color
|
||||||
|
declare ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
|
||||||
if [[ -t 2 ]]; then
|
if [[ -t 2 ]]; then
|
||||||
colorize
|
# prefer terminal safe colored and bold text when tput is supported
|
||||||
else
|
if tput setaf 0 &>/dev/null; then
|
||||||
# shellcheck disable=2034
|
ALL_OFF="$(tput sgr0)"
|
||||||
declare -gr ALL_OFF='' BOLD='' BLUE='' GREEN='' RED='' YELLOW=''
|
BOLD="$(tput bold)"
|
||||||
|
BLUE="${BOLD}$(tput setaf 4)"
|
||||||
|
GREEN="${BOLD}$(tput setaf 2)"
|
||||||
|
RED="${BOLD}$(tput setaf 1)"
|
||||||
|
YELLOW="${BOLD}$(tput setaf 3)"
|
||||||
|
else
|
||||||
|
ALL_OFF="\e[1;0m"
|
||||||
|
BOLD="\e[1;1m"
|
||||||
|
BLUE="${BOLD}\e[1;34m"
|
||||||
|
GREEN="${BOLD}\e[1;32m"
|
||||||
|
RED="${BOLD}\e[1;31m"
|
||||||
|
YELLOW="${BOLD}\e[1;33m"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
readonly ALL_OFF BOLD BLUE GREEN RED YELLOW
|
||||||
|
|
||||||
|
plain() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
# shellcheck disable=2059
|
||||||
|
printf "${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
# shellcheck disable=2059
|
||||||
|
printf "${GREEN}==>${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
msg2() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
# shellcheck disable=2059
|
||||||
|
printf "${BLUE} ->${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
# shellcheck disable=2059
|
||||||
|
printf "${YELLOW}==> WARNING:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
error() {
|
||||||
|
local mesg=$1; shift
|
||||||
|
# shellcheck disable=2059
|
||||||
|
printf "${RED}==> ERROR:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
|
||||||
|
}
|
||||||
|
|
||||||
stat_busy() {
|
stat_busy() {
|
||||||
local mesg=$1; shift
|
local mesg=$1; shift
|
||||||
@@ -71,6 +110,51 @@ die() {
|
|||||||
cleanup 255
|
cleanup 255
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# usage : in_array( $needle, $haystack )
|
||||||
|
# return : 0 - found
|
||||||
|
# 1 - not found
|
||||||
|
##
|
||||||
|
in_array() {
|
||||||
|
local needle=$1; shift
|
||||||
|
local item
|
||||||
|
for item in "$@"; do
|
||||||
|
[[ $item = "$needle" ]] && return 0 # Found
|
||||||
|
done
|
||||||
|
return 1 # Not Found
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
# usage : get_full_version( [$pkgname] )
|
||||||
|
# return : full version spec, including epoch (if necessary), pkgver, pkgrel
|
||||||
|
##
|
||||||
|
get_full_version() {
|
||||||
|
# set defaults if they weren't specified in buildfile
|
||||||
|
local pkgbase=${pkgbase:-${pkgname[0]}}
|
||||||
|
local epoch=${epoch:-0}
|
||||||
|
local pkgver=${pkgver}
|
||||||
|
local pkgrel=${pkgrel}
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
if (( ! epoch )); then
|
||||||
|
printf '%s\n' "$pkgver-$pkgrel"
|
||||||
|
else
|
||||||
|
printf '%s\n' "$epoch:$pkgver-$pkgrel"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
local pkgver_override='' pkgrel_override='' epoch_override=''
|
||||||
|
for i in pkgver pkgrel epoch; do
|
||||||
|
local indirect="${i}_override"
|
||||||
|
eval "$(declare -f "package_$1" | sed -n "s/\(^[[:space:]]*$i=\)/${i}_override=/p")"
|
||||||
|
[[ -z ${!indirect} ]] && eval ${indirect}=\"${!i}\"
|
||||||
|
done
|
||||||
|
if (( ! epoch_override )); then
|
||||||
|
printf '%s\n' "$pkgver_override-$pkgrel_override"
|
||||||
|
else
|
||||||
|
printf '%s\n' "$epoch_override:$pkgver_override-$pkgrel_override"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
##
|
##
|
||||||
# usage : lock( $fd, $file, $message, [ $message_arguments... ] )
|
# usage : lock( $fd, $file, $message, [ $message_arguments... ] )
|
||||||
##
|
##
|
||||||
|
@@ -4,22 +4,23 @@
|
|||||||
|
|
||||||
# shellcheck disable=2034
|
# shellcheck disable=2034
|
||||||
_arch=(
|
_arch=(
|
||||||
|
i686
|
||||||
x86_64
|
x86_64
|
||||||
any
|
any
|
||||||
)
|
)
|
||||||
|
|
||||||
# shellcheck disable=2034
|
# shellcheck disable=2034
|
||||||
_tags=(
|
_tags=(
|
||||||
core-x86_64 core-any
|
core-i686 core-x86_64 core-any
|
||||||
extra-x86_64 extra-any
|
extra-i686 extra-x86_64 extra-any
|
||||||
multilib-x86_64
|
multilib-x86_64
|
||||||
staging-x86_64 staging-any
|
staging-i686 staging-x86_64 staging-any
|
||||||
testing-x86_64 testing-any
|
testing-i686 testing-x86_64 testing-any
|
||||||
multilib-testing-x86_64
|
multilib-testing-x86_64
|
||||||
multilib-staging-x86_64
|
multilib-staging-x86_64
|
||||||
community-x86_64 community-any
|
community-i686 community-x86_64 community-any
|
||||||
community-staging-x86_64 community-staging-any
|
community-staging-i686 community-staging-x86_64 community-staging-any
|
||||||
community-testing-x86_64 community-testing-any
|
community-testing-i686 community-testing-x86_64 community-testing-any
|
||||||
kde-unstable-x86_64 kde-unstable-any
|
kde-unstable-i686 kde-unstable-x86_64 kde-unstable-any
|
||||||
gnome-unstable-x86_64 gnome-unstable-any
|
gnome-unstable-i686 gnome-unstable-x86_64 gnome-unstable-any
|
||||||
)
|
)
|
||||||
|
@@ -15,6 +15,29 @@ m4_include(lib/archroot.sh)
|
|||||||
|
|
||||||
shopt -s nullglob
|
shopt -s nullglob
|
||||||
|
|
||||||
|
init_variables() {
|
||||||
|
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
|
||||||
|
makepkg_args=("${default_makepkg_args[@]}")
|
||||||
|
keepbuilddir=false
|
||||||
|
update_first=false
|
||||||
|
clean_first=false
|
||||||
|
run_namcap=false
|
||||||
|
temp_chroot=false
|
||||||
|
chrootdir=
|
||||||
|
passeddir=
|
||||||
|
makepkg_user=
|
||||||
|
declare -ga install_pkgs
|
||||||
|
declare -gi ret=0
|
||||||
|
|
||||||
|
bindmounts_ro=()
|
||||||
|
bindmounts_rw=()
|
||||||
|
|
||||||
|
copy=$USER
|
||||||
|
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
|
||||||
|
[[ -z "$copy" || $copy = root ]] && copy=copy
|
||||||
|
src_owner=${SUDO_USER:-$USER}
|
||||||
|
}
|
||||||
|
|
||||||
usage() {
|
usage() {
|
||||||
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
|
echo "Usage: ${0##*/} [options] -r <chrootdir> [--] [makepkg args]"
|
||||||
echo ' Run this script in a PKGBUILD dir to build a package inside a'
|
echo ' Run this script in a PKGBUILD dir to build a package inside a'
|
||||||
@@ -69,7 +92,7 @@ load_vars() {
|
|||||||
[[ -f $makepkg_conf ]] || return 1
|
[[ -f $makepkg_conf ]] || return 1
|
||||||
|
|
||||||
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER; do
|
for var in {SRC,SRCPKG,PKG,LOG}DEST MAKEFLAGS PACKAGER; do
|
||||||
[[ -z ${!var:-} ]] && eval "$(grep -a "^${var}=" "$makepkg_conf")"
|
[[ -z ${!var:-} ]] && eval "$(grep "^${var}=" "$makepkg_conf")"
|
||||||
done
|
done
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
@@ -165,7 +188,7 @@ prepare_chroot() {
|
|||||||
local keepbuilddir=$3
|
local keepbuilddir=$3
|
||||||
local run_namcap=$4
|
local run_namcap=$4
|
||||||
|
|
||||||
[[ $keepbuilddir = true ]] || rm -rf "$copydir/build"
|
$keepbuilddir || rm -rf "$copydir/build"
|
||||||
|
|
||||||
local builduser_uid builduser_gid
|
local builduser_uid builduser_gid
|
||||||
builduser_uid="${SUDO_UID:-$UID}"
|
builduser_uid="${SUDO_UID:-$UID}"
|
||||||
@@ -176,12 +199,16 @@ prepare_chroot() {
|
|||||||
# We can't use useradd without chrooting, otherwise it invokes PAM modules
|
# We can't use useradd without chrooting, otherwise it invokes PAM modules
|
||||||
# which we might not be able to load (i.e. when building i686 packages on
|
# which we might not be able to load (i.e. when building i686 packages on
|
||||||
# an x86_64 host).
|
# an x86_64 host).
|
||||||
sed -e '/^builduser:/d' -i "$copydir"/etc/{passwd,shadow,group}
|
sed -e '/^builduser:/d' -i "$copydir"/etc/{passwd,group}
|
||||||
printf >>"$copydir/etc/group" 'builduser:x:%d:\n' "$builduser_gid"
|
printf >>"$copydir/etc/group" 'builduser:x:%d:\n' "$builduser_gid"
|
||||||
printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' "$builduser_uid" "$builduser_gid"
|
printf >>"$copydir/etc/passwd" 'builduser:x:%d:%d:builduser:/build:/bin/bash\n' "$builduser_uid" "$builduser_gid"
|
||||||
printf >>"$copydir/etc/shadow" 'builduser:!!:%d::::::\n' "$(( $(date -u +%s) / 86400 ))"
|
|
||||||
|
|
||||||
$install -d "$copydir"/{build,startdir,{pkg,srcpkg,src,log}dest}
|
$install -d "$copydir"/{build,build/.gnupg,startdir,{pkg,srcpkg,src,log}dest}
|
||||||
|
|
||||||
|
for x in .gnupg/pubring.{kbx,gpg}; do
|
||||||
|
[[ -r $USER_HOME/$x ]] || continue
|
||||||
|
$install -m 644 "$USER_HOME/$x" "$copydir/build/$x"
|
||||||
|
done
|
||||||
|
|
||||||
sed -e '/^MAKEFLAGS=/d' -e '/^PACKAGER=/d' -i "$copydir/etc/makepkg.conf"
|
sed -e '/^MAKEFLAGS=/d' -e '/^PACKAGER=/d' -i "$copydir/etc/makepkg.conf"
|
||||||
for x in BUILDDIR=/build PKGDEST=/pkgdest SRCPKGDEST=/srcpkgdest SRCDEST=/srcdest LOGDEST=/logdest \
|
for x in BUILDDIR=/build PKGDEST=/pkgdest SRCPKGDEST=/srcpkgdest SRCDEST=/srcdest LOGDEST=/logdest \
|
||||||
@@ -201,10 +228,9 @@ EOF
|
|||||||
{
|
{
|
||||||
printf '#!/bin/bash\n'
|
printf '#!/bin/bash\n'
|
||||||
declare -f _chrootbuild
|
declare -f _chrootbuild
|
||||||
declare -p SOURCE_DATE_EPOCH 2>/dev/null || true
|
|
||||||
printf '_chrootbuild "$@" || exit\n'
|
printf '_chrootbuild "$@" || exit\n'
|
||||||
|
|
||||||
if [[ $run_namcap = true ]]; then
|
if $run_namcap; then
|
||||||
declare -f _chrootnamcap
|
declare -f _chrootnamcap
|
||||||
printf '_chrootnamcap || exit\n'
|
printf '_chrootnamcap || exit\n'
|
||||||
fi
|
fi
|
||||||
@@ -215,24 +241,13 @@ EOF
|
|||||||
# These functions aren't run in makechrootpkg,
|
# These functions aren't run in makechrootpkg,
|
||||||
# so no global variables
|
# so no global variables
|
||||||
_chrootbuild() {
|
_chrootbuild() {
|
||||||
# No coredumps
|
|
||||||
ulimit -c 0
|
|
||||||
|
|
||||||
# shellcheck source=/dev/null
|
# shellcheck source=/dev/null
|
||||||
. /etc/profile
|
. /etc/profile
|
||||||
|
|
||||||
# Beware, there are some stupid arbitrary rules on how you can
|
# Beware, there are some stupid arbitrary rules on how you can
|
||||||
# use "$" in arguments to commands with "sudo -i". ${foo} or
|
# use "$" in arguments to commands with "sudo -i". ${foo} or
|
||||||
# ${1} is OK, but $foo or $1 isn't.
|
# ${1} is OK, but $foo or $1 isn't.
|
||||||
# https://bugzilla.sudo.ws/show_bug.cgi?id=765
|
# https://bugzilla.sudo.ws/show_bug.cgi?id=765
|
||||||
sudo --preserve-env=SOURCE_DATE_EPOCH -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
|
sudo -iu builduser bash -c 'cd /startdir; makepkg "$@"' -bash "$@"
|
||||||
ret=$?
|
|
||||||
case $ret in
|
|
||||||
0|14)
|
|
||||||
return 0;;
|
|
||||||
*)
|
|
||||||
return $ret;;
|
|
||||||
esac
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_chrootnamcap() {
|
_chrootnamcap() {
|
||||||
@@ -246,25 +261,28 @@ _chrootnamcap() {
|
|||||||
# Usage: download_sources $copydir $makepkg_user
|
# Usage: download_sources $copydir $makepkg_user
|
||||||
# Globals:
|
# Globals:
|
||||||
# - SRCDEST
|
# - SRCDEST
|
||||||
|
# - USER
|
||||||
download_sources() {
|
download_sources() {
|
||||||
local copydir=$1
|
local copydir=$1
|
||||||
local makepkg_user=$2
|
local makepkg_user=$2
|
||||||
|
|
||||||
setup_workdir
|
local builddir
|
||||||
chown "$makepkg_user:" "$WORKDIR"
|
builddir="$(mktemp -d)"
|
||||||
|
chmod 1777 "$builddir"
|
||||||
|
|
||||||
# Ensure sources are downloaded
|
# Ensure sources are downloaded
|
||||||
sudo -u "$makepkg_user" --preserve-env=GNUPGHOME \
|
sudo -u "$makepkg_user" env SRCDEST="$SRCDEST" BUILDDIR="$builddir" \
|
||||||
env SRCDEST="$SRCDEST" BUILDDIR="$WORKDIR" \
|
|
||||||
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o ||
|
makepkg --config="$copydir/etc/makepkg.conf" --verifysource -o ||
|
||||||
die "Could not download sources."
|
die "Could not download sources."
|
||||||
|
|
||||||
|
# Clean up garbage from verifysource
|
||||||
|
rm -rf "$builddir"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Usage: move_products $copydir $owner
|
# Usage: move_products $copydir $owner
|
||||||
# Globals:
|
# Globals:
|
||||||
# - PKGDEST
|
# - PKGDEST
|
||||||
# - LOGDEST
|
# - LOGDEST
|
||||||
# - SRCPKGDEST
|
|
||||||
move_products() {
|
move_products() {
|
||||||
local copydir=$1
|
local copydir=$1
|
||||||
local src_owner=$2
|
local src_owner=$2
|
||||||
@@ -300,26 +318,7 @@ move_products() {
|
|||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
default_makepkg_args=(--syncdeps --noconfirm --log --holdver --skipinteg)
|
init_variables
|
||||||
makepkg_args=("${default_makepkg_args[@]}")
|
|
||||||
keepbuilddir=false
|
|
||||||
update_first=false
|
|
||||||
clean_first=false
|
|
||||||
run_namcap=false
|
|
||||||
temp_chroot=false
|
|
||||||
chrootdir=
|
|
||||||
passeddir=
|
|
||||||
makepkg_user=
|
|
||||||
declare -a install_pkgs
|
|
||||||
declare -i ret=0
|
|
||||||
|
|
||||||
bindmounts_ro=()
|
|
||||||
bindmounts_rw=()
|
|
||||||
|
|
||||||
copy=$USER
|
|
||||||
[[ -n ${SUDO_USER:-} ]] && copy=$SUDO_USER
|
|
||||||
[[ -z "$copy" || $copy = root ]] && copy=copy
|
|
||||||
src_owner=${SUDO_USER:-$USER}
|
|
||||||
|
|
||||||
while getopts 'hcur:I:l:nTD:d:U:' arg; do
|
while getopts 'hcur:I:l:nTD:d:U:' arg; do
|
||||||
case "$arg" in
|
case "$arg" in
|
||||||
@@ -341,7 +340,7 @@ main() {
|
|||||||
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
[[ -n $makepkg_user && -z $(id -u "$makepkg_user") ]] && die 'Invalid makepkg user.'
|
||||||
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
makepkg_user=${makepkg_user:-${SUDO_USER:-$USER}}
|
||||||
|
|
||||||
check_root SOURCE_DATE_EPOCH,GNUPGHOME,SRCDEST,SRCPKGDEST,PKGDEST,LOGDEST,MAKEFLAGS,PACKAGER
|
check_root
|
||||||
|
|
||||||
# Canonicalize chrootdir, getting rid of trailing /
|
# Canonicalize chrootdir, getting rid of trailing /
|
||||||
chrootdir=$(readlink -e "$passeddir")
|
chrootdir=$(readlink -e "$passeddir")
|
||||||
@@ -409,7 +408,7 @@ main() {
|
|||||||
|
|
||||||
download_sources "$copydir" "$makepkg_user"
|
download_sources "$copydir" "$makepkg_user"
|
||||||
|
|
||||||
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir" "$run_namcap"
|
prepare_chroot "$copydir" "$USER_HOME" "$keepbuilddir"
|
||||||
|
|
||||||
if arch-nspawn "$copydir" \
|
if arch-nspawn "$copydir" \
|
||||||
--bind="$PWD:/startdir" \
|
--bind="$PWD:/startdir" \
|
||||||
|
150
makepkg-i686.conf
Normal file
150
makepkg-i686.conf
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
#!/hint/bash
|
||||||
|
# shellcheck disable=2034
|
||||||
|
|
||||||
|
#
|
||||||
|
# /etc/makepkg.conf
|
||||||
|
#
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# SOURCE ACQUISITION
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
#-- The download utilities that makepkg should use to acquire sources
|
||||||
|
# Format: 'protocol::agent'
|
||||||
|
DLAGENTS=('ftp::/usr/bin/curl -fC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||||
|
'http::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u'
|
||||||
|
'https::/usr/bin/curl -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')
|
||||||
|
|
||||||
|
# Other common tools:
|
||||||
|
# /usr/bin/snarf
|
||||||
|
# /usr/bin/lftpget -c
|
||||||
|
# /usr/bin/wget
|
||||||
|
|
||||||
|
#-- The package required by makepkg to download VCS sources
|
||||||
|
# Format: 'protocol::package'
|
||||||
|
VCSCLIENTS=('bzr::bzr'
|
||||||
|
'git::git'
|
||||||
|
'hg::mercurial'
|
||||||
|
'svn::subversion')
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# ARCHITECTURE, COMPILE FLAGS
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
CARCH="i686"
|
||||||
|
CHOST="i686-pc-linux-gnu"
|
||||||
|
|
||||||
|
#-- Compiler and Linker Flags
|
||||||
|
# -march (or -mcpu) builds exclusively for an architecture
|
||||||
|
# -mtune optimizes for an architecture, but builds for whole processor family
|
||||||
|
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
||||||
|
CFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
|
CXXFLAGS="-march=i686 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
|
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
||||||
|
#-- Make Flags: change this for DistCC/SMP systems
|
||||||
|
#MAKEFLAGS="-j2"
|
||||||
|
#-- Debugging flags
|
||||||
|
DEBUG_CFLAGS="-g -fvar-tracking-assignments"
|
||||||
|
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# BUILD ENVIRONMENT
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
#-- color: Colorize output messages
|
||||||
|
#-- ccache: Use ccache to cache compilation
|
||||||
|
#-- check: Run the check() function if present in the PKGBUILD
|
||||||
|
#-- sign: Generate PGP signature file
|
||||||
|
#
|
||||||
|
BUILDENV=(!distcc color !ccache check !sign)
|
||||||
|
#
|
||||||
|
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
|
||||||
|
#-- specify a space-delimited list of hosts running in the DistCC cluster.
|
||||||
|
#DISTCC_HOSTS=""
|
||||||
|
#
|
||||||
|
#-- Specify a directory for package building.
|
||||||
|
#BUILDDIR=/tmp/makepkg
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# GLOBAL PACKAGE OPTIONS
|
||||||
|
# These are default values for the options=() settings
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
# Default: OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !optipng !upx !debug)
|
||||||
|
# A negated option will do the opposite of the comments below.
|
||||||
|
#
|
||||||
|
#-- strip: Strip symbols from binaries/libraries
|
||||||
|
#-- docs: Save doc directories specified by DOC_DIRS
|
||||||
|
#-- libtool: Leave libtool (.la) files in packages
|
||||||
|
#-- staticlibs: Leave static library (.a) files in packages
|
||||||
|
#-- emptydirs: Leave empty directories in packages
|
||||||
|
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
|
||||||
|
#-- purge: Remove files specified by PURGE_TARGETS
|
||||||
|
#-- upx: Compress binary executable files using UPX
|
||||||
|
#-- optipng: Optimize PNG images with optipng
|
||||||
|
#-- debug: Add debugging flags as specified in DEBUG_* variables
|
||||||
|
#
|
||||||
|
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !optipng !upx !debug)
|
||||||
|
|
||||||
|
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
|
||||||
|
INTEGRITY_CHECK=(md5)
|
||||||
|
#-- Options to be used when stripping binaries. See `man strip' for details.
|
||||||
|
STRIP_BINARIES="--strip-all"
|
||||||
|
#-- Options to be used when stripping shared libraries. See `man strip' for details.
|
||||||
|
STRIP_SHARED="--strip-unneeded"
|
||||||
|
#-- Options to be used when stripping static libraries. See `man strip' for details.
|
||||||
|
STRIP_STATIC="--strip-debug"
|
||||||
|
#-- Manual (man and info) directories to compress (if zipman is specified)
|
||||||
|
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
|
||||||
|
#-- Doc directories to remove (if !docs is specified)
|
||||||
|
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
||||||
|
#-- Files to be removed from all packages (if purge is specified)
|
||||||
|
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# PACKAGE OUTPUT
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
# Default: put built package and cached source in build directory
|
||||||
|
#
|
||||||
|
#-- Destination: specify a fixed directory where all packages will be placed
|
||||||
|
#PKGDEST=/home/packages
|
||||||
|
#-- Source cache: specify a fixed directory where source files will be cached
|
||||||
|
#SRCDEST=/home/sources
|
||||||
|
#-- Source packages: specify a fixed directory where all src packages will be placed
|
||||||
|
#SRCPKGDEST=/home/srcpackages
|
||||||
|
#-- Log files: specify a fixed directory where all log files will be placed
|
||||||
|
#LOGDEST=/home/makepkglogs
|
||||||
|
#-- Packager: name/email of the person or organization building packages
|
||||||
|
#PACKAGER="John Doe <john@doe.com>"
|
||||||
|
#-- Specify a key to use for package signing
|
||||||
|
#GPGKEY=""
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# COMPRESSION DEFAULTS
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
COMPRESSGZ=(gzip -c -f -n)
|
||||||
|
COMPRESSBZ2=(bzip2 -c -f)
|
||||||
|
COMPRESSXZ=(xz -c -z -)
|
||||||
|
COMPRESSLRZ=(lrzip -q)
|
||||||
|
COMPRESSLZO=(lzop -q)
|
||||||
|
COMPRESSZ=(compress -c -f)
|
||||||
|
|
||||||
|
#########################################################################
|
||||||
|
# EXTENSION DEFAULTS
|
||||||
|
#########################################################################
|
||||||
|
#
|
||||||
|
# WARNING: Do NOT modify these variables unless you know what you are
|
||||||
|
# doing.
|
||||||
|
#
|
||||||
|
PKGEXT='.pkg.tar.xz'
|
||||||
|
SRCEXT='.src.tar.gz'
|
||||||
|
|
||||||
|
# vim: set ft=sh ts=2 sw=2 et:
|
@@ -11,10 +11,9 @@
|
|||||||
#
|
#
|
||||||
#-- The download utilities that makepkg should use to acquire sources
|
#-- The download utilities that makepkg should use to acquire sources
|
||||||
# Format: 'protocol::agent'
|
# Format: 'protocol::agent'
|
||||||
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
|
DLAGENTS=('ftp::/usr/bin/curl -fC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
||||||
'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
|
'http::/usr/bin/curl -fLC - --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 -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'
|
'rsync::/usr/bin/rsync --no-motd -z %u %o'
|
||||||
'scp::/usr/bin/scp -C %u %o')
|
'scp::/usr/bin/scp -C %u %o')
|
||||||
|
|
||||||
@@ -38,9 +37,11 @@ CARCH="x86_64"
|
|||||||
CHOST="x86_64-pc-linux-gnu"
|
CHOST="x86_64-pc-linux-gnu"
|
||||||
|
|
||||||
#-- Compiler and Linker Flags
|
#-- Compiler and Linker Flags
|
||||||
|
# -march (or -mcpu) builds exclusively for an architecture
|
||||||
|
# -mtune optimizes for an architecture, but builds for whole processor family
|
||||||
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
CPPFLAGS="-D_FORTIFY_SOURCE=2"
|
||||||
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
|
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
|
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fstack-protector-strong -fno-plt"
|
||||||
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
|
||||||
#-- Make Flags: change this for DistCC/SMP systems
|
#-- Make Flags: change this for DistCC/SMP systems
|
||||||
#MAKEFLAGS="-j2"
|
#MAKEFLAGS="-j2"
|
||||||
@@ -52,7 +53,7 @@ DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"
|
|||||||
# BUILD ENVIRONMENT
|
# BUILD ENVIRONMENT
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# 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.
|
# A negated environment option will do the opposite of the comments below.
|
||||||
#
|
#
|
||||||
#-- distcc: Use the Distributed C/C++/ObjC compiler
|
#-- distcc: Use the Distributed C/C++/ObjC compiler
|
||||||
@@ -75,7 +76,7 @@ BUILDENV=(!distcc color !ccache check !sign)
|
|||||||
# These are default values for the options=() settings
|
# These are default values for the options=() settings
|
||||||
#########################################################################
|
#########################################################################
|
||||||
#
|
#
|
||||||
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
|
# Default: OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !optipng !upx !debug)
|
||||||
# A negated option will do the opposite of the comments below.
|
# A negated option will do the opposite of the comments below.
|
||||||
#
|
#
|
||||||
#-- strip: Strip symbols from binaries/libraries
|
#-- strip: Strip symbols from binaries/libraries
|
||||||
@@ -85,9 +86,11 @@ BUILDENV=(!distcc color !ccache check !sign)
|
|||||||
#-- emptydirs: Leave empty directories in packages
|
#-- emptydirs: Leave empty directories in packages
|
||||||
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
|
#-- zipman: Compress manual (man and info) pages in MAN_DIRS with gzip
|
||||||
#-- purge: Remove files specified by PURGE_TARGETS
|
#-- purge: Remove files specified by PURGE_TARGETS
|
||||||
|
#-- upx: Compress binary executable files using UPX
|
||||||
|
#-- optipng: Optimize PNG images with optipng
|
||||||
#-- debug: Add debugging flags as specified in DEBUG_* variables
|
#-- debug: Add debugging flags as specified in DEBUG_* variables
|
||||||
#
|
#
|
||||||
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)
|
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !optipng !upx !debug)
|
||||||
|
|
||||||
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
|
#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
|
||||||
INTEGRITY_CHECK=(md5)
|
INTEGRITY_CHECK=(md5)
|
||||||
@@ -103,8 +106,6 @@ MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
|
|||||||
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
|
||||||
#-- Files to be removed from all packages (if purge is specified)
|
#-- Files to be removed from all packages (if purge is specified)
|
||||||
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
|
||||||
#-- Directory to store source code in for debug packages
|
|
||||||
DBGSRCDIR="/usr/src/debug"
|
|
||||||
|
|
||||||
#########################################################################
|
#########################################################################
|
||||||
# PACKAGE OUTPUT
|
# PACKAGE OUTPUT
|
||||||
|
149
sogrep
149
sogrep
@@ -1,149 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# sogrep - find shared library links in an Arch Linux repository.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2019 by Eli Schwartz <eschwartz@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
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
# globals
|
|
||||||
: ${SOLINKS_MIRROR:="https://mirror.pkgbuild.com"}
|
|
||||||
: ${SOCACHE_DIR:="${XDG_CACHE_HOME:-${HOME}/.cache}/sogrep"}
|
|
||||||
repos=('staging' 'testing' 'core' 'extra'
|
|
||||||
'community-staging' 'community-testing' 'community'
|
|
||||||
'multilib-staging' 'multilib-testing' 'multilib'
|
|
||||||
'gnome-unstable' 'kde-unstable')
|
|
||||||
arches=('x86_64')
|
|
||||||
|
|
||||||
# options
|
|
||||||
REFRESH=0
|
|
||||||
VERBOSE=0
|
|
||||||
|
|
||||||
source /usr/share/makepkg/util/parseopts.sh
|
|
||||||
source /usr/share/makepkg/util/util.sh
|
|
||||||
|
|
||||||
recache() {
|
|
||||||
local repo arch verbosity=-s
|
|
||||||
|
|
||||||
(( VERBOSE )) && verbosity=--progress-bar
|
|
||||||
|
|
||||||
for repo in "${repos[@]}"; do
|
|
||||||
for arch in "${arches[@]}"; do
|
|
||||||
rm -rf "${SOCACHE_DIR}/${arch}/${repo}"
|
|
||||||
mkdir -p "${SOCACHE_DIR}/${arch}/${repo}"
|
|
||||||
curl "$verbosity" "${SOLINKS_MIRROR}/${repo}/os/${arch}/${repo}.links.tar.gz" | bsdtar -xf - -C "${SOCACHE_DIR}/${arch}/${repo}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
search() {
|
|
||||||
local repo=$1 arch lib=$2 srepos=("${repos[@]}")
|
|
||||||
|
|
||||||
if [[ $repo != all ]]; then
|
|
||||||
if ! in_array "${repo}" "${repos[@]}"; then
|
|
||||||
echo "${BASH_SOURCE[0]##*/}: unrecognized repo '$repo'"
|
|
||||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
srepos=("${repo}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
for arch in "${arches[@]}"; do
|
|
||||||
for repo in "${srepos[@]}"; do
|
|
||||||
local prefix=
|
|
||||||
(( VERBOSE && ${#srepos[@]} > 1 )) && prefix=${repo}/
|
|
||||||
db=${SOCACHE_DIR}/${arch}/${repo}/
|
|
||||||
if [[ -d ${db} ]]; then
|
|
||||||
while read -rd '' pkg; do
|
|
||||||
read -r match
|
|
||||||
pkg=${pkg#${db}}
|
|
||||||
pkg="${prefix}${pkg%-*-*/links}"
|
|
||||||
|
|
||||||
if (( VERBOSE )); then
|
|
||||||
printf '%-35s %s\n' "${pkg}" "${match}"
|
|
||||||
else
|
|
||||||
printf '%s\n' "${pkg}"
|
|
||||||
fi
|
|
||||||
done < <(grep -rZ "${lib}" "${db}") | sort -u
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done | resort
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
cat <<- _EOF_
|
|
||||||
Usage: ${BASH_SOURCE[0]##*/} [OPTIONS] REPO LIBNAME
|
|
||||||
|
|
||||||
Check the soname links database for Arch Linux repositories containing
|
|
||||||
packages linked to a given shared library. If the repository specified
|
|
||||||
is "all", then all repositories will be searched, otherwise only the
|
|
||||||
named repository will be searched.
|
|
||||||
|
|
||||||
If the links database does not exist, it will be downloaded first.
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
-v, --verbose Show matched links in addition to pkgname
|
|
||||||
-r, --refresh Refresh the links databases
|
|
||||||
-h, --help Show this help text
|
|
||||||
_EOF_
|
|
||||||
}
|
|
||||||
|
|
||||||
# utility function to resort with multiple repos + no-verbose
|
|
||||||
resort() { sort -u; }
|
|
||||||
|
|
||||||
if (( $# == 0 )); then
|
|
||||||
echo "error: No arguments passed."
|
|
||||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
OPT_SHORT='vrh'
|
|
||||||
OPT_LONG=('verbose' 'refresh' 'help')
|
|
||||||
if ! parseopts "$OPT_SHORT" "${OPT_LONG[@]}" -- "$@"; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
set -- "${OPTRET[@]}"
|
|
||||||
|
|
||||||
while :; do
|
|
||||||
case $1 in
|
|
||||||
-v|--verbose)
|
|
||||||
resort() { cat; }
|
|
||||||
VERBOSE=1
|
|
||||||
;;
|
|
||||||
-r|--refresh)
|
|
||||||
REFRESH=1
|
|
||||||
;;
|
|
||||||
-h|--help)
|
|
||||||
usage
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
--)
|
|
||||||
shift; break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if ! (( ( REFRESH && $# == 0 ) || $# == 2 )); then
|
|
||||||
echo "error: Incorrect number of arguments passed."
|
|
||||||
echo "Try '${BASH_SOURCE[0]##*/} --help' for more information."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (( REFRESH )) || [[ ! -d ${SOCACHE_DIR} ]]; then
|
|
||||||
recache
|
|
||||||
(( $# == 2 )) || exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
search "$@"
|
|
@@ -1,4 +1,4 @@
|
|||||||
#compdef archbuild archco arch-nspawn archrelease commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-x86_64-build=archbuild testing-x86_64-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco
|
#compdef archbuild archco arch-nspawn archrelease archrm commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-i686-build=archbuild extra-x86_64-build=archbuild testing-i686-build=archbuild testing-x86_64-build=archbuild staging-i686-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-i686-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-i686-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco
|
||||||
# License: Unspecified
|
# License: Unspecified
|
||||||
|
|
||||||
m4_include(lib/valid-tags.sh)
|
m4_include(lib/valid-tags.sh)
|
||||||
@@ -23,6 +23,10 @@ _archrelease_args=(
|
|||||||
"*:arch:($_tags[*])"
|
"*:arch:($_tags[*])"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
_archrm_args=(
|
||||||
|
'1:path:_files -/'
|
||||||
|
)
|
||||||
|
|
||||||
_commitpkg_args=(
|
_commitpkg_args=(
|
||||||
"-a[Release to a specific architecture only]:arch:($_arch[*])"
|
"-a[Release to a specific architecture only]:arch:($_arch[*])"
|
||||||
'-l[Set bandwidth limit]:limit'
|
'-l[Set bandwidth limit]:limit'
|
||||||
|
Reference in New Issue
Block a user