parent
b879a9f1ef
commit
818d47029a
Binary file not shown.
Binary file not shown.
@ -0,0 +1,47 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{8..10} )
|
||||
inherit bash-completion-r1 distutils-r1
|
||||
|
||||
DESCRIPTION="Universal Command Line Environment for AWS"
|
||||
HOMEPAGE="https://pypi.org/project/awscli/"
|
||||
#SRC_URI="mirror://pypi/${P:0:1}/${PN}/${P}.tar.gz"
|
||||
SRC_URI="https://github.com/aws/aws-cli/archive/${PV}.tar.gz -> ${P}.tar.gz"
|
||||
S="${WORKDIR}/aws-cli-${PV}"
|
||||
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~arm64 ~x86"
|
||||
|
||||
# botocore is x.(y+1).z
|
||||
BOTOCORE_PV="$(ver_cut 1).$(( $(ver_cut 2) + 1)).$(ver_cut 3-)"
|
||||
RDEPEND="
|
||||
>=dev-python/botocore-${BOTOCORE_PV}[${PYTHON_USEDEP}]
|
||||
dev-python/colorama[${PYTHON_USEDEP}]
|
||||
dev-python/docutils[${PYTHON_USEDEP}]
|
||||
dev-python/rsa[${PYTHON_USEDEP}]
|
||||
>=dev-python/s3transfer-0.4.0[${PYTHON_USEDEP}]
|
||||
dev-python/pyyaml[${PYTHON_USEDEP}]
|
||||
"
|
||||
|
||||
distutils_enable_tests --install pytest
|
||||
|
||||
python_test() {
|
||||
distutils_install_for_testing
|
||||
# integration tests require AWS credentials and Internet access
|
||||
epytest tests/{functional,unit}
|
||||
}
|
||||
|
||||
python_install_all() {
|
||||
newbashcomp bin/aws_bash_completer aws
|
||||
|
||||
insinto /usr/share/zsh/site-functions
|
||||
newins bin/aws_zsh_completer.sh _aws
|
||||
|
||||
distutils-r1_python_install_all
|
||||
|
||||
rm "${ED}"/usr/bin/{aws.cmd,aws_bash_completer,aws_zsh_completer.sh} || die
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +1,2 @@
|
||||
DIST inform-6.33.1-b2.tar.gz 1822648 BLAKE2B e2ea59aa310b2f0122d1b834d98b0b827b945a8031a3e61c70bf502f7a746f43b81035cc22805ab351abf6f9df9ba898ea6ea83da863ef9aa313840ed974d725 SHA512 12cc10b7dae4118600a4d19d0aa44c3a7c93dfc8aa17bd56df7b9237f21df0ae99db6840eefaa5b11ff346369c6f6f2f128167b3479c8f540c29e3e36666c368
|
||||
DIST inform-6.35-r4.tar.gz 2307089 BLAKE2B 9864324fe29fe920e226a239f92f327678ed796e5f5a27b3814f62b1158673b2c14d6771abd7af6f9743bb0949c4c6de75a6b591337b0e99196f8ab4d9f0c9f7 SHA512 c30c7067786845e0c77783f7a03a151ae1238978f648f6036fe9535a33662c76abc11db21bab00fe60c4742cd4da46e4674081711b9b3852520bfb14c1b068a6
|
||||
|
@ -1,25 +1,31 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
MY_P=${P/_p/-b}
|
||||
DESCRIPTION="design system for interactive fiction"
|
||||
HOMEPAGE="http://www.inform-fiction.org/"
|
||||
SRC_URI="http://mirror.ifarchive.org/if-archive/infocom/compilers/inform6/source/${MY_P}.tar.gz"
|
||||
EAPI=8
|
||||
|
||||
MY_P="${P/_p/-b}"
|
||||
|
||||
DESCRIPTION="Design system for interactive fiction"
|
||||
HOMEPAGE="https://www.inform-fiction.org/"
|
||||
SRC_URI="mirror://gentoo/${MY_P}.tar.gz"
|
||||
S="${WORKDIR}/${MY_P}"
|
||||
|
||||
LICENSE="Artistic-2 Inform"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ppc ~sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
|
||||
IUSE="emacs"
|
||||
PDEPEND="emacs? ( app-emacs/inform-mode )"
|
||||
|
||||
S=${WORKDIR}/${MY_P}
|
||||
PDEPEND="emacs? ( app-emacs/inform-mode )"
|
||||
|
||||
src_install() {
|
||||
default
|
||||
|
||||
dodoc VERSION
|
||||
|
||||
docinto tutorial
|
||||
dodoc tutor/README tutor/*.inf
|
||||
mv "${ED}"/usr/share/${PN}/manual "${ED}"/usr/share/doc/${PF}/html
|
||||
rmdir "${ED}"/usr/share/inform/{include,module}
|
||||
|
||||
mv "${ED}"/usr/share/{${PN}/manual,doc/${PF}/html} || die
|
||||
rmdir "${ED}"/usr/share/inform/{include,module} || die
|
||||
rm "${ED}"/usr/share/inform/6.33b2/include/SmartCantGo.h || die #723062
|
||||
}
|
||||
|
@ -0,0 +1,51 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit toolchain-funcs
|
||||
|
||||
MY_P="${P/_p/-r}"
|
||||
|
||||
DESCRIPTION="Design system for interactive fiction"
|
||||
HOMEPAGE="https://www.inform-fiction.org/"
|
||||
SRC_URI="https://ifarchive.org/if-archive/infocom/compilers/inform6/source/${MY_P}.tar.gz"
|
||||
S="${WORKDIR}/${MY_P}"
|
||||
|
||||
LICENSE="Artistic-2 Inform"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~ppc ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos"
|
||||
IUSE="emacs tools"
|
||||
# non-interactive tests use ruby, seem broken, and return true even on failure
|
||||
RESTRICT="test"
|
||||
|
||||
RDEPEND="
|
||||
tools? (
|
||||
dev-lang/perl
|
||||
dev-perl/DateTime
|
||||
)"
|
||||
PDEPEND="emacs? ( app-emacs/inform-mode )"
|
||||
|
||||
src_compile() {
|
||||
tc-export CC
|
||||
|
||||
emake PREFIX="${EPREFIX}"/usr OPTS="${CFLAGS} ${CPPFLAGS}"
|
||||
}
|
||||
|
||||
src_install() {
|
||||
local emakeargs=(
|
||||
PREFIX="${ED}"/usr
|
||||
REAL_PREFIX="${EPREFIX}"/usr
|
||||
MANDIR="${ED}"/usr/share/man/man1
|
||||
PUNYDOCS="${ED}"/usr/share/doc/${PF}/punyinform
|
||||
PUNYTESTS="${T}" # don't install tests
|
||||
)
|
||||
|
||||
emake -j1 "${emakeargs[@]}" install
|
||||
|
||||
dodoc AUTHORS NEWS README.md VERSION docs/README*
|
||||
|
||||
use tools || rm "${ED}"/usr/bin/*blorb* || die
|
||||
|
||||
find "${ED}"/usr/share/doc \( -name Makefile -o -name 'custom.*' \) -delete || die
|
||||
}
|
@ -1,44 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
|
||||
<pkgmetadata>
|
||||
<maintainer type="project">
|
||||
<maintainer type="project">
|
||||
<email>games@gentoo.org</email>
|
||||
<name>Gentoo Games Project</name>
|
||||
</maintainer>
|
||||
<longdescription>
|
||||
A Design System for Interactive Fiction
|
||||
|
||||
Just as film might be called a form of literature which needs technology to be
|
||||
read (a cinema projector or a television set) and to be written (a camera),
|
||||
interactive fiction is read with the aid of a computer. On this analogy, Inform
|
||||
is a piece of software enabling any modern computer to be used as the camera, or
|
||||
the film studio, to create works of interactive fiction. To read the resulting
|
||||
works, you and your audience need only a simpler piece of software called an
|
||||
interpreter.
|
||||
|
||||
In this genre of fiction, the computer describes a world and the player types
|
||||
instructions like touch the mirror for the protagonist character to follow; the
|
||||
computer responds by describing the result, and so on until a story is told.
|
||||
|
||||
Interactive fiction emerged from the old-style "adventure game" (c.1975) and
|
||||
tends to be a playful genre, which must sometimes be teased out as though it were
|
||||
a cryptic crossword puzzle. But this doesn't prevent it from being an artistic
|
||||
medium, which has attracted (for instance) the former U.S. Poet Laureate, Robert
|
||||
Pinsky, and the novelists Thomas M. Disch and Michael Crichton. An interactive
|
||||
fiction is not a child's puzzle-book, with a maze on one page and a rebus on the
|
||||
next, but nor is it a novel. Neither pure interaction nor pure fiction, it lies
|
||||
in a strange and still largely unexplored land in between.
|
||||
|
||||
Since its invention (by Graham Nelson in 1993), Inform has been used to design
|
||||
some hundreds of works of interactive fiction, in eight languages, reviewed in
|
||||
periodicals ranging in specialisation from XYZZYnews to The New York Times. It
|
||||
accounts for around ten thousand postings per year to Internet newsgroups.
|
||||
Commercially, Inform has been used as a multimedia games prototyping tool.
|
||||
Academically, it has turned up in syllabuses and seminars from computer science
|
||||
to theoretical architecture, and appears in books such as Cybertext: Perspectives
|
||||
on Ergodic Literature (E. J. Aarseth, Johns Hopkins Press, 1997). Having started
|
||||
as a revival of the then-disused Infocom adventure game format, the Z-Machine,
|
||||
Inform came full circle when it produced Infocom's only text game of the 1990s:
|
||||
Zork: The Undiscovered Underground, by Mike Berlyn and Marc Blank.
|
||||
</longdescription>
|
||||
<use>
|
||||
<flag name="tools">Install blorbtools for manipulating Blorb files</flag>
|
||||
</use>
|
||||
<upstream>
|
||||
<remote-id type="gitlab">DavidGriffith/inform6unix</remote-id>
|
||||
</upstream>
|
||||
</pkgmetadata>
|
||||
|
@ -0,0 +1,187 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=7
|
||||
|
||||
inherit bash-completion-r1 prefix rust-toolchain toolchain-funcs verify-sig multilib-minimal
|
||||
|
||||
MY_P="rust-${PV}"
|
||||
|
||||
DESCRIPTION="Systems programming language from Mozilla"
|
||||
HOMEPAGE="https://www.rust-lang.org/"
|
||||
SRC_URI="$(rust_all_arch_uris ${MY_P})"
|
||||
|
||||
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
|
||||
SLOT="stable"
|
||||
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
|
||||
IUSE="clippy cpu_flags_x86_sse2 doc prefix rls rustfmt"
|
||||
|
||||
DEPEND=""
|
||||
RDEPEND=">=app-eselect/eselect-rust-20190311"
|
||||
BDEPEND="
|
||||
prefix? ( dev-util/patchelf )
|
||||
verify-sig? ( app-crypt/openpgp-keys-rust )
|
||||
"
|
||||
|
||||
REQUIRED_USE="x86? ( cpu_flags_x86_sse2 )"
|
||||
|
||||
QA_PREBUILT="
|
||||
opt/${P}/bin/.*
|
||||
opt/${P}/lib/.*.so
|
||||
opt/${P}/libexec/.*
|
||||
opt/${P}/lib/rustlib/.*/bin/.*
|
||||
opt/${P}/lib/rustlib/.*/lib/.*
|
||||
"
|
||||
|
||||
VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/rust.asc
|
||||
|
||||
pkg_pretend() {
|
||||
if [[ "$(tc-is-softfloat)" != "no" ]] && [[ ${CHOST} == armv7* ]]; then
|
||||
die "${CHOST} is not supported by upstream Rust. You must use a hard float version."
|
||||
fi
|
||||
}
|
||||
|
||||
src_unpack() {
|
||||
verify-sig_src_unpack
|
||||
mv "${WORKDIR}/${MY_P}-$(rust_abi)" "${S}" || die
|
||||
}
|
||||
|
||||
patchelf_for_bin() {
|
||||
local filetype=$(file -b ${1})
|
||||
if [[ ${filetype} == *ELF*interpreter* ]]; then
|
||||
einfo "${1}'s interpreter changed"
|
||||
patchelf ${1} --set-interpreter ${2} || die
|
||||
elif [[ ${filetype} == *script* ]]; then
|
||||
hprefixify ${1}
|
||||
fi
|
||||
}
|
||||
|
||||
multilib_src_install() {
|
||||
if multilib_is_native_abi; then
|
||||
|
||||
# start native abi install
|
||||
pushd "${S}" >/dev/null || die
|
||||
local analysis std
|
||||
analysis="$(grep 'analysis' ./components)"
|
||||
std="$(grep 'std' ./components)"
|
||||
local components="rustc,cargo,${std}"
|
||||
use doc && components="${components},rust-docs"
|
||||
use clippy && components="${components},clippy-preview"
|
||||
use rls && components="${components},rls-preview,${analysis}"
|
||||
use rustfmt && components="${components},rustfmt-preview"
|
||||
./install.sh \
|
||||
--components="${components}" \
|
||||
--disable-verify \
|
||||
--prefix="${ED}/opt/${P}" \
|
||||
--mandir="${ED}/opt/${P}/man" \
|
||||
--disable-ldconfig \
|
||||
|| die
|
||||
|
||||
if use prefix; then
|
||||
local interpreter=$(patchelf --print-interpreter ${EPREFIX}/bin/bash)
|
||||
ebegin "Changing interpreter to ${interpreter} for Gentoo prefix at ${ED}/opt/${P}/bin"
|
||||
find "${ED}/opt/${P}/bin" -type f -print0 | \
|
||||
while IFS= read -r -d '' filename; do
|
||||
patchelf_for_bin ${filename} ${interpreter} \; || die
|
||||
done
|
||||
eend $?
|
||||
fi
|
||||
|
||||
local symlinks=(
|
||||
cargo
|
||||
rustc
|
||||
rustdoc
|
||||
rust-gdb
|
||||
rust-gdbgui
|
||||
rust-lldb
|
||||
)
|
||||
|
||||
use clippy && symlinks+=( clippy-driver cargo-clippy )
|
||||
use rls && symlinks+=( rls )
|
||||
use rustfmt && symlinks+=( rustfmt cargo-fmt )
|
||||
|
||||
einfo "installing eselect-rust symlinks and paths"
|
||||
local i
|
||||
for i in "${symlinks[@]}"; do
|
||||
# we need realpath on /usr/bin/* symlink return version-appended binary path.
|
||||
# so /usr/bin/rustc should point to /opt/rust-bin-<ver>/bin/rustc-<ver>
|
||||
local ver_i="${i}-bin-${PV}"
|
||||
ln -v "${ED}/opt/${P}/bin/${i}" "${ED}/opt/${P}/bin/${ver_i}"
|
||||
dosym "../../opt/${P}/bin/${ver_i}" "/usr/bin/${ver_i}"
|
||||
done
|
||||
|
||||
# symlinks to switch components to active rust in eselect
|
||||
dosym "../../../opt/${P}/lib" "/usr/lib/rust/lib-bin-${PV}"
|
||||
dosym "../../../opt/${P}/man" "/usr/lib/rust/man-bin-${PV}"
|
||||
dosym "../../opt/${P}/lib/rustlib" "/usr/lib/rustlib-bin-${PV}"
|
||||
dosym "../../../opt/${P}/share/doc/rust" "/usr/share/doc/${P}"
|
||||
|
||||
# musl logic can be improved a bit, but fine as is for now
|
||||
cat <<-_EOF_ > "${T}/50${P}"
|
||||
LDPATH="${EPREFIX}/usr/lib/rust/lib"
|
||||
MANPATH="${EPREFIX}/usr/lib/rust/man"
|
||||
$(use amd64 && usex elibc_musl 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
|
||||
$(use arm64 && usex elibc_musl 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
|
||||
_EOF_
|
||||
doenvd "${T}/50${P}"
|
||||
|
||||
# note: eselect-rust adds EROOT to all paths below
|
||||
cat <<-_EOF_ > "${T}/provider-${P}"
|
||||
/usr/bin/cargo
|
||||
/usr/bin/rustdoc
|
||||
/usr/bin/rust-gdb
|
||||
/usr/bin/rust-gdbgui
|
||||
/usr/bin/rust-lldb
|
||||
/usr/lib/rustlib
|
||||
/usr/lib/rust/lib
|
||||
/usr/lib/rust/man
|
||||
/usr/share/doc/rust
|
||||
_EOF_
|
||||
|
||||
if use clippy; then
|
||||
echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
|
||||
echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
|
||||
fi
|
||||
if use rls; then
|
||||
echo /usr/bin/rls >> "${T}/provider-${P}"
|
||||
fi
|
||||
if use rustfmt; then
|
||||
echo /usr/bin/rustfmt >> "${T}/provider-${P}"
|
||||
echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
|
||||
fi
|
||||
|
||||
insinto /etc/env.d/rust
|
||||
doins "${T}/provider-${P}"
|
||||
popd >/dev/null || die
|
||||
#end native abi install
|
||||
|
||||
else
|
||||
local rust_target
|
||||
rust_target="$(rust_abi $(get_abi_CHOST ${v##*.}))"
|
||||
dodir "/opt/${P}/lib/rustlib"
|
||||
cp -vr "${WORKDIR}/rust-${PV}-${rust_target}/rust-std-${rust_target}/lib/rustlib/${rust_target}"\
|
||||
"${ED}/opt/${P}/lib/rustlib" || die
|
||||
fi
|
||||
|
||||
# BUG: installs x86_64 binary on other arches
|
||||
rm -f "${ED}/opt/${P}/lib/rustlib/"*/bin/rust-llvm-dwp || die
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
eselect rust update
|
||||
|
||||
elog "Rust installs a helper script for calling GDB now,"
|
||||
elog "for your convenience it is installed under /usr/bin/rust-gdb-bin-${PV}."
|
||||
|
||||
if has_version app-editors/emacs; then
|
||||
elog "install app-emacs/rust-mode to get emacs support for rust."
|
||||
fi
|
||||
|
||||
if has_version app-editors/gvim || has_version app-editors/vim; then
|
||||
elog "install app-vim/rust-vim to get vim support for rust."
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
eselect rust cleanup
|
||||
}
|
@ -0,0 +1,683 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=7
|
||||
|
||||
PYTHON_COMPAT=( python3_{7..10} )
|
||||
|
||||
inherit bash-completion-r1 check-reqs estack flag-o-matic llvm multiprocessing \
|
||||
multilib-build python-any-r1 rust-toolchain toolchain-funcs verify-sig
|
||||
|
||||
if [[ ${PV} = *beta* ]]; then
|
||||
betaver=${PV//*beta}
|
||||
BETA_SNAPSHOT="${betaver:0:4}-${betaver:4:2}-${betaver:6:2}"
|
||||
MY_P="rustc-beta"
|
||||
SLOT="beta/${PV}"
|
||||
SRC="${BETA_SNAPSHOT}/rustc-beta-src.tar.xz -> rustc-${PV}-src.tar.xz"
|
||||
else
|
||||
ABI_VER="$(ver_cut 1-2)"
|
||||
SLOT="stable/${ABI_VER}"
|
||||
MY_P="rustc-${PV}"
|
||||
SRC="${MY_P}-src.tar.xz"
|
||||
KEYWORDS="~amd64 ~arm ~arm64 ~ppc64 ~riscv ~x86"
|
||||
fi
|
||||
|
||||
RUST_STAGE0_VERSION="1.$(($(ver_cut 2) - 1)).0"
|
||||
|
||||
DESCRIPTION="Systems programming language from Mozilla"
|
||||
HOMEPAGE="https://www.rust-lang.org/"
|
||||
|
||||
SRC_URI="
|
||||
https://static.rust-lang.org/dist/${SRC}
|
||||
verify-sig? ( https://static.rust-lang.org/dist/${SRC}.asc )
|
||||
!system-bootstrap? ( $(rust_all_arch_uris rust-${RUST_STAGE0_VERSION}) )
|
||||
"
|
||||
|
||||
# keep in sync with llvm ebuild of the same version as bundled one.
|
||||
ALL_LLVM_TARGETS=( AArch64 AMDGPU ARM AVR BPF Hexagon Lanai Mips MSP430
|
||||
NVPTX PowerPC RISCV Sparc SystemZ WebAssembly X86 XCore )
|
||||
ALL_LLVM_TARGETS=( "${ALL_LLVM_TARGETS[@]/#/llvm_targets_}" )
|
||||
LLVM_TARGET_USEDEPS=${ALL_LLVM_TARGETS[@]/%/(-)?}
|
||||
|
||||
LICENSE="|| ( MIT Apache-2.0 ) BSD-1 BSD-2 BSD-4 UoI-NCSA"
|
||||
|
||||
IUSE="clippy cpu_flags_x86_sse2 debug doc miri nightly parallel-compiler rls rustfmt system-bootstrap system-llvm test wasm ${ALL_LLVM_TARGETS[*]}"
|
||||
|
||||
# Please keep the LLVM dependency block separate. Since LLVM is slotted,
|
||||
# we need to *really* make sure we're not pulling more than one slot
|
||||
# simultaneously.
|
||||
|
||||
# How to use it:
|
||||
# List all the working slots in LLVM_VALID_SLOTS, newest first.
|
||||
LLVM_VALID_SLOTS=( 13 )
|
||||
LLVM_MAX_SLOT="${LLVM_VALID_SLOTS[0]}"
|
||||
|
||||
# splitting usedeps needed to avoid CI/pkgcheck's UncheckableDep limitation
|
||||
# (-) usedep needed because we may build with older llvm without that target
|
||||
LLVM_DEPEND="|| ( "
|
||||
for _s in ${LLVM_VALID_SLOTS[@]}; do
|
||||
LLVM_DEPEND+=" ( "
|
||||
for _x in ${ALL_LLVM_TARGETS[@]}; do
|
||||
LLVM_DEPEND+="
|
||||
${_x}? ( sys-devel/llvm:${_s}[${_x}(-)] )"
|
||||
done
|
||||
LLVM_DEPEND+=" )"
|
||||
done
|
||||
unset _s _x
|
||||
LLVM_DEPEND+=" )
|
||||
<sys-devel/llvm-$(( LLVM_MAX_SLOT + 1 )):=
|
||||
wasm? ( sys-devel/lld )
|
||||
"
|
||||
|
||||
# to bootstrap we need at least exactly previous version, or same.
|
||||
# most of the time previous versions fail to bootstrap with newer
|
||||
# for example 1.47.x, requires at least 1.46.x, 1.47.x is ok,
|
||||
# but it fails to bootstrap with 1.48.x
|
||||
# https://github.com/rust-lang/rust/blob/${PV}/src/stage0.txt
|
||||
RUST_DEP_PREV="$(ver_cut 1).$(($(ver_cut 2) - 1))*"
|
||||
RUST_DEP_CURR="$(ver_cut 1).$(ver_cut 2)*"
|
||||
BOOTSTRAP_DEPEND="||
|
||||
(
|
||||
=dev-lang/rust-"${RUST_DEP_PREV}"
|
||||
=dev-lang/rust-bin-"${RUST_DEP_PREV}"
|
||||
=dev-lang/rust-"${RUST_DEP_CURR}"
|
||||
=dev-lang/rust-bin-"${RUST_DEP_CURR}"
|
||||
)
|
||||
"
|
||||
|
||||
BDEPEND="${PYTHON_DEPS}
|
||||
app-eselect/eselect-rust
|
||||
|| (
|
||||
>=sys-devel/gcc-4.7
|
||||
>=sys-devel/clang-3.5
|
||||
)
|
||||
system-bootstrap? ( ${BOOTSTRAP_DEPEND} )
|
||||
!system-llvm? (
|
||||
>=dev-util/cmake-3.13.4
|
||||
dev-util/ninja
|
||||
)
|
||||
test? ( sys-devel/gdb )
|
||||
verify-sig? ( app-crypt/openpgp-keys-rust )
|
||||
"
|
||||
|
||||
DEPEND="
|
||||
>=app-arch/xz-utils-5.2
|
||||
net-misc/curl:=[http2,ssl]
|
||||
sys-libs/zlib:=
|
||||
dev-libs/openssl:0=
|
||||
elibc_musl? ( sys-libs/libunwind:= )
|
||||
system-llvm? ( ${LLVM_DEPEND} )
|
||||
"
|
||||
|
||||
# we need to block older versions due to layout changes.
|
||||
RDEPEND="${DEPEND}
|
||||
app-eselect/eselect-rust
|
||||
!<dev-lang/rust-1.47.0-r1
|
||||
!<dev-lang/rust-bin-1.47.0-r1
|
||||
"
|
||||
|
||||
REQUIRED_USE="|| ( ${ALL_LLVM_TARGETS[*]} )
|
||||
miri? ( nightly )
|
||||
parallel-compiler? ( nightly )
|
||||
test? ( ${ALL_LLVM_TARGETS[*]} )
|
||||
wasm? ( llvm_targets_WebAssembly )
|
||||
x86? ( cpu_flags_x86_sse2 )
|
||||
"
|
||||
|
||||
# we don't use cmake.eclass, but can get a warnings
|
||||
CMAKE_WARN_UNUSED_CLI=no
|
||||
|
||||
QA_FLAGS_IGNORED="
|
||||
usr/lib/${PN}/${PV}/bin/.*
|
||||
usr/lib/${PN}/${PV}/libexec/.*
|
||||
usr/lib/${PN}/${PV}/lib/lib.*.so
|
||||
usr/lib/${PN}/${PV}/lib/rustlib/.*/bin/.*
|
||||
usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
|
||||
"
|
||||
|
||||
QA_SONAME="
|
||||
usr/lib/${PN}/${PV}/lib/lib.*.so.*
|
||||
usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/lib.*.so
|
||||
"
|
||||
|
||||
# An rmeta file is custom binary format that contains the metadata for the crate.
|
||||
# rmeta files do not support linking, since they do not contain compiled object files.
|
||||
# so we can safely silence the warning for this QA check.
|
||||
QA_WX_LOAD="usr/lib/${PN}/${PV}/lib/rustlib/.*/lib/.*rmeta"
|
||||
QA_EXECSTACK="${QA_WX_LOAD}"
|
||||
|
||||
# causes double bootstrap
|
||||
RESTRICT="test"
|
||||
|
||||
VERIFY_SIG_OPENPGP_KEY_PATH=${BROOT}/usr/share/openpgp-keys/rust.asc
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/1.55.0-ignore-broken-and-non-applicable-tests.patch
|
||||
"${FILESDIR}"/1.49.0-gentoo-musl-target-specs.patch
|
||||
)
|
||||
|
||||
S="${WORKDIR}/${MY_P}-src"
|
||||
|
||||
toml_usex() {
|
||||
usex "${1}" true false
|
||||
}
|
||||
|
||||
bootstrap_rust_version_check() {
|
||||
# never call from pkg_pretend. eselect-rust may be not installed yet.
|
||||
[[ ${MERGE_TYPE} == binary ]] && return
|
||||
local rustc_wanted="$(ver_cut 1).$(($(ver_cut 2) - 1))"
|
||||
local rustc_toonew="$(ver_cut 1).$(($(ver_cut 2) + 1))"
|
||||
local rustc_version=( $(eselect --brief rust show 2>/dev/null) )
|
||||
rustc_version=${rustc_version[0]#rust-bin-}
|
||||
rustc_version=${rustc_version#rust-}
|
||||
|
||||
[[ -z "${rustc_version}" ]] && die "Failed to determine rust version, check 'eselect rust' output"
|
||||
|
||||
if ver_test "${rustc_version}" -lt "${rustc_wanted}" ; then
|
||||
eerror "Rust >=${rustc_wanted} is required"
|
||||
eerror "please run 'eselect rust' and set correct rust version"
|
||||
die "selected rust version is too old"
|
||||
elif ver_test "${rustc_version}" -ge "${rustc_toonew}" ; then
|
||||
eerror "Rust <${rustc_toonew} is required"
|
||||
eerror "please run 'eselect rust' and set correct rust version"
|
||||
die "selected rust version is too new"
|
||||
else
|
||||
einfo "Using rust ${rustc_version} to build"
|
||||
fi
|
||||
}
|
||||
|
||||
pre_build_checks() {
|
||||
local M=4096
|
||||
# multiply requirements by 1.5 if we are doing x86-multilib
|
||||
if use amd64; then
|
||||
M=$(( $(usex abi_x86_32 15 10) * ${M} / 10 ))
|
||||
fi
|
||||
M=$(( $(usex clippy 128 0) + ${M} ))
|
||||
M=$(( $(usex miri 128 0) + ${M} ))
|
||||
M=$(( $(usex rls 512 0) + ${M} ))
|
||||
M=$(( $(usex rustfmt 256 0) + ${M} ))
|
||||
# add 2G if we compile llvm and 256M per llvm_target
|
||||
if ! use system-llvm; then
|
||||
M=$(( 2048 + ${M} ))
|
||||
local ltarget
|
||||
for ltarget in ${ALL_LLVM_TARGETS[@]}; do
|
||||
M=$(( $(usex ${ltarget} 256 0) + ${M} ))
|
||||
done
|
||||
fi
|
||||
M=$(( $(usex wasm 256 0) + ${M} ))
|
||||
M=$(( $(usex debug 2 1) * ${M} ))
|
||||
eshopts_push -s extglob
|
||||
if is-flagq '-g?(gdb)?([1-9])'; then
|
||||
M=$(( 15 * ${M} / 10 ))
|
||||
fi
|
||||
eshopts_pop
|
||||
M=$(( $(usex system-bootstrap 0 1024) + ${M} ))
|
||||
M=$(( $(usex doc 256 0) + ${M} ))
|
||||
CHECKREQS_DISK_BUILD=${M}M check-reqs_pkg_${EBUILD_PHASE}
|
||||
}
|
||||
|
||||
llvm_check_deps() {
|
||||
has_version -r "sys-devel/llvm:${LLVM_SLOT}[${LLVM_TARGET_USEDEPS// /,}]"
|
||||
}
|
||||
|
||||
pkg_pretend() {
|
||||
pre_build_checks
|
||||
}
|
||||
|
||||
pkg_setup() {
|
||||
pre_build_checks
|
||||
python-any-r1_pkg_setup
|
||||
|
||||
export LIBGIT2_NO_PKG_CONFIG=1 #749381
|
||||
|
||||
use system-bootstrap && bootstrap_rust_version_check
|
||||
|
||||
if use system-llvm; then
|
||||
llvm_pkg_setup
|
||||
|
||||
local llvm_config="$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
|
||||
export LLVM_LINK_SHARED=1
|
||||
export RUSTFLAGS="${RUSTFLAGS} -Lnative=$("${llvm_config}" --libdir)"
|
||||
fi
|
||||
}
|
||||
|
||||
src_prepare() {
|
||||
if ! use system-bootstrap; then
|
||||
local rust_stage0_root="${WORKDIR}"/rust-stage0
|
||||
local rust_stage0="rust-${RUST_STAGE0_VERSION}-$(rust_abi)"
|
||||
|
||||
"${WORKDIR}/${rust_stage0}"/install.sh --disable-ldconfig \
|
||||
--without=rust-docs --destdir="${rust_stage0_root}" --prefix=/ || die
|
||||
fi
|
||||
|
||||
default
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
local rust_target="" rust_targets="" arch_cflags
|
||||
|
||||
# Collect rust target names to compile standard libs for all ABIs.
|
||||
for v in $(multilib_get_enabled_abi_pairs); do
|
||||
rust_targets="${rust_targets},\"$(rust_abi $(get_abi_CHOST ${v##*.}))\""
|
||||
done
|
||||
if use wasm; then
|
||||
rust_targets="${rust_targets},\"wasm32-unknown-unknown\""
|
||||
if use system-llvm; then
|
||||
# un-hardcode rust-lld linker for this target
|
||||
# https://bugs.gentoo.org/715348
|
||||
sed -i '/linker:/ s/rust-lld/wasm-ld/' compiler/rustc_target/src/spec/wasm_base.rs || die
|
||||
fi
|
||||
fi
|
||||
rust_targets="${rust_targets#,}"
|
||||
|
||||
local tools="\"cargo\","
|
||||
if use clippy; then
|
||||
tools="\"clippy\",$tools"
|
||||
fi
|
||||
if use miri; then
|
||||
tools="\"miri\",$tools"
|
||||
fi
|
||||
if use rls; then
|
||||
tools="\"rls\",\"analysis\",\"src\",$tools"
|
||||
fi
|
||||
if use rustfmt; then
|
||||
tools="\"rustfmt\",$tools"
|
||||
fi
|
||||
|
||||
local rust_stage0_root
|
||||
if use system-bootstrap; then
|
||||
local printsysroot
|
||||
printsysroot="$(rustc --print sysroot || die "Can't determine rust's sysroot")"
|
||||
rust_stage0_root="${printsysroot}"
|
||||
else
|
||||
rust_stage0_root="${WORKDIR}"/rust-stage0
|
||||
fi
|
||||
# in case of prefix it will be already prefixed, as --print sysroot returns full path
|
||||
[[ -d ${rust_stage0_root} ]] || die "${rust_stage0_root} is not a directory"
|
||||
|
||||
rust_target="$(rust_abi)"
|
||||
|
||||
cat <<- _EOF_ > "${S}"/config.toml
|
||||
changelog-seen = 2
|
||||
[llvm]
|
||||
download-ci-llvm = false
|
||||
optimize = $(toml_usex !debug)
|
||||
release-debuginfo = $(toml_usex debug)
|
||||
assertions = $(toml_usex debug)
|
||||
ninja = true
|
||||
targets = "${LLVM_TARGETS// /;}"
|
||||
experimental-targets = ""
|
||||
link-shared = $(toml_usex system-llvm)
|
||||
[build]
|
||||
build-stage = 2
|
||||
test-stage = 2
|
||||
doc-stage = 2
|
||||
build = "${rust_target}"
|
||||
host = ["${rust_target}"]
|
||||
target = [${rust_targets}]
|
||||
cargo = "${rust_stage0_root}/bin/cargo"
|
||||
rustc = "${rust_stage0_root}/bin/rustc"
|
||||
rustfmt = "${rust_stage0_root}/bin/rustfmt"
|
||||
docs = $(toml_usex doc)
|
||||
compiler-docs = false
|
||||
submodules = false
|
||||
python = "${EPYTHON}"
|
||||
locked-deps = true
|
||||
vendor = true
|
||||
extended = true
|
||||
tools = [${tools}]
|
||||
verbose = 2
|
||||
sanitizers = false
|
||||
profiler = false
|
||||
cargo-native-static = false
|
||||
[install]
|
||||
prefix = "${EPREFIX}/usr/lib/${PN}/${PV}"
|
||||
sysconfdir = "etc"
|
||||
docdir = "share/doc/rust"
|
||||
bindir = "bin"
|
||||
libdir = "lib"
|
||||
mandir = "share/man"
|
||||
[rust]
|
||||
# https://github.com/rust-lang/rust/issues/54872
|
||||
codegen-units-std = 1
|
||||
optimize = true
|
||||
debug = $(toml_usex debug)
|
||||
debug-assertions = $(toml_usex debug)
|
||||
debug-assertions-std = $(toml_usex debug)
|
||||
debuginfo-level = $(usex debug 2 0)
|
||||
debuginfo-level-rustc = $(usex debug 2 0)
|
||||
debuginfo-level-std = $(usex debug 2 0)
|
||||
debuginfo-level-tools = $(usex debug 2 0)
|
||||
debuginfo-level-tests = 0
|
||||
backtrace = true
|
||||
incremental = false
|
||||
default-linker = "$(tc-getCC)"
|
||||
parallel-compiler = $(toml_usex parallel-compiler)
|
||||
channel = "$(usex nightly nightly stable)"
|
||||
description = "gentoo"
|
||||
rpath = false
|
||||
verbose-tests = true
|
||||
optimize-tests = $(toml_usex !debug)
|
||||
codegen-tests = true
|
||||
dist-src = false
|
||||
remap-debuginfo = true
|
||||
lld = $(usex system-llvm false $(toml_usex wasm))
|
||||
# only deny warnings if doc+wasm are NOT requested, documenting stage0 wasm std fails without it
|
||||
# https://github.com/rust-lang/rust/issues/74976
|
||||
# https://github.com/rust-lang/rust/issues/76526
|
||||
deny-warnings = $(usex wasm $(usex doc false true) true)
|
||||
backtrace-on-ice = true
|
||||
jemalloc = false
|
||||
[dist]
|
||||
src-tarball = false
|
||||
compression-formats = ["gz"]
|
||||
_EOF_
|
||||
|
||||
for v in $(multilib_get_enabled_abi_pairs); do
|
||||
rust_target=$(rust_abi $(get_abi_CHOST ${v##*.}))
|
||||
arch_cflags="$(get_abi_CFLAGS ${v##*.})"
|
||||
|
||||
cat <<- _EOF_ >> "${S}"/config.env
|
||||
CFLAGS_${rust_target}=${arch_cflags}
|
||||
_EOF_
|
||||
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
[target.${rust_target}]
|
||||
cc = "$(tc-getBUILD_CC)"
|
||||
cxx = "$(tc-getBUILD_CXX)"
|
||||
linker = "$(tc-getCC)"
|
||||
ar = "$(tc-getAR)"
|
||||
_EOF_
|
||||
# librustc_target/spec/linux_musl_base.rs sets base.crt_static_default = true;
|
||||
if use elibc_musl; then
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
crt-static = false
|
||||
_EOF_
|
||||
fi
|
||||
if use system-llvm; then
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
|
||||
_EOF_
|
||||
fi
|
||||
done
|
||||
if use wasm; then
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
[target.wasm32-unknown-unknown]
|
||||
linker = "$(usex system-llvm lld rust-lld)"
|
||||
_EOF_
|
||||
fi
|
||||
|
||||
if [[ -n ${I_KNOW_WHAT_I_AM_DOING_CROSS} ]]; then # whitespace intentionally shifted below
|
||||
# experimental cross support
|
||||
# discussion: https://bugs.gentoo.org/679878
|
||||
# TODO: c*flags, clang, system-llvm, cargo.eclass target support
|
||||
# it would be much better if we could split out stdlib
|
||||
# complilation to separate ebuild and abuse CATEGORY to
|
||||
# just install to /usr/lib/rustlib/<target>
|
||||
|
||||
# extra targets defined as a bash array
|
||||
# spec format: <LLVM target>:<rust-target>:<CTARGET>
|
||||
# best place would be /etc/portage/env/dev-lang/rust
|
||||
# Example:
|
||||
# RUST_CROSS_TARGETS=(
|
||||
# "AArch64:aarch64-unknown-linux-gnu:aarch64-unknown-linux-gnu"
|
||||
# )
|
||||
# no extra hand holding is done, no target transformations, all
|
||||
# values are passed as-is with just basic checks, so it's up to user to supply correct values
|
||||
# valid rust targets can be obtained with
|
||||
# rustc --print target-list
|
||||
# matching cross toolchain has to be installed
|
||||
# matching LLVM_TARGET has to be enabled for both rust and llvm (if using system one)
|
||||
# only gcc toolchains installed with crossdev are checked for now.
|
||||
|
||||
# BUG: we can't pass host flags to cross compiler, so just filter for now
|
||||
# BUG: this should be more fine-grained.
|
||||
filter-flags '-mcpu=*' '-march=*' '-mtune=*'
|
||||
|
||||
local cross_target_spec
|
||||
for cross_target_spec in "${RUST_CROSS_TARGETS[@]}";do
|
||||
# extracts first element form <LLVM target>:<rust-target>:<CTARGET>
|
||||
local cross_llvm_target="${cross_target_spec%%:*}"
|
||||
# extracts toolchain triples, <rust-target>:<CTARGET>
|
||||
local cross_triples="${cross_target_spec#*:}"
|
||||
# extracts first element after before : separator
|
||||
local cross_rust_target="${cross_triples%%:*}"
|
||||
# extracts last element after : separator
|
||||
local cross_toolchain="${cross_triples##*:}"
|
||||
use llvm_targets_${cross_llvm_target} || die "need llvm_targets_${cross_llvm_target} target enabled"
|
||||
command -v ${cross_toolchain}-gcc > /dev/null 2>&1 || die "need ${cross_toolchain} cross toolchain"
|
||||
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
[target.${cross_rust_target}]
|
||||
cc = "${cross_toolchain}-gcc"
|
||||
cxx = "${cross_toolchain}-g++"
|
||||
linker = "${cross_toolchain}-gcc"
|
||||
ar = "${cross_toolchain}-ar"
|
||||
_EOF_
|
||||
if use system-llvm; then
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
llvm-config = "$(get_llvm_prefix "${LLVM_MAX_SLOT}")/bin/llvm-config"
|
||||
_EOF_
|
||||
fi
|
||||
if [[ "${cross_toolchain}" == *-musl* ]]; then
|
||||
cat <<- _EOF_ >> "${S}"/config.toml
|
||||
musl-root = "$(${cross_toolchain}-gcc -print-sysroot)/usr"
|
||||
_EOF_
|
||||
fi
|
||||
|
||||
# append cross target to "normal" target list
|
||||
# example 'target = ["powerpc64le-unknown-linux-gnu"]'
|
||||
# becomes 'target = ["powerpc64le-unknown-linux-gnu","aarch64-unknown-linux-gnu"]'
|
||||
|
||||
rust_targets="${rust_targets},\"${cross_rust_target}\""
|
||||
sed -i "/^target = \[/ s#\[.*\]#\[${rust_targets}\]#" config.toml || die
|
||||
|
||||
ewarn
|
||||
ewarn "Enabled ${cross_rust_target} rust target"
|
||||
ewarn "Using ${cross_toolchain} cross toolchain"
|
||||
ewarn
|
||||
if ! has_version -b 'sys-devel/binutils[multitarget]' ; then
|
||||
ewarn "'sys-devel/binutils[multitarget]' is not installed"
|
||||
ewarn "'strip' will be unable to strip cross libraries"
|
||||
ewarn "cross targets will be installed with full debug information"
|
||||
ewarn "enable 'multitarget' USE flag for binutils to be able to strip object files"
|
||||
ewarn
|
||||
ewarn "Alternatively llvm-strip can be used, it supports stripping any target"
|
||||
ewarn "define STRIP=\"llvm-strip\" to use it (experimental)"
|
||||
ewarn
|
||||
fi
|
||||
done
|
||||
fi # I_KNOW_WHAT_I_AM_DOING_CROSS
|
||||
|
||||
einfo "Rust configured with the following flags:"
|
||||
echo
|
||||
echo RUSTFLAGS="${RUSTFLAGS:-}"
|
||||
echo RUSTFLAGS_BOOTSTRAP="${RUSTFLAGS_BOOTSTRAP:-}"
|
||||
echo RUSTFLAGS_NOT_BOOTSTRAP="${RUSTFLAGS_NOT_BOOTSTRAP:-}"
|
||||
env | grep "CARGO_TARGET_.*_RUSTFLAGS="
|
||||
cat "${S}"/config.env || die
|
||||
echo
|
||||
einfo "config.toml contents:"
|
||||
cat "${S}"/config.toml || die
|
||||
echo
|
||||
}
|
||||
|
||||
src_compile() {
|
||||
# we need \n IFS to have config.env with spaces loaded properly. #734018
|
||||
(
|
||||
IFS=$'\n'
|
||||
env $(cat "${S}"/config.env) RUST_BACKTRACE=1\
|
||||
"${EPYTHON}" ./x.py build -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
|
||||
)
|
||||
}
|
||||
|
||||
src_test() {
|
||||
# https://rustc-dev-guide.rust-lang.org/tests/intro.html
|
||||
|
||||
# those are basic and codegen tests.
|
||||
local tests=(
|
||||
codegen
|
||||
codegen-units
|
||||
compile-fail
|
||||
incremental
|
||||
mir-opt
|
||||
pretty
|
||||
run-make
|
||||
)
|
||||
|
||||
# fails if llvm is not built with ALL targets.
|
||||
# and known to fail with system llvm sometimes.
|
||||
use system-llvm || tests+=( assembly )
|
||||
|
||||
# fragile/expensive/less important tests
|
||||
# or tests that require extra builds
|
||||
# TODO: instead of skipping, just make some nonfatal.
|
||||
if [[ ${ERUST_RUN_EXTRA_TESTS:-no} != no ]]; then
|
||||
tests+=(
|
||||
rustdoc
|
||||
rustdoc-js
|
||||
rustdoc-js-std
|
||||
rustdoc-ui
|
||||
run-make-fulldeps
|
||||
ui
|
||||
ui-fulldeps
|
||||
)
|
||||
fi
|
||||
|
||||
local i failed=()
|
||||
einfo "rust_src_test: enabled tests ${tests[@]/#/src/test/}"
|
||||
for i in "${tests[@]}"; do
|
||||
local t="src/test/${i}"
|
||||
einfo "rust_src_test: running ${t}"
|
||||
if ! (
|
||||
IFS=$'\n'
|
||||
env $(cat "${S}"/config.env) RUST_BACKTRACE=1 \
|
||||
"${EPYTHON}" ./x.py test -vv --config="${S}"/config.toml \
|
||||
-j$(makeopts_jobs) --no-doc --no-fail-fast "${t}"
|
||||
)
|
||||
then
|
||||
failed+=( "${t}" )
|
||||
eerror "rust_src_test: ${t} failed"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#failed[@]} -ne 0 ]]; then
|
||||
eerror "rust_src_test: failure summary: ${failed[@]}"
|
||||
die "aborting due to test failures"
|
||||
fi
|
||||
}
|
||||
|
||||
src_install() {
|
||||
(
|
||||
IFS=$'\n'
|
||||
env $(cat "${S}"/config.env) DESTDIR="${D}" \
|
||||
"${EPYTHON}" ./x.py install -vv --config="${S}"/config.toml -j$(makeopts_jobs) || die
|
||||
)
|
||||
|
||||
# bug #689562, #689160
|
||||
rm -v "${ED}/usr/lib/${PN}/${PV}/etc/bash_completion.d/cargo" || die
|
||||
rmdir -v "${ED}/usr/lib/${PN}/${PV}"/etc{/bash_completion.d,} || die
|
||||
newbashcomp src/tools/cargo/src/etc/cargo.bashcomp.sh cargo
|
||||
|
||||
local symlinks=(
|
||||
cargo
|
||||
rustc
|
||||
rustdoc
|
||||
rust-gdb
|
||||
rust-gdbgui
|
||||
rust-lldb
|
||||
)
|
||||
|
||||
use clippy && symlinks+=( clippy-driver cargo-clippy )
|
||||
use miri && symlinks+=( miri cargo-miri )
|
||||
use rls && symlinks+=( rls )
|
||||
use rustfmt && symlinks+=( rustfmt cargo-fmt )
|
||||
|
||||
einfo "installing eselect-rust symlinks and paths: ${symlinks[@]}"
|
||||
local i
|
||||
for i in "${symlinks[@]}"; do
|
||||
# we need realpath on /usr/bin/* symlink return version-appended binary path.
|
||||
# so /usr/bin/rustc should point to /usr/lib/rust/<ver>/bin/rustc-<ver>
|
||||
# need to fix eselect-rust to remove this hack.
|
||||
local ver_i="${i}-${PV}"
|
||||
if [[ -f "${ED}/usr/lib/${PN}/${PV}/bin/${i}" ]]; then
|
||||
einfo "Installing ${i} symlink"
|
||||
ln -v "${ED}/usr/lib/${PN}/${PV}/bin/${i}" "${ED}/usr/lib/${PN}/${PV}/bin/${ver_i}" || die
|
||||
else
|
||||
ewarn "${i} symlink requested, but source file not found"
|
||||
ewarn "please report this"
|
||||
fi
|
||||
dosym "../lib/${PN}/${PV}/bin/${ver_i}" "/usr/bin/${ver_i}"
|
||||
done
|
||||
|
||||
# symlinks to switch components to active rust in eselect
|
||||
dosym "${PV}/lib" "/usr/lib/${PN}/lib-${PV}"
|
||||
dosym "${PV}/libexec" "/usr/lib/${PN}/libexec-${PV}"
|
||||
dosym "${PV}/share/man" "/usr/lib/${PN}/man-${PV}"
|
||||
dosym "rust/${PV}/lib/rustlib" "/usr/lib/rustlib-${PV}"
|
||||
dosym "../../lib/${PN}/${PV}/share/doc/rust" "/usr/share/doc/${P}"
|
||||
|
||||
newenvd - "50${P}" <<-_EOF_
|
||||
LDPATH="${EPREFIX}/usr/lib/rust/lib"
|
||||
MANPATH="${EPREFIX}/usr/lib/rust/man"
|
||||
$(use amd64 && usex elibc_musl 'CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
|
||||
$(use arm64 && usex elibc_musl 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=-crt-static"' '')
|
||||
_EOF_
|
||||
|
||||
rm -rf "${ED}/usr/lib/${PN}/${PV}"/*.old || die
|
||||
rm -rf "${ED}/usr/lib/${PN}/${PV}/doc"/*.old || die
|
||||
|
||||
# note: eselect-rust adds EROOT to all paths below
|
||||
cat <<-_EOF_ > "${T}/provider-${P}"
|
||||
/usr/bin/cargo
|
||||
/usr/bin/rustdoc
|
||||
/usr/bin/rust-gdb
|
||||
/usr/bin/rust-gdbgui
|
||||
/usr/bin/rust-lldb
|
||||
/usr/lib/rustlib
|
||||
/usr/lib/rust/lib
|
||||
/usr/lib/rust/libexec
|
||||
/usr/lib/rust/man
|
||||
/usr/share/doc/rust
|
||||
_EOF_
|
||||
|
||||
if use clippy; then
|
||||
echo /usr/bin/clippy-driver >> "${T}/provider-${P}"
|
||||
echo /usr/bin/cargo-clippy >> "${T}/provider-${P}"
|
||||
fi
|
||||
if use miri; then
|
||||
echo /usr/bin/miri >> "${T}/provider-${P}"
|
||||
echo /usr/bin/cargo-miri >> "${T}/provider-${P}"
|
||||
fi
|
||||
if use rls; then
|
||||
echo /usr/bin/rls >> "${T}/provider-${P}"
|
||||
fi
|
||||
if use rustfmt; then
|
||||
echo /usr/bin/rustfmt >> "${T}/provider-${P}"
|
||||
echo /usr/bin/cargo-fmt >> "${T}/provider-${P}"
|
||||
fi
|
||||
|
||||
insinto /etc/env.d/rust
|
||||
doins "${T}/provider-${P}"
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
eselect rust update
|
||||
|
||||
if has_version sys-devel/gdb || has_version dev-util/lldb; then
|
||||
elog "Rust installs a helper script for calling GDB and LLDB,"
|
||||
elog "for your convenience it is installed under /usr/bin/rust-{gdb,lldb}-${PV}."
|
||||
fi
|
||||
|
||||
if has_version app-editors/emacs; then
|
||||
elog "install app-emacs/rust-mode to get emacs support for rust."
|
||||
fi
|
||||
|
||||
if has_version app-editors/gvim || has_version app-editors/vim; then
|
||||
elog "install app-vim/rust-vim to get vim support for rust."
|
||||
fi
|
||||
}
|
||||
|
||||
pkg_postrm() {
|
||||
eselect rust cleanup
|
||||
}
|
Binary file not shown.
@ -1,42 +0,0 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=7
|
||||
|
||||
inherit autotools
|
||||
|
||||
DESCRIPTION="Useful set of performance and usability-oriented extensions to C"
|
||||
HOMEPAGE="https://github.com/atheme/libmowgli-2"
|
||||
SRC_URI="https://github.com/atheme/libmowgli-2/archive/v${PV}.tar.gz -> ${P}.tar.gz"
|
||||
|
||||
LICENSE="BSD-2"
|
||||
SLOT="2"
|
||||
KEYWORDS="~alpha amd64 arm ~hppa ~ia64 ~mips ppc ppc64 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos"
|
||||
IUSE="ssl"
|
||||
|
||||
RDEPEND="ssl? (
|
||||
dev-libs/openssl:0=
|
||||
)
|
||||
!~dev-libs/libmowgli-2.1.0" # Bug 629644
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
DOCS=( AUTHORS README doc/BOOST doc/design-concepts.txt )
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${P}-cacheline-Ensure-sysconf-var-is-defined-before-use.patch
|
||||
"${FILESDIR}"/${P}-use-host-tools-for-ar-and-ranlib.patch
|
||||
)
|
||||
|
||||
S="${WORKDIR}/${PN}-2-${PV}"
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
# $(MAKE) invocation will handle passing down flags.
|
||||
sed -i -e 's/${MFLAGS}//' buildsys.mk.in || die
|
||||
|
||||
AT_M4DIR="m4" eautoreconf
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
econf $(use_with ssl openssl)
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
--- /home/graaff/Desktop/Makefile 2009-11-06 01:57:50.000000000 +0100
|
||||
+++ Makefile 2013-07-18 10:57:32.482149252 +0200
|
||||
@@ -1,9 +1,13 @@
|
||||
include mkinc.mak
|
||||
-CFLAGS=-Iinclude
|
||||
-all: libstemmer.o stemwords
|
||||
-libstemmer.o: $(snowball_sources:.c=.o)
|
||||
- $(AR) -cru $@ $^
|
||||
-stemwords: examples/stemwords.o libstemmer.o
|
||||
- $(CC) -o $@ $^
|
||||
+CFLAGS+=-Iinclude -fPIC
|
||||
+all: libstemmer.so libstemmer.a stemwords
|
||||
+libstemmer.so: $(snowball_sources:.c=.o)
|
||||
+ $(CC) $(CFLAGS) -shared $(LDFLAGS) -Wl,-soname,$@.0d -o $@.0d.0.0 $^
|
||||
+ ln -s $@.0d.0.0 $@.0d
|
||||
+ ln -s $@.0d.0.0 $@
|
||||
+libstemmer.a: $(snowball_sources:.c=.o)
|
||||
+ $(AR) -crs $@ $^
|
||||
+stemwords: examples/stemwords.o libstemmer.so
|
||||
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
|
||||
clean:
|
||||
- rm -f stemwords *.o src_c/*.o runtime/*.o libstemmer/*.o
|
||||
+ rm -f stemwords libstemmer.so* libstemmer.a *.o src_c/*.o runtime/*.o libstemmer/*.o
|
Binary file not shown.
@ -1,26 +0,0 @@
|
||||
From ef8efc5b80c9395c01f23e5acd28bb3ee7810b54 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sun, 8 Oct 2017 13:08:20 +1300
|
||||
Subject: Fix useless localization of scalar assignment
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=73873
|
||||
---
|
||||
lib/DBI/Format.pm | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/DBI/Format.pm b/lib/DBI/Format.pm
|
||||
index 49cd7dd..bc985f9 100755
|
||||
--- a/lib/DBI/Format.pm
|
||||
+++ b/lib/DBI/Format.pm
|
||||
@@ -374,7 +374,7 @@ sub header {
|
||||
|
||||
sub row {
|
||||
my($self, $rowref) = @_;
|
||||
- local( $^W = 0 );
|
||||
+ local ($^W) = 0;
|
||||
my @row = @$rowref;
|
||||
my $fh = $self->{'fh'};
|
||||
print $fh (join($self->{sep}, @row), "\n");
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,26 +0,0 @@
|
||||
From 9fb29d16514530245965b932040bb4fc37ffa9bf Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sun, 8 Oct 2017 13:11:29 +1300
|
||||
Subject: Fix no_chrdir warning
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=123215
|
||||
---
|
||||
lib/DBI/Shell/FindSqlFile.pm | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/DBI/Shell/FindSqlFile.pm b/lib/DBI/Shell/FindSqlFile.pm
|
||||
index e604290..2b56ccc 100644
|
||||
--- a/lib/DBI/Shell/FindSqlFile.pm
|
||||
+++ b/lib/DBI/Shell/FindSqlFile.pm
|
||||
@@ -62,7 +62,7 @@ sub look_for_file {
|
||||
File::Find::find(
|
||||
{
|
||||
wanted => \&wanted
|
||||
- , no_chrdir => 1
|
||||
+ , no_chdir => 1
|
||||
, bydepth => 0
|
||||
},
|
||||
@search_path);
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,39 +0,0 @@
|
||||
From 792cf15cb387e58cec1ef3c6d538689d02ab44c3 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sun, 8 Oct 2017 12:46:17 +1300
|
||||
Subject: Fix '.' removal from @INC in Perl 5.26
|
||||
|
||||
Configuration files were always assumed to be explicit paths given
|
||||
by outsiders, not random entries in @INC
|
||||
|
||||
Bug: https://bugs.gentoo.org/615592
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=121136
|
||||
---
|
||||
lib/DBI/Shell.pm | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/DBI/Shell.pm b/lib/DBI/Shell.pm
|
||||
index 03dd958..7869f0f 100755
|
||||
--- a/lib/DBI/Shell.pm
|
||||
+++ b/lib/DBI/Shell.pm
|
||||
@@ -133,6 +133,7 @@ use Text::Abbrev ();
|
||||
use Term::ReadLine;
|
||||
use Getopt::Long 2.17; # upgrade from CPAN if needed: http://www.perl.com/CPAN
|
||||
use IO::File;
|
||||
+use File::Spec ();
|
||||
|
||||
use DBI 1.00 qw(:sql_types :utils);
|
||||
use DBI::Format;
|
||||
@@ -544,7 +545,8 @@ sub configuration {
|
||||
$sh->{config_file} = $ENV{DBISH_CONFIG} || "$homedir/.dbish_config";
|
||||
my $config;
|
||||
if ($sh->{config_file} && -f $sh->{config_file}) {
|
||||
- $config = require $sh->{config_file};
|
||||
+ my $full = File::Spec->rel2abs( $sh->{config_file} );
|
||||
+ $config = require $full;
|
||||
# allow for custom configuration options.
|
||||
if (exists $config->{'options'} ) {
|
||||
$sh->install_options( $config->{'options'} );
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,25 +0,0 @@
|
||||
From f44b8ba9d8cf954c76a967cbfb5d4182f109f8cf Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sun, 8 Oct 2017 13:30:36 +1300
|
||||
Subject: Silence warnings about reduntant sprintf args
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=123216
|
||||
---
|
||||
lib/DBI/Format/SQLMinus.pm | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/lib/DBI/Format/SQLMinus.pm b/lib/DBI/Format/SQLMinus.pm
|
||||
index c3a9ba2..7b240c9 100755
|
||||
--- a/lib/DBI/Format/SQLMinus.pm
|
||||
+++ b/lib/DBI/Format/SQLMinus.pm
|
||||
@@ -155,6 +155,7 @@ sub header {
|
||||
|
||||
if ( exists $cf->{format} and defined $cf->{format} ) {
|
||||
$format_names = $cf->{format};
|
||||
+ no warnings 'redundant';
|
||||
$width = length sprintf( $format_names, " " );
|
||||
}
|
||||
|
||||
--
|
||||
2.14.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From e38c5bfa847361ab251ce533fdd6e8993afbd2f3 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sat, 19 Sep 2020 22:13:21 +1200
|
||||
Subject: t/basic.t: Don't become broken when MAKEOPTS includes V=1
|
||||
|
||||
Some people set MAKEOPTS to include V=1, in order to coax autotools
|
||||
based makefiles into being more verbose.
|
||||
|
||||
But when that ENV var is used to direct perl ebuilds for Dzil things,
|
||||
well, it unintentionally uses "1" as the *next version*, and so breaks
|
||||
all code that isn't expecting that to happen.
|
||||
|
||||
Given its not the job of tests to tell people their system is weird, it
|
||||
just makes the scope "normal" ( that is, defaulting V to be unset
|
||||
internally )
|
||||
|
||||
Bug: https://bugs.gentoo.org/737308
|
||||
Bug: https://github.com/yanick/Dist-Zilla-Plugin-NextVersion-Semantic/pull/6
|
||||
---
|
||||
t/basic.t | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/t/basic.t b/t/basic.t
|
||||
index 22d04fe..b2942c8 100644
|
||||
--- a/t/basic.t
|
||||
+++ b/t/basic.t
|
||||
@@ -6,6 +6,10 @@ use Test::Exception;
|
||||
|
||||
use Test::DZil;
|
||||
|
||||
+# V=1 is common in MAKEOPTS for gnu autotools
|
||||
+# to set "verbose mode"
|
||||
+delete $ENV{V} if exists $ENV{V};
|
||||
+
|
||||
my $changes = make_changes(<<'END_CHANGES');
|
||||
- got included in an awesome test suite
|
||||
END_CHANGES
|
||||
--
|
||||
2.28.0
|
||||
|
@ -1,56 +0,0 @@
|
||||
From 2c89bb54f233776fb8760a264286f9e0932f62c6 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentnl@gentoo.org>
|
||||
Date: Sat, 21 Oct 2017 13:15:43 +1300
|
||||
Subject: Fix tests on 5.26 without '.' in @INC
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=120848
|
||||
Bug: https://bugs.gentoo.org/615842
|
||||
Bug: https://github.com/tsee/extutils-cppguess/pull/15
|
||||
---
|
||||
t/010_module_build.t | 3 ++-
|
||||
t/011_makemaker.t | 3 ++-
|
||||
t/lib/TestUtils.pm | 3 ++-
|
||||
3 files changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/t/010_module_build.t b/t/010_module_build.t
|
||||
index 93b5f44..ef004d3 100644
|
||||
--- a/t/010_module_build.t
|
||||
+++ b/t/010_module_build.t
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
use strict;
|
||||
use Test::More tests => 1;
|
||||
-use t::lib::TestUtils;
|
||||
+use lib 't/lib';
|
||||
+use TestUtils;
|
||||
|
||||
my $separator = ( '=' x 40 . "\n" );
|
||||
|
||||
diff --git a/t/011_makemaker.t b/t/011_makemaker.t
|
||||
index 237636a..5986395 100644
|
||||
--- a/t/011_makemaker.t
|
||||
+++ b/t/011_makemaker.t
|
||||
@@ -2,7 +2,8 @@
|
||||
|
||||
use strict;
|
||||
use Test::More tests => 1;
|
||||
-use t::lib::TestUtils;
|
||||
+use lib 't/lib';
|
||||
+use TestUtils;
|
||||
|
||||
my $separator = ( '=' x 40 . "\n" );
|
||||
|
||||
diff --git a/t/lib/TestUtils.pm b/t/lib/TestUtils.pm
|
||||
index c71572b..b3480c4 100644
|
||||
--- a/t/lib/TestUtils.pm
|
||||
+++ b/t/lib/TestUtils.pm
|
||||
@@ -1,4 +1,5 @@
|
||||
-package t::lib::TestUtils;
|
||||
+package # hide
|
||||
+ TestUtils;
|
||||
|
||||
use strict;
|
||||
|
||||
--
|
||||
2.14.2
|
||||
|
@ -1,34 +0,0 @@
|
||||
From 08deb6590eecd9d92a38edf1b22d615175e1d8d3 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentfredric@gmail.com>
|
||||
Date: Mon, 26 Jun 2017 19:43:14 +1200
|
||||
Subject: [PATCH] Fix for '.' removal from Perl 5.26 @INC
|
||||
|
||||
---
|
||||
File-NFSLock.spec.PL | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/File-NFSLock.spec.PL b/File-NFSLock.spec.PL
|
||||
index fdf9fdf..f5586c1 100644
|
||||
--- a/File-NFSLock.spec.PL
|
||||
+++ b/File-NFSLock.spec.PL
|
||||
@@ -18,7 +18,7 @@ sub WriteMakefile {
|
||||
} elsif (my $version_from = $props{VERSION_FROM}) {
|
||||
$@ = "";
|
||||
$version = eval qq{
|
||||
- do "$version_from";
|
||||
+ do "./$version_from";
|
||||
\$$name\::VERSION || die "$version_from: Missing VERSION";
|
||||
};
|
||||
die $@ if $@;
|
||||
@@ -29,7 +29,7 @@ sub WriteMakefile {
|
||||
die "Makefile.PL: Could not determine version!";
|
||||
}
|
||||
}
|
||||
-do "Makefile.PL";
|
||||
+do "./Makefile.PL";
|
||||
if ($name) {
|
||||
$name =~ s/::/-/g;
|
||||
} else {
|
||||
--
|
||||
2.13.1
|
||||
|
@ -1,35 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 07:26:00 +0200
|
||||
Subject: fix spelling error ("settting" should be "setting")
|
||||
|
||||
---
|
||||
README | 2 +-
|
||||
lib/GnuPG/Interface.pm | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/README b/README
|
||||
index fcb982a..f457577 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -6,7 +6,7 @@ SYNOPSIS
|
||||
use IO::Handle;
|
||||
use GnuPG::Interface;
|
||||
|
||||
- # settting up the situation
|
||||
+ # setting up the situation
|
||||
my $gnupg = GnuPG::Interface->new();
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
homedir => '/home/foobar' );
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index f952f3e..83a4b1a 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -834,7 +834,7 @@ GnuPG::Interface - Perl interface to GnuPG
|
||||
use IO::Handle;
|
||||
use GnuPG::Interface;
|
||||
|
||||
- # settting up the situation
|
||||
+ # setting up the situation
|
||||
my $gnupg = GnuPG::Interface->new();
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
homedir => '/home/foobar' );
|
@ -1,151 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 10:38:12 -0400
|
||||
Subject: Generalize the test suite
|
||||
|
||||
The test suite currently assumes it knows something about the internal
|
||||
state of GnuPG's homedir.
|
||||
|
||||
It's safer and less brittle to rely explicitly on the public interface
|
||||
that GnuPG has committed to, such as --import-keys and --list-keys,
|
||||
rather than assuming that certain files are in certain places in the
|
||||
GnuPG homedir.
|
||||
|
||||
It's also better to create a fresh homedir and allow GnuPG to populate
|
||||
it during the test suite, cleaning it up at the end, rather than hope
|
||||
that GnuPG will leave a pre-existing homedir untouched.
|
||||
|
||||
With this change, many more of the tests pass when /usr/bin/gpg is
|
||||
provided by GnuPG 2.1.
|
||||
---
|
||||
t/000_setup.t | 28 ++++++++++++++++++++++++++++
|
||||
t/MyTestSpecific.pm | 2 +-
|
||||
t/zzz_cleanup.t | 17 +++++++++++++++++
|
||||
test/fake-pinentry.pl | 28 ++++++++++++++++++++++++++++
|
||||
test/{options => gpg.conf} | 0
|
||||
test/secret-keys/1.0.test | 4 ++--
|
||||
6 files changed, 76 insertions(+), 3 deletions(-)
|
||||
create mode 100644 t/000_setup.t
|
||||
create mode 100644 t/zzz_cleanup.t
|
||||
create mode 100755 test/fake-pinentry.pl
|
||||
rename test/{options => gpg.conf} (100%)
|
||||
|
||||
diff --git a/t/000_setup.t b/t/000_setup.t
|
||||
new file mode 100644
|
||||
index 0000000..7f7f7b0
|
||||
--- /dev/null
|
||||
+++ b/t/000_setup.t
|
||||
@@ -0,0 +1,28 @@
|
||||
+#!/usr/bin/perl -w
|
||||
+
|
||||
+use strict;
|
||||
+use English qw( -no_match_vars );
|
||||
+
|
||||
+use lib './t';
|
||||
+use MyTest;
|
||||
+use MyTestSpecific;
|
||||
+use Cwd;
|
||||
+use File::Path qw (make_path);
|
||||
+use File::Copy;
|
||||
+
|
||||
+TEST
|
||||
+{
|
||||
+ make_path('test/gnupghome', { mode => 0700 });
|
||||
+ my $agentconf = IO::File->new( "> test/gnupghome/gpg-agent.conf" );
|
||||
+ $agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
|
||||
+ $agentconf->close();
|
||||
+ copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
|
||||
+ reset_handles();
|
||||
+
|
||||
+ my $pid = $gnupg->import_keys(command_args => [ 'test/pubring.gpg', 'test/secring.gpg' ],
|
||||
+ options => [ 'batch'],
|
||||
+ handles => $handles);
|
||||
+ waitpid $pid, 0;
|
||||
+
|
||||
+ return $CHILD_ERROR == 0;
|
||||
+};
|
||||
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
|
||||
index 053b749..1af98ae 100644
|
||||
--- a/t/MyTestSpecific.pm
|
||||
+++ b/t/MyTestSpecific.pm
|
||||
@@ -40,7 +40,7 @@ use vars qw( @ISA @EXPORT
|
||||
|
||||
$gnupg = GnuPG::Interface->new( passphrase => 'test' );
|
||||
|
||||
-$gnupg->options->hash_init( homedir => 'test',
|
||||
+$gnupg->options->hash_init( homedir => 'test/gnupghome',
|
||||
armor => 1,
|
||||
meta_interactive => 0,
|
||||
meta_signing_key_id => '0xF950DA9C',
|
||||
diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
|
||||
new file mode 100644
|
||||
index 0000000..5c03a72
|
||||
--- /dev/null
|
||||
+++ b/t/zzz_cleanup.t
|
||||
@@ -0,0 +1,17 @@
|
||||
+#!/usr/bin/perl -w
|
||||
+
|
||||
+use strict;
|
||||
+use English qw( -no_match_vars );
|
||||
+
|
||||
+use lib './t';
|
||||
+use MyTest;
|
||||
+use MyTestSpecific;
|
||||
+use File::Path qw (remove_tree);
|
||||
+
|
||||
+# this is actually no test, just cleanup.
|
||||
+TEST
|
||||
+{
|
||||
+ my $err = [];
|
||||
+ remove_tree('test/gnupghome', {error => \$err});
|
||||
+ return ! @$err;
|
||||
+};
|
||||
diff --git a/test/fake-pinentry.pl b/test/fake-pinentry.pl
|
||||
new file mode 100755
|
||||
index 0000000..12d3611
|
||||
--- /dev/null
|
||||
+++ b/test/fake-pinentry.pl
|
||||
@@ -0,0 +1,28 @@
|
||||
+#!/usr/bin/perl -w
|
||||
+# Use this for your test suites when a perl interpreter is available.
|
||||
+#
|
||||
+# The encrypted keys in your test suite that you expect to work must
|
||||
+# be locked with a passphrase of "test"
|
||||
+#
|
||||
+# Author: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
+#
|
||||
+# License: This trivial work is hereby explicitly placed into the
|
||||
+# public domain. Anyone may reuse it, modify it, redistribute it for
|
||||
+# any purpose.
|
||||
+
|
||||
+use strict;
|
||||
+use warnings;
|
||||
+
|
||||
+# turn off buffering
|
||||
+$| = 1;
|
||||
+
|
||||
+print "OK This is only for test suites, and should never be used in production\n";
|
||||
+while (<STDIN>) {
|
||||
+ chomp;
|
||||
+ next if (/^$/);
|
||||
+ next if (/^#/);
|
||||
+ print ("D test\n") if (/^getpin/i);
|
||||
+ print "OK\n";
|
||||
+ exit if (/^bye/i);
|
||||
+}
|
||||
+1;
|
||||
diff --git a/test/options b/test/gpg.conf
|
||||
similarity index 100%
|
||||
rename from test/options
|
||||
rename to test/gpg.conf
|
||||
diff --git a/test/secret-keys/1.0.test b/test/secret-keys/1.0.test
|
||||
index 5999484..129d472 100644
|
||||
--- a/test/secret-keys/1.0.test
|
||||
+++ b/test/secret-keys/1.0.test
|
||||
@@ -1,5 +1,5 @@
|
||||
-test/secring.gpg
|
||||
-----------------
|
||||
+test/gnupghome/secring.gpg
|
||||
+--------------------------
|
||||
sec 1024D/F950DA9C 2000-02-06
|
||||
uid GnuPG test key (for testing purposes only)
|
||||
uid Foo Bar (1)
|
@ -1,37 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 11:35:31 -0400
|
||||
Subject: subkey validity of an key when we have established no trust anchors
|
||||
|
||||
This apparently isn't tested by deep comparisons, though, so it was
|
||||
never caught.
|
||||
---
|
||||
t/get_public_keys.t | 2 +-
|
||||
t/get_secret_keys.t | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/get_public_keys.t b/t/get_public_keys.t
|
||||
index 53db021..73e320b 100644
|
||||
--- a/t/get_public_keys.t
|
||||
+++ b/t/get_public_keys.t
|
||||
@@ -175,7 +175,7 @@ TEST
|
||||
];
|
||||
|
||||
my $subkey = GnuPG::SubKey->new
|
||||
- ( validity => 'u',
|
||||
+ ( validity => '-',
|
||||
length => 768,
|
||||
algo_num => 16,
|
||||
hex_id => 'ADB99D9C2E854A6B',
|
||||
diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
|
||||
index 3a1d99f..7bba083 100644
|
||||
--- a/t/get_secret_keys.t
|
||||
+++ b/t/get_secret_keys.t
|
||||
@@ -48,7 +48,7 @@ TEST
|
||||
|
||||
|
||||
my $subkey = GnuPG::SubKey->new
|
||||
- ( validity => 'u',
|
||||
+ ( validity => '-',
|
||||
length => 768,
|
||||
algo_num => 16,
|
||||
hex_id => 'ADB99D9C2E854A6B',
|
@ -1,35 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 11:39:04 -0400
|
||||
Subject: ensure that test covers all signatures
|
||||
|
||||
The earlier test wasn't reporting on one of the known self-sigs for
|
||||
the test key for some reason.
|
||||
|
||||
This change ensures that all known signatures are present.
|
||||
---
|
||||
t/get_public_keys.t | 12 +++++++++++-
|
||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/t/get_public_keys.t b/t/get_public_keys.t
|
||||
index 73e320b..9e96f7d 100644
|
||||
--- a/t/get_public_keys.t
|
||||
+++ b/t/get_public_keys.t
|
||||
@@ -83,7 +83,17 @@ TEST
|
||||
date_string => '2000-02-06',
|
||||
hex_id => '53AE596EF950DA9C',
|
||||
sig_class => 0x13,
|
||||
- validity => '!'));
|
||||
+ validity => '!'),
|
||||
+ GnuPG::Signature->new(
|
||||
+ date => 1177086329,
|
||||
+ algo_num => 17,
|
||||
+ is_exportable => 1,
|
||||
+ user_id_string => 'GnuPG test key (for testing purposes only)',
|
||||
+ date_string => '2007-04-20',
|
||||
+ hex_id => '53AE596EF950DA9C',
|
||||
+ sig_class => 0x13,
|
||||
+ validity => '!'),
|
||||
+ );
|
||||
|
||||
my $uid1 = GnuPG::UserId->new( as_string => 'Foo Bar (1)',
|
||||
validity => '-');
|
@ -1,39 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 14:31:38 -0400
|
||||
Subject: add $gpg_is_modern to test suite
|
||||
|
||||
MyTestSpecific.pm now produces a new variable indicating whether it
|
||||
the version of GnuPG we run against is from the "Modern" line of GnuPG
|
||||
development (2.1 or later). This will be useful when comparing output
|
||||
that we can't expect from earlier versions.
|
||||
---
|
||||
t/MyTestSpecific.pm | 7 +++++--
|
||||
1 file changed, 5 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
|
||||
index 1af98ae..a309698 100644
|
||||
--- a/t/MyTestSpecific.pm
|
||||
+++ b/t/MyTestSpecific.pm
|
||||
@@ -29,17 +29,20 @@ use GnuPG::Handles;
|
||||
use vars qw( @ISA @EXPORT
|
||||
$stdin $stdout $stderr
|
||||
$gpg_program $handles $gnupg
|
||||
- %texts
|
||||
+ %texts $gpg_is_modern
|
||||
);
|
||||
|
||||
@ISA = qw( Exporter );
|
||||
@EXPORT = qw( stdin stdout stderr
|
||||
gnupg_program handles reset_handles
|
||||
- texts file_match
|
||||
+ texts file_match gpg_is_modern
|
||||
);
|
||||
|
||||
$gnupg = GnuPG::Interface->new( passphrase => 'test' );
|
||||
|
||||
+my @version = split('\.', $gnupg->version());
|
||||
+$gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
|
||||
+
|
||||
$gnupg->options->hash_init( homedir => 'test/gnupghome',
|
||||
armor => 1,
|
||||
meta_interactive => 0,
|
@ -1,120 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 14:12:40 -0400
|
||||
Subject: Modern GnuPG (2.1) reports more detail about secret keys
|
||||
|
||||
the GnuPG "modern" suite (version 2.1 or later) reports more detail
|
||||
about secret keys than previous versions did. In particular, it
|
||||
reports stored ownertrust, public key data, and designated revokers
|
||||
for secret keys. Older versions only reported those attributes for
|
||||
public keys.
|
||||
|
||||
This patch adjusts the test suite to ensure that our handmade key
|
||||
matches the produced key when /usr/bin/gpg is supplied by the modern
|
||||
suite.
|
||||
---
|
||||
t/get_secret_keys.t | 66 +++++++++++++++++++++++++++++++++++++++++++----------
|
||||
1 file changed, 54 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
|
||||
index 7bba083..c798cce 100644
|
||||
--- a/t/get_secret_keys.t
|
||||
+++ b/t/get_secret_keys.t
|
||||
@@ -23,16 +23,34 @@ TEST
|
||||
return 0 unless @returned_keys == 1;
|
||||
|
||||
$given_key = shift @returned_keys;
|
||||
-
|
||||
- $handmade_key = GnuPG::PrimaryKey->new
|
||||
- ( length => 1024,
|
||||
+ my $pubkey_data = [
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '88FCAAA5BCDCD52084D46143F44ED1715A339794641158DE03AA2092AFD3174E3DCA2CB7DF2DDC6FEDF7C3620F5A8BDAD06713E6153F8748DD76CB97305F30CBA8F8801DB47FAC11EED725F55672CB9BDAD629178A677CBB089B3E8AE0D9A9AD7741697A35F2868C62D25670994A92D810480173DC24263EEA0F103A43C0B64B'),
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '8F2A3842C70FF17660CBB78C78FC93F534AB9A17'),
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '83E348C2AA65F56DE84E8FDCE6DA7B0991B1C75EC8CA446FA85869A43350907BFF36BE512385E8E7E095578BB2138C04E318495873218286DE2B8C86F36EA670135434967AC798EBA28581F709F0C6B696EB512D3E561E381A06E4B5239BCC655015F9A926C74E4B859B26EAD604F208A556511A76A40EDCD9C38E6BD82CCCB4'),
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '80DE04C85E30C9D62C13F90CFF927A84A5A59D0900B3533D4D6193FEF8C5DAEF9FF8A7D5F76B244FBC17644F50D524E0B19CD3A4B5FC2D78DAECA3FE58FA1C1A64E6C7B96C4EE618173543163A72EF954DFD593E84342699096E9CA76578AC1DE3D893BCCD0BF470CEF625FAF816A0F503EF75C18C6173E35C8675AF919E5704')
|
||||
+ ];
|
||||
+
|
||||
+
|
||||
+ my $args = {
|
||||
+ length => 1024,
|
||||
algo_num => 17,
|
||||
hex_id => '53AE596EF950DA9C',
|
||||
creation_date => 949813093,
|
||||
creation_date_string => '2000-02-06',
|
||||
- owner_trust => '', # secret keys do not report ownertrust?
|
||||
+ owner_trust => '-',
|
||||
usage_flags => 'scaESCA',
|
||||
- );
|
||||
+ pubkey_data => $pubkey_data,
|
||||
+ };
|
||||
+ if (!$gpg_is_modern) {
|
||||
+ # older versions don't report ownertrust or pubkey_data for secret keys:
|
||||
+ delete $args->{pubkey_data};
|
||||
+ $args->{owner_trust} = '';
|
||||
+ }
|
||||
+ $handmade_key = GnuPG::PrimaryKey->new($args);
|
||||
|
||||
$handmade_key->fingerprint
|
||||
( GnuPG::Fingerprint->new( as_hex_string =>
|
||||
@@ -42,20 +60,42 @@ TEST
|
||||
|
||||
$handmade_key->push_user_ids(
|
||||
GnuPG::UserId->new( as_string => 'GnuPG test key (for testing purposes only)',
|
||||
- validity => ''), # secret keys do not report uid validity?
|
||||
+ validity => $args->{owner_trust}),
|
||||
GnuPG::UserId->new( as_string => 'Foo Bar (1)',
|
||||
- validity => '')); # secret keys do not report uid validity?
|
||||
-
|
||||
-
|
||||
- my $subkey = GnuPG::SubKey->new
|
||||
- ( validity => '-',
|
||||
+ validity => $args->{owner_trust}));
|
||||
+
|
||||
+ my $revoker = GnuPG::Revoker->new
|
||||
+ ( algo_num => 17,
|
||||
+ class => 0x80,
|
||||
+ fingerprint => GnuPG::Fingerprint->new( as_hex_string =>
|
||||
+ '4F863BBBA8166F0A340F600356FFD10A260C4FA3'),
|
||||
+ );
|
||||
+
|
||||
+ my $subkey_pub_data = [
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '8831982DADC4C5D05CBB01D9EAF612131DDC9C24CEA7246557679423FB0BA42F74D10D8E7F5564F6A4FB8837F8DC4A46571C19B122E6DF4B443D15197A6A22688863D0685FADB6E402316DAA9B560D1F915475364580A67E6DF0A727778A5CF3'),
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '6'),
|
||||
+ Math::BigInt->from_hex('0x'.
|
||||
+ '2F3850FF130C6AC9AA0962720E86539626FAA9B67B33A74DFC0DE843FF3E90E43E2F379EE0182D914FA539CCCF5C83A20DB3A7C45E365B8A2A092E799A3DFF4AD8274EB977BAAF5B1AFB2ACB8D6F92454F01682F555565E73E56793C46EF7C3E')
|
||||
+ ];
|
||||
+
|
||||
+ my $sub_args = {
|
||||
+ validity => '-',
|
||||
length => 768,
|
||||
algo_num => 16,
|
||||
hex_id => 'ADB99D9C2E854A6B',
|
||||
creation_date => 949813119,
|
||||
creation_date_string => '2000-02-06',
|
||||
usage_flags => 'e',
|
||||
- );
|
||||
+ pubkey_data => $subkey_pub_data,
|
||||
+ };
|
||||
+
|
||||
+ if (!$gpg_is_modern) {
|
||||
+ # older versions do not report pubkey data for secret keys
|
||||
+ delete $sub_args->{pubkey_data};
|
||||
+ }
|
||||
+ my $subkey = GnuPG::SubKey->new($sub_args);
|
||||
|
||||
$subkey->fingerprint
|
||||
( GnuPG::Fingerprint->new( as_hex_string =>
|
||||
@@ -64,6 +104,8 @@ TEST
|
||||
);
|
||||
|
||||
$handmade_key->push_subkeys( $subkey );
|
||||
+ # older versions do not report designated revokers for secret keys
|
||||
+ $handmade_key->push_revokers( $revoker ) if ($gpg_is_modern);
|
||||
|
||||
$handmade_key->compare( $given_key );
|
||||
};
|
@ -1,95 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 14:46:13 -0400
|
||||
Subject: test suite: match plaintext output across versions of GnuPG
|
||||
|
||||
The human-readable version of --list-keys is *not* expected to be
|
||||
static over time or as the user's environment changes (e.g. LANG or
|
||||
LC_MESSAGES), so expecting it to be machine-parseable is probably a
|
||||
mistake.
|
||||
|
||||
That said, some users might want to pull textual information about
|
||||
specific keys to display directly to the user, so it's not a terrible
|
||||
idea to have it in the test suite.
|
||||
|
||||
Modern GnuPG (2.1 or later) changes the default structure of the
|
||||
human-readable output in a few significant ways:
|
||||
|
||||
* it writes the path to the keyring as an absolute path, even if
|
||||
$GNUPGHOME is set to a non-absolute path.
|
||||
|
||||
* it shows the calculated user id validity by default (see
|
||||
show-uid-validity in gpg's --list-options). (note that this is a
|
||||
translated string, so that "unknown" (in the default C locale)
|
||||
becomes "inconnue" when LANG or LC_MESSAGES is set to fr_CH.UTF-8,
|
||||
for example.
|
||||
|
||||
* it writes the key algorithm names differently (e.g. rsa2048 instead
|
||||
of 2048R)
|
||||
|
||||
* it does not display the key ID at all by default
|
||||
|
||||
* it displays the full fingerprint in compact form by default
|
||||
|
||||
This changeset fixes the test suite so that it can do a rough
|
||||
verification of the human-readable text output by list_secret_keys in
|
||||
the C locale in modern versions of GnuPG, while leaving it working for
|
||||
older GnuPG suites.
|
||||
---
|
||||
t/list_secret_keys.t | 15 +++++++++++++--
|
||||
test/secret-keys/1.modern.test | 8 ++++++++
|
||||
2 files changed, 21 insertions(+), 2 deletions(-)
|
||||
create mode 100644 test/secret-keys/1.modern.test
|
||||
|
||||
diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
|
||||
index 1fe9b7e..51e3651 100644
|
||||
--- a/t/list_secret_keys.t
|
||||
+++ b/t/list_secret_keys.t
|
||||
@@ -16,13 +16,22 @@ TEST
|
||||
{
|
||||
reset_handles();
|
||||
|
||||
+ $ENV{LC_MESSAGES} = 'C';
|
||||
my $pid = $gnupg->list_secret_keys( handles => $handles );
|
||||
close $stdin;
|
||||
|
||||
$outfile = 'test/secret-keys/1.out';
|
||||
my $out = IO::File->new( "> $outfile" )
|
||||
or die "cannot open $outfile for writing: $ERRNO";
|
||||
- $out->print( <$stdout> );
|
||||
+ while (<$stdout>) {
|
||||
+ if ($gpg_is_modern && /^\/.*\/test\/gnupghome\/pubring.kbx$/) {
|
||||
+ $out->print("test/gnupghome/pubring.kbx\n");
|
||||
+ } elsif ($gpg_is_modern && /^--*$/) {
|
||||
+ $out->print("--------------------------\n");
|
||||
+ } else {
|
||||
+ $out->print( $_ );
|
||||
+ }
|
||||
+ }
|
||||
close $stdout;
|
||||
$out->close();
|
||||
waitpid $pid, 0;
|
||||
@@ -33,7 +42,9 @@ TEST
|
||||
|
||||
TEST
|
||||
{
|
||||
- my @files_to_test = ( 'test/secret-keys/1.0.test' );
|
||||
+ my $suffix = '0';
|
||||
+ $suffix = 'modern' if ($gpg_is_modern);
|
||||
+ my @files_to_test = ( 'test/secret-keys/1.'.$suffix.'.test' );
|
||||
|
||||
return file_match( $outfile, @files_to_test );
|
||||
};
|
||||
diff --git a/test/secret-keys/1.modern.test b/test/secret-keys/1.modern.test
|
||||
new file mode 100644
|
||||
index 0000000..3e46407
|
||||
--- /dev/null
|
||||
+++ b/test/secret-keys/1.modern.test
|
||||
@@ -0,0 +1,8 @@
|
||||
+test/gnupghome/pubring.kbx
|
||||
+--------------------------
|
||||
+sec dsa1024 2000-02-06 [SCA]
|
||||
+ 93AFC4B1B0288A104996B44253AE596EF950DA9C
|
||||
+uid [ unknown] GnuPG test key (for testing purposes only)
|
||||
+uid [ unknown] Foo Bar (1)
|
||||
+ssb elg768 2000-02-06 [E]
|
||||
+
|
@ -1,29 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 13 Sep 2016 15:22:27 -0400
|
||||
Subject: fix test_default_key_passphrase when passphrase comes from agent
|
||||
|
||||
In the modern GnuPG suite, where the passphrase is always managed by
|
||||
the agent, gpg itself doesn't emit the GOOD_PASSPHRASE status.
|
||||
Instead, if signing is successful it emits plain old SIG_CREATED.
|
||||
|
||||
There are probably even better ways to test whether a given key is
|
||||
unlocked in this case, but this is a straightforward baseline fix that
|
||||
should get this part of the test suite to pass with all available
|
||||
versions of GnuPG.
|
||||
---
|
||||
lib/GnuPG/Interface.pm | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 83a4b1a..1f1e6d5 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -808,7 +808,7 @@ sub test_default_key_passphrase() {
|
||||
|
||||
# all we realy want to check is the status fh
|
||||
while (<$status>) {
|
||||
- if (/^\[GNUPG:\]\s*GOOD_PASSPHRASE/) {
|
||||
+ if (/^\[GNUPG:\]\s*(GOOD_PASSPHRASE|SIG_CREATED)/) {
|
||||
waitpid $pid, 0;
|
||||
return 1;
|
||||
}
|
@ -1,112 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 19:52:13 -0400
|
||||
Subject: clean up trailing whitespace
|
||||
|
||||
---
|
||||
lib/GnuPG/Fingerprint.pm | 2 +-
|
||||
lib/GnuPG/Handles.pm | 2 +-
|
||||
lib/GnuPG/Interface.pm | 16 ++++++++--------
|
||||
3 files changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/lib/GnuPG/Fingerprint.pm b/lib/GnuPG/Fingerprint.pm
|
||||
index fcb1028..81c38a7 100644
|
||||
--- a/lib/GnuPG/Fingerprint.pm
|
||||
+++ b/lib/GnuPG/Fingerprint.pm
|
||||
@@ -20,7 +20,7 @@ with qw(GnuPG::HashInit);
|
||||
|
||||
has as_hex_string => (
|
||||
isa => 'Any',
|
||||
- is => 'rw',
|
||||
+ is => 'rw',
|
||||
);
|
||||
|
||||
sub compare {
|
||||
diff --git a/lib/GnuPG/Handles.pm b/lib/GnuPG/Handles.pm
|
||||
index b30ca57..3eee0e3 100644
|
||||
--- a/lib/GnuPG/Handles.pm
|
||||
+++ b/lib/GnuPG/Handles.pm
|
||||
@@ -73,7 +73,7 @@ GnuPG::Handles - GnuPG handles bundle
|
||||
= ( IO::Handle->new(), IO::Handle->new(), IO::Handle->new(),
|
||||
IO::Handle->new(), IO::Handle->new(), IO::Handle->new(),
|
||||
);
|
||||
-
|
||||
+
|
||||
my $handles = GnuPG::Handles->new
|
||||
( stdin => $stdin,
|
||||
stdout => $stdout,
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 1f1e6d5..19e8070 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -833,7 +833,7 @@ GnuPG::Interface - Perl interface to GnuPG
|
||||
# A simple example
|
||||
use IO::Handle;
|
||||
use GnuPG::Interface;
|
||||
-
|
||||
+
|
||||
# setting up the situation
|
||||
my $gnupg = GnuPG::Interface->new();
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
@@ -852,7 +852,7 @@ GnuPG::Interface - Perl interface to GnuPG
|
||||
# Now we'll go about encrypting with the options already set
|
||||
my @plaintext = ( 'foobar' );
|
||||
my $pid = $gnupg->encrypt( handles => $handles );
|
||||
-
|
||||
+
|
||||
# Now we write to the input of GnuPG
|
||||
print $input @plaintext;
|
||||
close $input;
|
||||
@@ -1144,7 +1144,7 @@ The following setup can be done before any of the following examples:
|
||||
|
||||
my $handles = GnuPG::Handles->new( stdin => $input,
|
||||
stdout => $output );
|
||||
-
|
||||
+
|
||||
# this sets up the communication
|
||||
# Note that the recipients were specified earlier
|
||||
# in the 'options' data member of the $gnupg object.
|
||||
@@ -1220,7 +1220,7 @@ The following setup can be done before any of the following examples:
|
||||
# a file written to disk
|
||||
# Make sure you "use IO::File" if you use this module!
|
||||
my $cipher_file = IO::File->new( 'encrypted.gpg' );
|
||||
-
|
||||
+
|
||||
# this sets up the communication
|
||||
my $pid = $gnupg->decrypt( handles => $handles );
|
||||
|
||||
@@ -1252,7 +1252,7 @@ The following setup can be done before any of the following examples:
|
||||
# This time we'll just let GnuPG print to our own output
|
||||
# and read from our input, because no input is needed!
|
||||
my $handles = GnuPG::Handles->new();
|
||||
-
|
||||
+
|
||||
my @ids = ( 'ftobin', '0xABCD1234' );
|
||||
|
||||
# this time we need to specify something for
|
||||
@@ -1260,7 +1260,7 @@ The following setup can be done before any of the following examples:
|
||||
# search ids as arguments
|
||||
my $pid = $gnupg->list_public_keys( handles => $handles,
|
||||
command_args => [ @ids ] );
|
||||
-
|
||||
+
|
||||
waitpid $pid, 0;
|
||||
|
||||
=head2 Creating GnuPG::PublicKey Objects
|
||||
@@ -1280,7 +1280,7 @@ The following setup can be done before any of the following examples:
|
||||
command_args => [ qw( test/key.1.asc ) ],
|
||||
handles => $handles,
|
||||
);
|
||||
-
|
||||
+
|
||||
my @out = <$handles->stdout()>;
|
||||
waitpid $pid, 0;
|
||||
|
||||
@@ -1357,7 +1357,7 @@ under the same terms as Perl itself.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
-GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
|
||||
+GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
|
||||
|
||||
Frank J. Tobin, ftobin@cpan.org was the original author of the package.
|
||||
|
@ -1,35 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 19:52:58 -0400
|
||||
Subject: fix capitalization of GnuPG
|
||||
|
||||
---
|
||||
README | 2 +-
|
||||
lib/GnuPG/Interface.pm | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/README b/README
|
||||
index f457577..aa7c984 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -427,7 +427,7 @@ LICENSE
|
||||
under the same terms as Perl itself.
|
||||
|
||||
AUTHOR
|
||||
- GnuPg::Interface is currently maintained by Jesse Vincent
|
||||
+ GnuPG::Interface is currently maintained by Jesse Vincent
|
||||
<jesse@cpan.org>.
|
||||
|
||||
Frank J. Tobin, ftobin@cpan.org was the original author of the package.
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 19e8070..cf7138f 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -1357,7 +1357,7 @@ under the same terms as Perl itself.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
-GnuPg::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
|
||||
+GnuPG::Interface is currently maintained by Jesse Vincent <jesse@cpan.org>.
|
||||
|
||||
Frank J. Tobin, ftobin@cpan.org was the original author of the package.
|
||||
|
@ -1,21 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 19:57:10 -0400
|
||||
Subject: ommand_args should be command_args
|
||||
|
||||
---
|
||||
t/list_public_keys.t | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/t/list_public_keys.t b/t/list_public_keys.t
|
||||
index 7e563c1..a36a78b 100644
|
||||
--- a/t/list_public_keys.t
|
||||
+++ b/t/list_public_keys.t
|
||||
@@ -38,7 +38,7 @@ TEST
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->list_public_keys( handles => $handles,
|
||||
- ommand_args => '0xF950DA9C'
|
||||
+ command_args => '0xF950DA9C'
|
||||
);
|
||||
close $stdin;
|
||||
|
@ -1,265 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 20:05:16 -0400
|
||||
Subject: use fingerprints as inputs during tests to demonstrate explicit usage
|
||||
|
||||
---
|
||||
README | 6 +++---
|
||||
lib/GnuPG/Interface.pm | 6 +++---
|
||||
lib/GnuPG/Options.pm | 2 +-
|
||||
t/MyTestSpecific.pm | 2 +-
|
||||
t/encrypt.t | 6 +++---
|
||||
t/export_keys.t | 4 ++--
|
||||
t/get_public_keys.t | 2 +-
|
||||
t/get_secret_keys.t | 2 +-
|
||||
t/list_public_keys.t | 4 ++--
|
||||
t/list_secret_keys.t | 4 ++--
|
||||
t/list_sigs.t | 4 ++--
|
||||
t/sign_and_encrypt.t | 2 +-
|
||||
12 files changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/README b/README
|
||||
index aa7c984..ed94ede 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -228,7 +228,7 @@ EXAMPLES
|
||||
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
recipients => [ 'ftobin@uiuc.edu',
|
||||
- '0xABCD1234' ],
|
||||
+ '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ],
|
||||
meta_interactive => 0 ,
|
||||
);
|
||||
|
||||
@@ -347,7 +347,7 @@ EXAMPLES
|
||||
# and read from our input, because no input is needed!
|
||||
my $handles = GnuPG::Handles->new();
|
||||
|
||||
- my @ids = ( 'ftobin', '0xABCD1234' );
|
||||
+ my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
|
||||
|
||||
# this time we need to specify something for
|
||||
# command_args because --list-public-keys takes
|
||||
@@ -358,7 +358,7 @@ EXAMPLES
|
||||
waitpid $pid, 0;
|
||||
|
||||
Creating GnuPG::PublicKey Objects
|
||||
- my @ids = [ 'ftobin', '0xABCD1234' ];
|
||||
+ my @ids = [ 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ];
|
||||
|
||||
my @keys = $gnupg->get_public_keys( @ids );
|
||||
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index cf7138f..6eaef7d 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -1130,7 +1130,7 @@ The following setup can be done before any of the following examples:
|
||||
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
recipients => [ 'ftobin@uiuc.edu',
|
||||
- '0xABCD1234' ],
|
||||
+ '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ],
|
||||
meta_interactive => 0 ,
|
||||
);
|
||||
|
||||
@@ -1253,7 +1253,7 @@ The following setup can be done before any of the following examples:
|
||||
# and read from our input, because no input is needed!
|
||||
my $handles = GnuPG::Handles->new();
|
||||
|
||||
- my @ids = ( 'ftobin', '0xABCD1234' );
|
||||
+ my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
|
||||
|
||||
# this time we need to specify something for
|
||||
# command_args because --list-public-keys takes
|
||||
@@ -1265,7 +1265,7 @@ The following setup can be done before any of the following examples:
|
||||
|
||||
=head2 Creating GnuPG::PublicKey Objects
|
||||
|
||||
- my @ids = [ 'ftobin', '0xABCD1234' ];
|
||||
+ my @ids = [ 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' ];
|
||||
|
||||
my @keys = $gnupg->get_public_keys( @ids );
|
||||
|
||||
diff --git a/lib/GnuPG/Options.pm b/lib/GnuPG/Options.pm
|
||||
index 86261a0..7788662 100644
|
||||
--- a/lib/GnuPG/Options.pm
|
||||
+++ b/lib/GnuPG/Options.pm
|
||||
@@ -198,7 +198,7 @@ GnuPG::Options - GnuPG options embodiment
|
||||
|
||||
# assuming $gnupg is a GnuPG::Interface object
|
||||
$gnupg->options->armor( 1 );
|
||||
- $gnupg->options->push_recipients( 'ftobin', '0xABCD1234' );
|
||||
+ $gnupg->options->push_recipients( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
|
||||
index a309698..c8764cc 100644
|
||||
--- a/t/MyTestSpecific.pm
|
||||
+++ b/t/MyTestSpecific.pm
|
||||
@@ -46,7 +46,7 @@ $gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
|
||||
$gnupg->options->hash_init( homedir => 'test/gnupghome',
|
||||
armor => 1,
|
||||
meta_interactive => 0,
|
||||
- meta_signing_key_id => '0xF950DA9C',
|
||||
+ meta_signing_key_id => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
|
||||
always_trust => 1,
|
||||
);
|
||||
|
||||
diff --git a/t/encrypt.t b/t/encrypt.t
|
||||
index 3183ac4..e6bdc08 100644
|
||||
--- a/t/encrypt.t
|
||||
+++ b/t/encrypt.t
|
||||
@@ -27,7 +27,7 @@ TEST
|
||||
|
||||
$gnupg->options->clear_recipients();
|
||||
$gnupg->options->clear_meta_recipients_keys();
|
||||
- $gnupg->options->push_recipients( '0x2E854A6B' );
|
||||
+ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
|
||||
|
||||
my $pid = $gnupg->encrypt( handles => $handles );
|
||||
|
||||
@@ -43,7 +43,7 @@ TEST
|
||||
{
|
||||
reset_handles();
|
||||
|
||||
- my @keys = $gnupg->get_public_keys( '0xF950DA9C' );
|
||||
+ my @keys = $gnupg->get_public_keys( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
$gnupg->options->clear_recipients();
|
||||
$gnupg->options->clear_meta_recipients_keys();
|
||||
$gnupg->options->push_meta_recipients_keys( @keys );
|
||||
@@ -64,7 +64,7 @@ TEST
|
||||
|
||||
$gnupg->options->clear_recipients();
|
||||
$gnupg->options->clear_meta_recipients_keys();
|
||||
- $gnupg->options->push_recipients( '0x2E854A6B' );
|
||||
+ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
|
||||
|
||||
$handles->stdin( $texts{plain}->fh() );
|
||||
$handles->options( 'stdin' )->{direct} = 1;
|
||||
diff --git a/t/export_keys.t b/t/export_keys.t
|
||||
index cf5c82b..5add064 100644
|
||||
--- a/t/export_keys.t
|
||||
+++ b/t/export_keys.t
|
||||
@@ -15,7 +15,7 @@ TEST
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->export_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C' );
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
close $stdin;
|
||||
waitpid $pid, 0;
|
||||
|
||||
@@ -31,7 +31,7 @@ TEST
|
||||
$handles->options( 'stdout' )->{direct} = 1;
|
||||
|
||||
my $pid = $gnupg->export_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C' );
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
waitpid $pid, 0;
|
||||
return $CHILD_ERROR == 0;
|
||||
};
|
||||
diff --git a/t/get_public_keys.t b/t/get_public_keys.t
|
||||
index 9e96f7d..7893625 100644
|
||||
--- a/t/get_public_keys.t
|
||||
+++ b/t/get_public_keys.t
|
||||
@@ -19,7 +19,7 @@ TEST
|
||||
{
|
||||
reset_handles();
|
||||
|
||||
- my @returned_keys = $gnupg->get_public_keys_with_sigs( '0xF950DA9C' );
|
||||
+ my @returned_keys = $gnupg->get_public_keys_with_sigs( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
|
||||
return 0 unless @returned_keys == 1;
|
||||
|
||||
diff --git a/t/get_secret_keys.t b/t/get_secret_keys.t
|
||||
index c798cce..a7f1348 100644
|
||||
--- a/t/get_secret_keys.t
|
||||
+++ b/t/get_secret_keys.t
|
||||
@@ -18,7 +18,7 @@ TEST
|
||||
{
|
||||
reset_handles();
|
||||
|
||||
- my @returned_keys = $gnupg->get_secret_keys( '0xF950DA9C' );
|
||||
+ my @returned_keys = $gnupg->get_secret_keys( '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
|
||||
return 0 unless @returned_keys == 1;
|
||||
|
||||
diff --git a/t/list_public_keys.t b/t/list_public_keys.t
|
||||
index a36a78b..622b092 100644
|
||||
--- a/t/list_public_keys.t
|
||||
+++ b/t/list_public_keys.t
|
||||
@@ -38,7 +38,7 @@ TEST
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->list_public_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C'
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C'
|
||||
);
|
||||
close $stdin;
|
||||
|
||||
@@ -64,7 +64,7 @@ TEST
|
||||
$handles->options( 'stdout' )->{direct} = 1;
|
||||
|
||||
my $pid = $gnupg->list_public_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C',
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
|
||||
);
|
||||
|
||||
waitpid $pid, 0;
|
||||
diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
|
||||
index 51e3651..7040c38 100644
|
||||
--- a/t/list_secret_keys.t
|
||||
+++ b/t/list_secret_keys.t
|
||||
@@ -55,7 +55,7 @@ TEST
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->list_secret_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C' );
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
close $stdin;
|
||||
|
||||
$outfile = 'test/secret-keys/2.out';
|
||||
@@ -80,7 +80,7 @@ TEST
|
||||
$handles->options( 'stdout' )->{direct} = 1;
|
||||
|
||||
my $pid = $gnupg->list_secret_keys( handles => $handles,
|
||||
- command_args => '0xF950DA9C' );
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C' );
|
||||
|
||||
waitpid $pid, 0;
|
||||
|
||||
diff --git a/t/list_sigs.t b/t/list_sigs.t
|
||||
index 16cfa6a..1301fb2 100644
|
||||
--- a/t/list_sigs.t
|
||||
+++ b/t/list_sigs.t
|
||||
@@ -36,7 +36,7 @@ TEST
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->list_sigs( handles => $handles,
|
||||
- command_args => '0xF950DA9C',
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
|
||||
);
|
||||
close $stdin;
|
||||
|
||||
@@ -60,7 +60,7 @@ TEST
|
||||
$handles->options( 'stdout' )->{direct} = 1;
|
||||
|
||||
my $pid = $gnupg->list_sigs( handles => $handles,
|
||||
- command_args => '0xF950DA9C',
|
||||
+ command_args => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
|
||||
);
|
||||
|
||||
waitpid $pid, 0;
|
||||
diff --git a/t/sign_and_encrypt.t b/t/sign_and_encrypt.t
|
||||
index 5dc1c08..df0fc75 100644
|
||||
--- a/t/sign_and_encrypt.t
|
||||
+++ b/t/sign_and_encrypt.t
|
||||
@@ -14,7 +14,7 @@ TEST
|
||||
{
|
||||
reset_handles();
|
||||
|
||||
- $gnupg->options->push_recipients( '0x2E854A6B' );
|
||||
+ $gnupg->options->push_recipients( '0x7466B7E98C4CCB64C2CE738BADB99D9C2E854A6B' );
|
||||
my $pid = $gnupg->sign_and_encrypt( handles => $handles );
|
||||
|
||||
print $stdin @{ $texts{plain}->data() };
|
@ -1,33 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 20:17:49 -0400
|
||||
Subject: move key files to generic names
|
||||
|
||||
---
|
||||
t/000_setup.t | 2 +-
|
||||
test/{pubring.gpg => public_keys.pgp} | Bin
|
||||
test/{secring.gpg => secret_keys.pgp} | Bin
|
||||
3 files changed, 1 insertion(+), 1 deletion(-)
|
||||
rename test/{pubring.gpg => public_keys.pgp} (100%)
|
||||
rename test/{secring.gpg => secret_keys.pgp} (100%)
|
||||
|
||||
diff --git a/t/000_setup.t b/t/000_setup.t
|
||||
index 7f7f7b0..a8e3042 100644
|
||||
--- a/t/000_setup.t
|
||||
+++ b/t/000_setup.t
|
||||
@@ -19,7 +19,7 @@ TEST
|
||||
copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
|
||||
reset_handles();
|
||||
|
||||
- my $pid = $gnupg->import_keys(command_args => [ 'test/pubring.gpg', 'test/secring.gpg' ],
|
||||
+ my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp' ],
|
||||
options => [ 'batch'],
|
||||
handles => $handles);
|
||||
waitpid $pid, 0;
|
||||
diff --git a/test/pubring.gpg b/test/public_keys.pgp
|
||||
similarity index 100%
|
||||
rename from test/pubring.gpg
|
||||
rename to test/public_keys.pgp
|
||||
diff --git a/test/secring.gpg b/test/secret_keys.pgp
|
||||
similarity index 100%
|
||||
rename from test/secring.gpg
|
||||
rename to test/secret_keys.pgp
|
@ -1,53 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 20:25:48 -0400
|
||||
Subject: fix spelling: s/convience/convenience/
|
||||
|
||||
---
|
||||
README | 4 ++--
|
||||
lib/GnuPG/Interface.pm | 4 ++--
|
||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/README b/README
|
||||
index ed94ede..a05ef9b 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -143,7 +143,7 @@ OBJECT METHODS
|
||||
does not come into play. If the passphrase data member handle of the
|
||||
handles object is not defined, but the the passphrase data member
|
||||
handle of GnuPG::Interface object is, GnuPG::Interface will handle
|
||||
- passing this information into GnuPG for the user as a convience.
|
||||
+ passing this information into GnuPG for the user as a convenience.
|
||||
Note that this will result in GnuPG::Interface storing the
|
||||
passphrase in memory, instead of having it simply 'pass-through' to
|
||||
GnuPG via a handle.
|
||||
@@ -271,7 +271,7 @@ EXAMPLES
|
||||
);
|
||||
|
||||
# indicate our pasphrase through the
|
||||
- # convience method
|
||||
+ # convenience method
|
||||
$gnupg->passphrase( $passphrase );
|
||||
|
||||
# this sets up the communication
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 6eaef7d..29205f0 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -1008,7 +1008,7 @@ and so this information is not generated and does not come into play.
|
||||
If the B<passphrase> data member handle of the B<handles> object
|
||||
is not defined, but the the B<passphrase> data member handle of GnuPG::Interface
|
||||
object is, GnuPG::Interface will handle passing this information into GnuPG
|
||||
-for the user as a convience. Note that this will result in
|
||||
+for the user as a convenience. Note that this will result in
|
||||
GnuPG::Interface storing the passphrase in memory, instead of having
|
||||
it simply 'pass-through' to GnuPG via a handle.
|
||||
|
||||
@@ -1175,7 +1175,7 @@ The following setup can be done before any of the following examples:
|
||||
);
|
||||
|
||||
# indicate our pasphrase through the
|
||||
- # convience method
|
||||
+ # convenience method
|
||||
$gnupg->passphrase( $passphrase );
|
||||
|
||||
# this sets up the communication
|
@ -1,117 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 20:59:43 -0400
|
||||
Subject: added new secret key with different passphrase
|
||||
|
||||
Adding a new secret key with a different passphrase should allow us to
|
||||
differentiate between passing the passphrase explicitly and relying on
|
||||
the agent + pinentry.
|
||||
---
|
||||
t/000_setup.t | 2 +-
|
||||
test/new_secret.pgp | 58 ++++++++++++++++++++++++++++++++++++++++++
|
||||
test/secret-keys/1.0.test | 4 +++
|
||||
test/secret-keys/1.modern.test | 5 ++++
|
||||
4 files changed, 68 insertions(+), 1 deletion(-)
|
||||
create mode 100644 test/new_secret.pgp
|
||||
|
||||
diff --git a/t/000_setup.t b/t/000_setup.t
|
||||
index a8e3042..b183241 100644
|
||||
--- a/t/000_setup.t
|
||||
+++ b/t/000_setup.t
|
||||
@@ -19,7 +19,7 @@ TEST
|
||||
copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
|
||||
reset_handles();
|
||||
|
||||
- my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp' ],
|
||||
+ my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp', 'test/new_secret.pgp' ],
|
||||
options => [ 'batch'],
|
||||
handles => $handles);
|
||||
waitpid $pid, 0;
|
||||
diff --git a/test/new_secret.pgp b/test/new_secret.pgp
|
||||
new file mode 100644
|
||||
index 0000000..5feb72c
|
||||
--- /dev/null
|
||||
+++ b/test/new_secret.pgp
|
||||
@@ -0,0 +1,58 @@
|
||||
+-----BEGIN PGP PRIVATE KEY BLOCK-----
|
||||
+
|
||||
+lQPGBFf9iNIBCACZGF36JFTAggUJK85gweUquqh0kvVQICUtyiHXFXBBPzCK+RWL
|
||||
+oc5yeOfILHH7FfOztwPH1oJ7SWQtOgpuoiMHPtF7ne+MYevMf9jTYb/xCT0yZID5
|
||||
+/ieoHwUQQPiowxGewOww23RLQ1Cf46nqGBUD+fsWwT2Eq6ojLp/H72h+2lQ1ZCWd
|
||||
+Q/9MSQQgDo5tWptokFGmLBKCS59pYMBaLbKSj7lFa/ekPm9zhcdmmLrLHCS9rIUP
|
||||
+VKlWAg02MVmMB4fYm9nbtuwYHWvbDFYzpVr2WNlRZlPy0Y46ahxFbFwhtmOJAgT1
|
||||
+tgaQtDXo3kXRXngYZstDfe61Hqmc44j1vJ4VABEBAAH+BwMCnvb4v9vnhhzmdZdJ
|
||||
+EzK3ikXYQp3PcOMDlRE5qtBmXhOJXH2tdEmXjegjWGA501eeoks0VnpBba2m4B36
|
||||
+Z37fjpOEi4QOuTn6emVwijJZgmmTAC7JHNzAW+IsiRvk/2907UZCwa/1UQpC0bik
|
||||
+pHTZx+yKp33vGbkbCkKgHFQoHcS9D1by0WOkaLSlcE9CUCKb5LCe2Q1KDwZGrg60
|
||||
+4WUvg9eM2eatixAyOJEoRONlXDcQnUhSnG5+TUPNhVVWIaM/tPAgYmBG5oCSJ/N0
|
||||
+ls8cXoOVup/itBHo2Bfn+nyh0OAWdgdVmB0rPYUCLJV0FiQx5tB59OHmA3Naokj5
|
||||
+rvumyklCg314NnkEXrbPq7kKbX0X8UPoXdzAmalb4++OhgzEwd3NkWxvFSxKkQAt
|
||||
+XAU5i9XNHJXLwATAMlEaXMBmfcpjyIx4WpBUSmYMTjh0Nu5ee+kGvMY9fUxOKbet
|
||||
+IS9agFSMwVNRsX91+pKtBCQc7Je5tIrLhC8Hbvotn0GA8iFgu6LBqkrUO9Rh30Xs
|
||||
+vzz3oXm7WgHbL30m9h+rJ2dmPZOwmW/0zRUec/7alizx0T4sLx7T0qUPUxeEjkeU
|
||||
+JWtqfrcXEc3xIR9r5S2xqsUSKx6h1UhHMeMtQaDBgeH/Syq7a2gnkNoY84xxojGj
|
||||
+lGkis5PF3xFpYqvjY0thyPFNxQguRlqktN8gNB+V1dShbCpNI9bDzv4pzvogEiM0
|
||||
+EM/xvJSCkARCe6nqOugWV8j5f3+9tuyREqcidHq+PR+USoNYdUWQO14kPY6e62wO
|
||||
+lC5B4G7TDQtigCfOyEOiPXYC/qnC8sPVR2u5bCYm2YJT7L+rYRLSN+628qz7BwH3
|
||||
+9XtpnRtBFWpjI5qjn4uMM42e3k5UVB/r4GyrLXhEuO8D81TVzRQhjiqLweguk73h
|
||||
+VDjEd0yachHbtCxHbnVQRzo6SW50ZXJmYWNlIFRlc3Qga2V5IDx0ZXN0QGV4YW1w
|
||||
+bGUub3JnPokBNwQTAQgAIQUCV/2I0gIbAwULCQgHAgYVCAkKCwIEFgIDAQIeAQIX
|
||||
+gAAKCRAbkTzptnR93EZkB/9groVsVMBJtGP1GSFMg2Q9loyijXT2P6hCbUTS4YMz
|
||||
+O4jQPB8UQ39XIhyWo7hVGsXeA777+7VTto7q0CG9Ph7FTGKK8W2AnzTUKNdXAC6h
|
||||
+qIc+ymvlm71GxhkKFR0vDbFg6CLJ/MX/x1Bd0TKh4RZtgOqX6A7Pzw/AI7f2YJcJ
|
||||
+BKPT+/q/F/Wp1r+mxZ5pxUvYm643GVzdnbtuoqgBLng/3n1zjIz+oIz6RGBjzHni
|
||||
+3TUTKe//ewn1lIdTxPdUZA9G4vTE5dCnM4MHTxQSXA+aUexuONswQhiANtfVCW8c
|
||||
+sf9MQpkQ/Vqv9hfeYwH4pJ8IPK1No9F0a0fvnq2JaX4gnQPGBFf9iNIBCADEQ6HK
|
||||
+s5tWN2Ph/3A6D0A2nSc6m1Mh/AXhdptka0aPhhVgspCmQ1lJP/Kdf6AnlCi6u1G7
|
||||
+QXvGX8OtbKNosLi91nIqvNwckUOvXrLcAk/epkmidopOuHUZhE+1UaLKs7UssBOe
|
||||
+TQTtADdl2786E3qbtaNrjDTvbNesU1DEZjNoBWfKYHZYv2wCF170Lwzp7NJhAueO
|
||||
+bTwfUO8EusST6d1NYB0zFxbBi60/hJHCfcAuaSn00jFQ+kj8m7jXCgcyB+1+25d2
|
||||
+gpPbs19S4pi9f7eQflhglm0wB13C6yl+YgwVZQxU/fU70jgSYhkXNPx5bEN3WGkg
|
||||
+4hnP53hrsI4p3se1ABEBAAH+BwMCAppvwSTp9Y/mu317D14a9k6m/zC2LrzPx6dl
|
||||
+P3GtDJUCs1CVH/wXsUxLY4hAgS188xPhNLuIWuXwQ7qX7E8kanxgPqeK7NTAPKxH
|
||||
+CEqJPevFRBtftHq3zqZZF9CHXulDO3KkWxIHANMclq+zcUotrc4GXIxeYjewXv9p
|
||||
+tzKEjlt27Q00VvwRM7JVxBlC3xJvKXf6zyRoUt2/Clq+CFkb2s+dAzCI52o7tlB9
|
||||
+El84sTIlJr0+b6+GcwrKonS8HcGUECfYmSiIiNmxlkJ/4OabDlDYlzvmCYv2pMjc
|
||||
+Bif70Dowb8TBD/iTFLPY2lkhqBFi3Bcqc51MVecaQk3rRbVyOqhvGaRE084/LmkN
|
||||
+gkE6vQKRSbzRmYwyKC/QUKOW5qbl5Jf3lrjVeM5tEnvJeRCfZEokKjIZul4nX4dK
|
||||
+zxH+l+sCUA+RnEeGB2y1yhnPkP4dYHEb8iMLINqXQd18FpBFSs9yv9tFWJhdblUK
|
||||
+SiS8DXmuoZI2Mk8yMZ0j0bi8mu9eh52dqYgBGD7TgjP5vpYU/zbtpNgMP0Zvne1X
|
||||
+gig6NKK1+3VAZaiOvYUUHZERJGp/eggTtF66cD/0EHJjoZ/0pAciEvWYUyXWVBdj
|
||||
+eVWBZE/RVOwrTMBVtrxQsPJ3sfeGlLt21IZYKathTZ/dn5PSlU+i4f9VyC/hHd8S
|
||||
+xouQU3nB//ihbrR65YH5E53e8+jPaRtFvLbcqmY8YftV0y/5BZwduZoxcOtxD3A0
|
||||
+J/2GVpUhs3WngCksdUAEbrEXzKKSOC7b4KDw2sTIT5xHra4CBK5L5N85ny8tG7A6
|
||||
+wmTt+6PHo51gx/W/0jiMB3rEiGoTZ86uWLaGv5SgqLP49euCIEXNKK9srFK3o7QE
|
||||
+04upH9zOXR8ytvPOLy/K5zT6YH2eyNs19sWfjAfP/bxhnrDYajsZ2WKZiQEfBBgB
|
||||
+CAAJBQJX/YjSAhsMAAoJEBuRPOm2dH3c+6kH+wWoEqTlPdPLZcTN8I5a6HHD0Ul8
|
||||
+7xt3OtiRFoMD2M+zgLvImaj8AULap4w/0G+J+7PCUER8JhcePSzLbizfpTczbDP2
|
||||
+E1LhEM8IBE6GT8yL8VB9AL1xW+hXIi5sWW/f900deOhoh7ikrP7KxT0c8zQjaaqV
|
||||
+n6bio93CvZ3yBqMO20apwWDyiSoBpXVjLrW00BdL8i9Rsf6v5UwIIy9o7pfjK5zo
|
||||
+mAZM2dKzlp9z4q5P6yE4aXI0bHz+XvG7hdpkHmjG5A+EQCnN2qoDNIA4QiRhH8TQ
|
||||
+aTaj4AlCiCAV2hEelPYve5QKccAsfC//qr+FMF+0bhZa05X2afxLYtku0Ms=
|
||||
+=ftgB
|
||||
+-----END PGP PRIVATE KEY BLOCK-----
|
||||
diff --git a/test/secret-keys/1.0.test b/test/secret-keys/1.0.test
|
||||
index 129d472..f8239a9 100644
|
||||
--- a/test/secret-keys/1.0.test
|
||||
+++ b/test/secret-keys/1.0.test
|
||||
@@ -5,3 +5,7 @@ uid GnuPG test key (for testing purposes only)
|
||||
uid Foo Bar (1)
|
||||
ssb 768g/2E854A6B 2000-02-06
|
||||
|
||||
+sec 2048R/B6747DDC 2016-10-12
|
||||
+uid GnuPG::Interface Test key <test@example.org>
|
||||
+ssb 2048R/AE441D0F 2016-10-12
|
||||
+
|
||||
diff --git a/test/secret-keys/1.modern.test b/test/secret-keys/1.modern.test
|
||||
index 3e46407..42b27a1 100644
|
||||
--- a/test/secret-keys/1.modern.test
|
||||
+++ b/test/secret-keys/1.modern.test
|
||||
@@ -6,3 +6,8 @@ uid [ unknown] GnuPG test key (for testing purposes only)
|
||||
uid [ unknown] Foo Bar (1)
|
||||
ssb elg768 2000-02-06 [E]
|
||||
|
||||
+sec rsa2048 2016-10-12 [SC]
|
||||
+ 278F850AA702911F1318F0A61B913CE9B6747DDC
|
||||
+uid [ unknown] GnuPG::Interface Test key <test@example.org>
|
||||
+ssb rsa2048 2016-10-12 [E]
|
||||
+
|
@ -1,302 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Tue, 11 Oct 2016 21:29:22 -0400
|
||||
Subject: Test use of gpg without explicit passphrase (agent+pinentry)
|
||||
|
||||
The modern GnuPG suite encourages the use of gpg-agent to control
|
||||
access to secret key material. In this use case, we avoid setting an
|
||||
explicit passphrase in code, and rely on either a correctly-configured
|
||||
and primed gpg-agent or a dedicated pinentry program to supply the
|
||||
passphrase.
|
||||
|
||||
This additional test verifies that the passphrase can be handled by
|
||||
the agent. Note that the passphrase for this additional test key is
|
||||
*not* the default passphrase, so this test should fail in the event
|
||||
that gpg can't use the agent and the pinentry for this task.
|
||||
|
||||
Unfortunately, this all assumes that we're using GnuPG "Modern". I've
|
||||
noted concerns about writing forward- and backward-compatible bindings
|
||||
for GnuPG here:
|
||||
https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html
|
||||
---
|
||||
README | 41 +++++++++++++++++++++++++++--------------
|
||||
lib/GnuPG/Interface.pm | 26 +++++++++++++++++++++++++-
|
||||
t/MyTestSpecific.pm | 10 ++++++++--
|
||||
t/decrypt.t | 27 +++++++++++++++++++++++++++
|
||||
test/encrypted.2.gpg | 12 ++++++++++++
|
||||
test/fake-pinentry.pl | 2 +-
|
||||
test/plain.2.txt | 1 +
|
||||
7 files changed, 101 insertions(+), 18 deletions(-)
|
||||
create mode 100644 test/encrypted.2.gpg
|
||||
create mode 100644 test/plain.2.txt
|
||||
|
||||
diff --git a/README b/README
|
||||
index a05ef9b..be06ef3 100644
|
||||
--- a/README
|
||||
+++ b/README
|
||||
@@ -5,7 +5,7 @@ SYNOPSIS
|
||||
# A simple example
|
||||
use IO::Handle;
|
||||
use GnuPG::Interface;
|
||||
-
|
||||
+
|
||||
# setting up the situation
|
||||
my $gnupg = GnuPG::Interface->new();
|
||||
$gnupg->options->hash_init( armor => 1,
|
||||
@@ -24,7 +24,7 @@ SYNOPSIS
|
||||
# Now we'll go about encrypting with the options already set
|
||||
my @plaintext = ( 'foobar' );
|
||||
my $pid = $gnupg->encrypt( handles => $handles );
|
||||
-
|
||||
+
|
||||
# Now we write to the input of GnuPG
|
||||
print $input @plaintext;
|
||||
close $input;
|
||||
@@ -140,13 +140,26 @@ OBJECT METHODS
|
||||
standard error, standard output, or standard error. If the status or
|
||||
logger handle is not defined, this channel of communication is never
|
||||
established with GnuPG, and so this information is not generated and
|
||||
- does not come into play. If the passphrase data member handle of the
|
||||
- handles object is not defined, but the the passphrase data member
|
||||
- handle of GnuPG::Interface object is, GnuPG::Interface will handle
|
||||
- passing this information into GnuPG for the user as a convenience.
|
||||
- Note that this will result in GnuPG::Interface storing the
|
||||
- passphrase in memory, instead of having it simply 'pass-through' to
|
||||
- GnuPG via a handle.
|
||||
+ does not come into play.
|
||||
+
|
||||
+ If the passphrase data member handle of the handles object is not
|
||||
+ defined, but the the passphrase data member handle of
|
||||
+ GnuPG::Interface object is, GnuPG::Interface will handle passing
|
||||
+ this information into GnuPG for the user as a convenience. Note that
|
||||
+ this will result in GnuPG::Interface storing the passphrase in
|
||||
+ memory, instead of having it simply 'pass-through' to GnuPG via a
|
||||
+ handle.
|
||||
+
|
||||
+ If neither the passphrase data member of the GnuPG::Interface nor
|
||||
+ the passphrase data member of the handles object is defined, then
|
||||
+ GnuPG::Interface assumes that access and control over the secret key
|
||||
+ will be handled by the running gpg-agent process. This represents
|
||||
+ the simplest mode of operation with the GnuPG "modern" suite
|
||||
+ (version 2.1 and later). It is also the preferred mode for tools
|
||||
+ intended to be user-facing, since the user will be prompted directly
|
||||
+ by gpg-agent for use of the secret key material. Note that for
|
||||
+ programmatic use, this mode requires the gpg-agent and pinentry to
|
||||
+ already be correctly configured.
|
||||
|
||||
Other Methods
|
||||
get_public_keys( @search_strings )
|
||||
@@ -241,7 +254,7 @@ EXAMPLES
|
||||
|
||||
my $handles = GnuPG::Handles->new( stdin => $input,
|
||||
stdout => $output );
|
||||
-
|
||||
+
|
||||
# this sets up the communication
|
||||
# Note that the recipients were specified earlier
|
||||
# in the 'options' data member of the $gnupg object.
|
||||
@@ -315,7 +328,7 @@ EXAMPLES
|
||||
# a file written to disk
|
||||
# Make sure you "use IO::File" if you use this module!
|
||||
my $cipher_file = IO::File->new( 'encrypted.gpg' );
|
||||
-
|
||||
+
|
||||
# this sets up the communication
|
||||
my $pid = $gnupg->decrypt( handles => $handles );
|
||||
|
||||
@@ -346,7 +359,7 @@ EXAMPLES
|
||||
# This time we'll just let GnuPG print to our own output
|
||||
# and read from our input, because no input is needed!
|
||||
my $handles = GnuPG::Handles->new();
|
||||
-
|
||||
+
|
||||
my @ids = ( 'ftobin', '0xABCD1234ABCD1234ABCD1234ABCD1234ABCD1234' );
|
||||
|
||||
# this time we need to specify something for
|
||||
@@ -354,7 +367,7 @@ EXAMPLES
|
||||
# search ids as arguments
|
||||
my $pid = $gnupg->list_public_keys( handles => $handles,
|
||||
command_args => [ @ids ] );
|
||||
-
|
||||
+
|
||||
waitpid $pid, 0;
|
||||
|
||||
Creating GnuPG::PublicKey Objects
|
||||
@@ -372,7 +385,7 @@ EXAMPLES
|
||||
command_args => [ qw( test/key.1.asc ) ],
|
||||
handles => $handles,
|
||||
);
|
||||
-
|
||||
+
|
||||
my @out = <$handles->stdout()>;
|
||||
waitpid $pid, 0;
|
||||
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 29205f0..5d8b0ec 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -106,6 +106,14 @@ sub fork_attach_exec( $% ) {
|
||||
my ( $self, %args ) = @_;
|
||||
|
||||
my $handles = $args{handles} or croak 'no GnuPG::Handles passed';
|
||||
+ my $use_loopback_pinentry = 0;
|
||||
+
|
||||
+ # WARNING: this assumes that we're using the "modern" GnuPG suite
|
||||
+ # -- version 2.1.x or later. It's not clear to me how we can
|
||||
+ # safely and efficiently avoid this assumption (see
|
||||
+ # https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html)
|
||||
+ $use_loopback_pinentry = 1
|
||||
+ if ($handles->passphrase());
|
||||
|
||||
# deprecation support
|
||||
$args{commands} ||= $args{gnupg_commands};
|
||||
@@ -293,8 +301,12 @@ sub fork_attach_exec( $% ) {
|
||||
$self->options->$option($fileno);
|
||||
}
|
||||
|
||||
+ my @args = $self->options->get_args();
|
||||
+ push @args, '--pinentry-mode', 'loopback'
|
||||
+ if $use_loopback_pinentry;
|
||||
+
|
||||
my @command = (
|
||||
- $self->call(), $self->options->get_args(),
|
||||
+ $self->call(), @args,
|
||||
@commands, @command_args
|
||||
);
|
||||
|
||||
@@ -1005,6 +1017,7 @@ and standard error will be tied to the running program's standard error,
|
||||
standard output, or standard error. If the B<status> or B<logger> handle
|
||||
is not defined, this channel of communication is never established with GnuPG,
|
||||
and so this information is not generated and does not come into play.
|
||||
+
|
||||
If the B<passphrase> data member handle of the B<handles> object
|
||||
is not defined, but the the B<passphrase> data member handle of GnuPG::Interface
|
||||
object is, GnuPG::Interface will handle passing this information into GnuPG
|
||||
@@ -1012,6 +1025,17 @@ for the user as a convenience. Note that this will result in
|
||||
GnuPG::Interface storing the passphrase in memory, instead of having
|
||||
it simply 'pass-through' to GnuPG via a handle.
|
||||
|
||||
+If neither the B<passphrase> data member of the GnuPG::Interface nor
|
||||
+the B<passphrase> data member of the B<handles> object is defined,
|
||||
+then GnuPG::Interface assumes that access and control over the secret
|
||||
+key will be handled by the running gpg-agent process. This represents
|
||||
+the simplest mode of operation with the GnuPG "modern" suite (version
|
||||
+2.1 and later). It is also the preferred mode for tools intended to
|
||||
+be user-facing, since the user will be prompted directly by gpg-agent
|
||||
+for use of the secret key material. Note that for programmatic use,
|
||||
+this mode requires the gpg-agent and pinentry to already be correctly
|
||||
+configured.
|
||||
+
|
||||
=back
|
||||
|
||||
=head2 Other Methods
|
||||
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
|
||||
index c8764cc..e513c25 100644
|
||||
--- a/t/MyTestSpecific.pm
|
||||
+++ b/t/MyTestSpecific.pm
|
||||
@@ -55,9 +55,15 @@ struct( Text => { fn => "\$", fh => "\$", data => "\$" } );
|
||||
$texts{plain} = Text->new();
|
||||
$texts{plain}->fn( 'test/plain.1.txt' );
|
||||
|
||||
+$texts{alt_plain} = Text->new();
|
||||
+$texts{alt_plain}->fn( 'test/plain.2.txt' );
|
||||
+
|
||||
$texts{encrypted} = Text->new();
|
||||
$texts{encrypted}->fn( 'test/encrypted.1.gpg' );
|
||||
|
||||
+$texts{alt_encrypted} = Text->new();
|
||||
+$texts{alt_encrypted}->fn( 'test/encrypted.2.gpg' );
|
||||
+
|
||||
$texts{signed} = Text->new();
|
||||
$texts{signed}->fn( 'test/signed.1.asc' );
|
||||
|
||||
@@ -68,7 +74,7 @@ $texts{temp} = Text->new();
|
||||
$texts{temp}->fn( 'test/temp' );
|
||||
|
||||
|
||||
-foreach my $name ( qw( plain encrypted signed key ) )
|
||||
+foreach my $name ( qw( plain alt_plain encrypted alt_encrypted signed key ) )
|
||||
{
|
||||
my $entry = $texts{$name};
|
||||
my $filename = $entry->fn();
|
||||
@@ -90,7 +96,7 @@ sub reset_handles
|
||||
stderr => $stderr
|
||||
);
|
||||
|
||||
- foreach my $name ( qw( plain encrypted signed key ) )
|
||||
+ foreach my $name ( qw( plain alt_plain encrypted alt_encrypted signed key ) )
|
||||
{
|
||||
my $entry = $texts{$name};
|
||||
my $filename = $entry->fn();
|
||||
diff --git a/t/decrypt.t b/t/decrypt.t
|
||||
index b2639ed..ee41448 100644
|
||||
--- a/t/decrypt.t
|
||||
+++ b/t/decrypt.t
|
||||
@@ -58,3 +58,30 @@ TEST
|
||||
{
|
||||
return compare( $texts{plain}->fn(), $texts{temp}->fn() ) == 0;
|
||||
};
|
||||
+
|
||||
+
|
||||
+# test without default_passphrase (that is, by using the agent)
|
||||
+TEST
|
||||
+{
|
||||
+ reset_handles();
|
||||
+
|
||||
+ $handles->stdin( $texts{alt_encrypted}->fh() );
|
||||
+ $handles->options( 'stdin' )->{direct} = 1;
|
||||
+
|
||||
+ $handles->stdout( $texts{temp}->fh() );
|
||||
+ $handles->options( 'stdout' )->{direct} = 1;
|
||||
+
|
||||
+ $gnupg->clear_passphrase();
|
||||
+
|
||||
+ my $pid = $gnupg->decrypt( handles => $handles );
|
||||
+
|
||||
+ waitpid $pid, 0;
|
||||
+
|
||||
+ return $CHILD_ERROR == 0;
|
||||
+};
|
||||
+
|
||||
+
|
||||
+TEST
|
||||
+{
|
||||
+ return compare( $texts{alt_plain}->fn(), $texts{temp}->fn() ) == 0;
|
||||
+};
|
||||
diff --git a/test/encrypted.2.gpg b/test/encrypted.2.gpg
|
||||
new file mode 100644
|
||||
index 0000000..105cbb3
|
||||
--- /dev/null
|
||||
+++ b/test/encrypted.2.gpg
|
||||
@@ -0,0 +1,12 @@
|
||||
+-----BEGIN PGP MESSAGE-----
|
||||
+
|
||||
+hQEMAw3NS2KuRB0PAQgAuCMQO6blPRIJZib+kDa51gac+BYPl8caXYTLqIHtiz2/
|
||||
+YRVqePJON4lNAqT6qUksIzQHtejFO6tb1SLqgX9Ti+fKAMLrQw9VGOYaJFoRrTJs
|
||||
++X33S4GHVVikRTu0dydAsekbfPSc2nRmTFUlSEV3psgAmg9xy8KA6cZroK9Xfcuh
|
||||
+xW7KLE0hLP+2NZ7zNmJMdu6LDGzvlQsnm1UeElXK8XdMGf8kA3R+GgeeOnR/oEQc
|
||||
+Uep77k/fLc+UV4fp9Dk1OBeg3Ko/irSaefk4mU7F4HmS8jIERHRvXBTiur1Zx8Nx
|
||||
+9U3fcQuc+P9+JC89iS4PJPF1Hr0MlezAghZYJrhOrtJIAe5Uaft5KMGRfy0VQnAs
|
||||
+MHqGnGtzzVWK6GK83ibgG4tTfPEHHIgNFsJf3rM4cWklUmCS9TeeDJJZfhnRA6+/
|
||||
+X82e6OI7QNbO
|
||||
+=DlGE
|
||||
+-----END PGP MESSAGE-----
|
||||
diff --git a/test/fake-pinentry.pl b/test/fake-pinentry.pl
|
||||
index 12d3611..40b8b08 100755
|
||||
--- a/test/fake-pinentry.pl
|
||||
+++ b/test/fake-pinentry.pl
|
||||
@@ -21,7 +21,7 @@ while (<STDIN>) {
|
||||
chomp;
|
||||
next if (/^$/);
|
||||
next if (/^#/);
|
||||
- print ("D test\n") if (/^getpin/i);
|
||||
+ print ("D supercalifragilisticexpialidocious\n") if (/^getpin/i);
|
||||
print "OK\n";
|
||||
exit if (/^bye/i);
|
||||
}
|
||||
diff --git a/test/plain.2.txt b/test/plain.2.txt
|
||||
new file mode 100644
|
||||
index 0000000..da5a1d5
|
||||
--- /dev/null
|
||||
+++ b/test/plain.2.txt
|
||||
@@ -0,0 +1 @@
|
||||
+test message
|
@ -1,42 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Thu, 25 May 2017 16:07:45 -0400
|
||||
Subject: Kill any GnuPG agent before and after the test suite.
|
||||
|
||||
This helps to ensure that the test suite daemon is started fresh at
|
||||
every test suite run. And it also avoids leaving a daemon running
|
||||
after the test suite, assuming the test suite manages to reach the
|
||||
end.
|
||||
|
||||
This is considered a reasonable practice by upstream.
|
||||
---
|
||||
t/000_setup.t | 3 +++
|
||||
t/zzz_cleanup.t | 2 ++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/t/000_setup.t b/t/000_setup.t
|
||||
index b183241..4dc4329 100644
|
||||
--- a/t/000_setup.t
|
||||
+++ b/t/000_setup.t
|
||||
@@ -17,6 +17,9 @@ TEST
|
||||
$agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
|
||||
$agentconf->close();
|
||||
copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
|
||||
+ # reset the state of any long-lived gpg-agent, ignoring errors:
|
||||
+ system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
|
||||
+
|
||||
reset_handles();
|
||||
|
||||
my $pid = $gnupg->import_keys(command_args => [ 'test/public_keys.pgp', 'test/secret_keys.pgp', 'test/new_secret.pgp' ],
|
||||
diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
|
||||
index 5c03a72..eea3a48 100644
|
||||
--- a/t/zzz_cleanup.t
|
||||
+++ b/t/zzz_cleanup.t
|
||||
@@ -12,6 +12,8 @@ use File::Path qw (remove_tree);
|
||||
TEST
|
||||
{
|
||||
my $err = [];
|
||||
+ # kill off any long-lived gpg-agent, ignoring errors:
|
||||
+ system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
|
||||
remove_tree('test/gnupghome', {error => \$err});
|
||||
return ! @$err;
|
||||
};
|
@ -1,110 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Fri, 26 May 2017 09:51:40 -0400
|
||||
Subject: Use a short temporary homedir during the test suite
|
||||
|
||||
This avoids problems with the length of the path to the homedir as
|
||||
compared to the size limits of sockaddr_un.sun_path, particularly on
|
||||
systems where /run/user/$(id -u) is not present or available (such as
|
||||
many minimalist build environments).
|
||||
---
|
||||
t/000_setup.t | 9 +++++----
|
||||
t/MyTestSpecific.pm | 18 +++++++++++++++++-
|
||||
t/list_secret_keys.t | 3 ++-
|
||||
t/zzz_cleanup.t | 6 ++++--
|
||||
4 files changed, 28 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/t/000_setup.t b/t/000_setup.t
|
||||
index 4dc4329..82d7005 100644
|
||||
--- a/t/000_setup.t
|
||||
+++ b/t/000_setup.t
|
||||
@@ -12,13 +12,14 @@ use File::Copy;
|
||||
|
||||
TEST
|
||||
{
|
||||
- make_path('test/gnupghome', { mode => 0700 });
|
||||
- my $agentconf = IO::File->new( "> test/gnupghome/gpg-agent.conf" );
|
||||
+ my $homedir = $gnupg->options->homedir();
|
||||
+ make_path($homedir, { mode => 0700 });
|
||||
+ my $agentconf = IO::File->new( "> " . $homedir . "/gpg-agent.conf" );
|
||||
$agentconf->write("pinentry-program " . getcwd() . "/test/fake-pinentry.pl\n");
|
||||
$agentconf->close();
|
||||
- copy('test/gpg.conf', 'test/gnupghome/gpg.conf');
|
||||
+ copy('test/gpg.conf', $homedir . '/gpg.conf');
|
||||
# reset the state of any long-lived gpg-agent, ignoring errors:
|
||||
- system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
|
||||
+ system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
|
||||
|
||||
reset_handles();
|
||||
|
||||
diff --git a/t/MyTestSpecific.pm b/t/MyTestSpecific.pm
|
||||
index e513c25..809d55c 100644
|
||||
--- a/t/MyTestSpecific.pm
|
||||
+++ b/t/MyTestSpecific.pm
|
||||
@@ -22,6 +22,7 @@ use IO::Seekable;
|
||||
use File::Compare;
|
||||
use Exporter;
|
||||
use Class::Struct;
|
||||
+use File::Temp qw (tempdir);
|
||||
|
||||
use GnuPG::Interface;
|
||||
use GnuPG::Handles;
|
||||
@@ -40,10 +41,25 @@ use vars qw( @ISA @EXPORT
|
||||
|
||||
$gnupg = GnuPG::Interface->new( passphrase => 'test' );
|
||||
|
||||
+
|
||||
+my $homedir;
|
||||
+if (-f "test/gnupghome") {
|
||||
+ my $record = IO::File->new( "< test/gnupghome" );
|
||||
+ $homedir = <$record>;
|
||||
+ $record->close();
|
||||
+} else {
|
||||
+ $homedir = tempdir( DIR => '/tmp');
|
||||
+ my $record = IO::File->new( "> test/gnupghome" );
|
||||
+ $record->write($homedir);
|
||||
+ $record->close();
|
||||
+}
|
||||
+
|
||||
my @version = split('\.', $gnupg->version());
|
||||
$gpg_is_modern = ($version[0] > 2 || ($version[0] == 2 && $version[1] >= 1));
|
||||
|
||||
-$gnupg->options->hash_init( homedir => 'test/gnupghome',
|
||||
+
|
||||
+
|
||||
+$gnupg->options->hash_init( homedir => $homedir,
|
||||
armor => 1,
|
||||
meta_interactive => 0,
|
||||
meta_signing_key_id => '0x93AFC4B1B0288A104996B44253AE596EF950DA9C',
|
||||
diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
|
||||
index 7040c38..d1e3f30 100644
|
||||
--- a/t/list_secret_keys.t
|
||||
+++ b/t/list_secret_keys.t
|
||||
@@ -23,8 +23,9 @@ TEST
|
||||
$outfile = 'test/secret-keys/1.out';
|
||||
my $out = IO::File->new( "> $outfile" )
|
||||
or die "cannot open $outfile for writing: $ERRNO";
|
||||
+ my $modern_pubring_line = $gnupg->options->homedir() . "/pubring.kbx\n";
|
||||
while (<$stdout>) {
|
||||
- if ($gpg_is_modern && /^\/.*\/test\/gnupghome\/pubring.kbx$/) {
|
||||
+ if ($gpg_is_modern && ($_ eq $modern_pubring_line)) {
|
||||
$out->print("test/gnupghome/pubring.kbx\n");
|
||||
} elsif ($gpg_is_modern && /^--*$/) {
|
||||
$out->print("--------------------------\n");
|
||||
diff --git a/t/zzz_cleanup.t b/t/zzz_cleanup.t
|
||||
index eea3a48..c3ec16f 100644
|
||||
--- a/t/zzz_cleanup.t
|
||||
+++ b/t/zzz_cleanup.t
|
||||
@@ -11,9 +11,11 @@ use File::Path qw (remove_tree);
|
||||
# this is actually no test, just cleanup.
|
||||
TEST
|
||||
{
|
||||
+ my $homedir = $gnupg->options->homedir();
|
||||
my $err = [];
|
||||
# kill off any long-lived gpg-agent, ignoring errors:
|
||||
- system('gpgconf', '--homedir=test/gnupghome', '--quiet', '--kill', 'gpg-agent');
|
||||
- remove_tree('test/gnupghome', {error => \$err});
|
||||
+ system('gpgconf', '--homedir', $homedir, '--quiet', '--kill', 'gpg-agent');
|
||||
+ remove_tree($homedir, {error => \$err});
|
||||
+ unlink('test/gnupghome');
|
||||
return ! @$err;
|
||||
};
|
@ -1,51 +0,0 @@
|
||||
From: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
|
||||
Date: Fri, 26 May 2017 18:15:24 -0400
|
||||
Subject: Make things work with gpg1 (assuming plain 'gpg' is modern)
|
||||
|
||||
* avoid sending --pinentry-mode=loopback if gpg is invoked as gpg1
|
||||
* fix up t/list_secret_keys to account for the varied output
|
||||
* t/decrypt.t still fails two agent-only tests, but presumably folks
|
||||
who use gpg1 are not expecting to use the agent.
|
||||
---
|
||||
lib/GnuPG/Interface.pm | 5 ++++-
|
||||
t/list_secret_keys.t | 9 +++++----
|
||||
2 files changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/lib/GnuPG/Interface.pm b/lib/GnuPG/Interface.pm
|
||||
index 5d8b0ec..f80ead5 100644
|
||||
--- a/lib/GnuPG/Interface.pm
|
||||
+++ b/lib/GnuPG/Interface.pm
|
||||
@@ -112,8 +112,11 @@ sub fork_attach_exec( $% ) {
|
||||
# -- version 2.1.x or later. It's not clear to me how we can
|
||||
# safely and efficiently avoid this assumption (see
|
||||
# https://lists.gnupg.org/pipermail/gnupg-devel/2016-October/031800.html)
|
||||
+ #
|
||||
+ # as a (brittle and incomplete) cleanup, we will avoid trying to
|
||||
+ # send pinentry-loopback if the program is invoked as "gpg1"
|
||||
$use_loopback_pinentry = 1
|
||||
- if ($handles->passphrase());
|
||||
+ if ($handles->passphrase() && ! ($self->call =~ m/gpg1$/));
|
||||
|
||||
# deprecation support
|
||||
$args{commands} ||= $args{gnupg_commands};
|
||||
diff --git a/t/list_secret_keys.t b/t/list_secret_keys.t
|
||||
index d1e3f30..8e3c911 100644
|
||||
--- a/t/list_secret_keys.t
|
||||
+++ b/t/list_secret_keys.t
|
||||
@@ -23,11 +23,12 @@ TEST
|
||||
$outfile = 'test/secret-keys/1.out';
|
||||
my $out = IO::File->new( "> $outfile" )
|
||||
or die "cannot open $outfile for writing: $ERRNO";
|
||||
- my $modern_pubring_line = $gnupg->options->homedir() . "/pubring.kbx\n";
|
||||
+ my $seckey_file = $gpg_is_modern ? 'pubring.kbx' : 'secring.gpg';
|
||||
+ my $pubring_line = $gnupg->options->homedir() . '/' . $seckey_file . "\n";
|
||||
while (<$stdout>) {
|
||||
- if ($gpg_is_modern && ($_ eq $modern_pubring_line)) {
|
||||
- $out->print("test/gnupghome/pubring.kbx\n");
|
||||
- } elsif ($gpg_is_modern && /^--*$/) {
|
||||
+ if ($_ eq $pubring_line) {
|
||||
+ $out->print('test/gnupghome/'.$seckey_file."\n");
|
||||
+ } elsif (/^--*$/) {
|
||||
$out->print("--------------------------\n");
|
||||
} else {
|
||||
$out->print( $_ );
|
@ -1,54 +0,0 @@
|
||||
From 7c85ac40660861e7507c43d043323c3f1b83921b Mon Sep 17 00:00:00 2001
|
||||
From: Niko Tyni <ntyni@debian.org>
|
||||
Date: Wed, 20 Jun 2018 21:57:50 +0300
|
||||
Subject: [PATCH] Fix test suite for GnuPG >= 2.2.6 compatibility
|
||||
|
||||
GnuPG 2.2.6 (commit 1a5d95e7319e7e6f) started marking signatures
|
||||
with an expired key with '?', as seen with for instance
|
||||
|
||||
GNUPGHOME=./test/gnupghome/ gpg --list-sigs 0xF950DA9C
|
||||
|
||||
Adapt the test suite accordingly.
|
||||
|
||||
See https://dev.gnupg.org/rG1a5d95e7319e7e6f0dd11064a26cbbc371b05214
|
||||
|
||||
Bug-Debian: https://bugs.debian.org/900051
|
||||
---
|
||||
t/get_public_keys.t | 8 ++++++--
|
||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/get_public_keys.t b/t/get_public_keys.t
|
||||
index 7893625..ede080a 100644
|
||||
--- a/t/get_public_keys.t
|
||||
+++ b/t/get_public_keys.t
|
||||
@@ -13,8 +13,12 @@ use MyTestSpecific;
|
||||
use GnuPG::PrimaryKey;
|
||||
use GnuPG::SubKey;
|
||||
|
||||
+use version;
|
||||
+
|
||||
my ( $given_key, $handmade_key );
|
||||
|
||||
+my $gnupg_version = version->parse($gnupg->version);
|
||||
+
|
||||
TEST
|
||||
{
|
||||
reset_handles();
|
||||
@@ -74,7 +78,7 @@ TEST
|
||||
date_string => '2000-03-16',
|
||||
hex_id => '56FFD10A260C4FA3',
|
||||
sig_class => 0x10,
|
||||
- validity => '!'),
|
||||
+ validity => $gnupg_version < version->parse('2.2.6') ? '!' : '?'),
|
||||
GnuPG::Signature->new(
|
||||
date => 949813093,
|
||||
algo_num => 17,
|
||||
@@ -115,7 +119,7 @@ TEST
|
||||
date_string => '2000-03-16',
|
||||
hex_id => '56FFD10A260C4FA3',
|
||||
sig_class => 0x10,
|
||||
- validity => '!'),
|
||||
+ validity => $gnupg_version < version->parse('2.2.6') ? '!' : '?'),
|
||||
GnuPG::Signature->new(
|
||||
date => 953179891,
|
||||
algo_num => 17,
|
@ -1,64 +0,0 @@
|
||||
From b356e7fda15e39e037da1888a24000a96fc85c90 Mon Sep 17 00:00:00 2001
|
||||
From: Niko Tyni <ntyni@debian.org>
|
||||
Date: Sun, 24 Jun 2018 16:19:25 +0300
|
||||
Subject: [PATCH] Fix test suite for GnuPG >= 2.2.8 compatibility
|
||||
|
||||
GnuPG 2.2.8 onwards issues a hard failure when decrypting
|
||||
messages not using the MDC mode.
|
||||
|
||||
Bug-Debian: https://bugs.debian.org/900051
|
||||
---
|
||||
t/decrypt.t | 19 +++++++++++++++++--
|
||||
1 file changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/decrypt.t b/t/decrypt.t
|
||||
index ee41448..2d6740c 100644
|
||||
--- a/t/decrypt.t
|
||||
+++ b/t/decrypt.t
|
||||
@@ -6,6 +6,7 @@
|
||||
use strict;
|
||||
use English qw( -no_match_vars );
|
||||
use File::Compare;
|
||||
+use version;
|
||||
|
||||
use lib './t';
|
||||
use MyTest;
|
||||
@@ -13,6 +14,8 @@ use MyTestSpecific;
|
||||
|
||||
my $compare;
|
||||
|
||||
+my $gnupg_version = version->parse($gnupg->version);
|
||||
+
|
||||
TEST
|
||||
{
|
||||
reset_handles();
|
||||
@@ -26,7 +29,13 @@ TEST
|
||||
close $stdout;
|
||||
waitpid $pid, 0;
|
||||
|
||||
- return $CHILD_ERROR == 0;;
|
||||
+ if ($gnupg_version < version->parse('2.2.8')) {
|
||||
+ return $CHILD_ERROR == 0;;
|
||||
+ } else {
|
||||
+ local $/ = undef;
|
||||
+ my $errstr = <$stderr>;
|
||||
+ return (($CHILD_ERROR >> 8 == 2) and ($errstr =~ /ignore-mdc-error/));
|
||||
+ }
|
||||
};
|
||||
|
||||
|
||||
@@ -50,7 +59,13 @@ TEST
|
||||
|
||||
waitpid $pid, 0;
|
||||
|
||||
- return $CHILD_ERROR == 0;
|
||||
+ if ($gnupg_version < version->parse('2.2.8')) {
|
||||
+ return $CHILD_ERROR == 0;
|
||||
+ } else {
|
||||
+ local $/ = undef;
|
||||
+ my $errstr = <$stderr>;
|
||||
+ return (($CHILD_ERROR >> 8 == 2) and ($errstr =~ /ignore-mdc-error/));
|
||||
+ }
|
||||
};
|
||||
|
||||
|
@ -1,83 +0,0 @@
|
||||
From a67324b5622088422b0b0c1a403c594312452d16 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentfredric@gmail.com>
|
||||
Date: Sun, 4 Jun 2017 07:35:25 +1200
|
||||
Subject: [PATCH 1/3] t/001_require.t: Force a relative path load for require
|
||||
test
|
||||
|
||||
require_ok("Foo") is implemented in terms of require "Foo"
|
||||
|
||||
This means:
|
||||
|
||||
require "Foo.pm"
|
||||
|
||||
Only loads "Foo.pm" from "." if:
|
||||
|
||||
- '.' is in @INC ( Not true by default in Perl >5.25.11 )
|
||||
- Foo.pm is not installed in Perl5lib ( dangerous assumption )
|
||||
|
||||
This forces require to side-step @INC traversal by using an explicit
|
||||
prefix of "./", which is special-cased in require.
|
||||
|
||||
This fixes RT#120674
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=120674
|
||||
---
|
||||
t/001_require.t | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/001_require.t b/t/001_require.t
|
||||
index fe0d205..d70b2d2 100755
|
||||
--- a/t/001_require.t
|
||||
+++ b/t/001_require.t
|
||||
@@ -24,7 +24,7 @@ use File::Spec;
|
||||
use Test::More qw(no_plan);
|
||||
|
||||
# Set up @INC at runtime with an absolute path.
|
||||
-my $lib_path = File::Spec->catdir(dirname($0), "..", "lib");
|
||||
+my $lib_path = File::Spec->rel2abs(File::Spec->catdir(dirname($0), "..", "lib"));
|
||||
push(@INC, $lib_path);
|
||||
|
||||
require_ok 'Google::Ads::AdWords::Client';
|
||||
@@ -38,6 +38,6 @@ sub test_require {
|
||||
local $SIG{__WARN__} = sub {
|
||||
warn @_ unless $_[0] =~ /redefine/;
|
||||
};
|
||||
- require_ok($file_name);
|
||||
+ require_ok("./$file_name");
|
||||
}
|
||||
}
|
||||
--
|
||||
2.12.2
|
||||
|
||||
From 76f5a421585b8c85b7e39b91adb0b257d1d83665 Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentfredric@gmail.com>
|
||||
Date: Sun, 4 Jun 2017 07:40:01 +1200
|
||||
Subject: [PATCH 2/3] t/020_GenerateOfflineCredentials.t: Force relative path
|
||||
for script
|
||||
|
||||
require "some/path.pl" previously fell into worknig due to '.' being
|
||||
in @INC, as this still invokes @INC traversal
|
||||
|
||||
This change simply forces a "./" so that Perl uses direct access via
|
||||
a special-cased path instead of relying on @INC traversal, which becomes
|
||||
unsafe to depend on since Perl 5.25.11
|
||||
---
|
||||
t/020_GenerateOfflineCredentials.t | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/t/020_GenerateOfflineCredentials.t b/t/020_GenerateOfflineCredentials.t
|
||||
index 0dcde9d..dfa8b50 100755
|
||||
--- a/t/020_GenerateOfflineCredentials.t
|
||||
+++ b/t/020_GenerateOfflineCredentials.t
|
||||
@@ -51,7 +51,7 @@ my $stdout;
|
||||
open(STDOUT, ">", \$stdout);
|
||||
|
||||
# Calling the offline credentials code
|
||||
-require qw(examples/oauth/generate_offline_credentials.pl);
|
||||
+require qw(./examples/oauth/generate_offline_credentials.pl);
|
||||
ok(generate_offline_credentials($client));
|
||||
|
||||
# Checking the auth mock was correctly called
|
||||
--
|
||||
2.12.2
|
||||
|
@ -1,46 +0,0 @@
|
||||
From a7e92591ac0415fbb7119e4ad7572f910e4fdb8f Mon Sep 17 00:00:00 2001
|
||||
From: Kent Fredric <kentfredric@gmail.com>
|
||||
Date: Sun, 4 Jun 2017 07:43:59 +1200
|
||||
Subject: [PATCH 3/3] Fix unescaped "{" error in tests t/022* and t/024*
|
||||
|
||||
Perl 5.26 makes use of literal unescaped { in a regex illegal,
|
||||
and this leads to test failures.
|
||||
|
||||
This change simply quotes the offending characters to make tests pass.
|
||||
|
||||
This closes RT#118509
|
||||
|
||||
Bug: https://rt.cpan.org/Ticket/Display.html?id=118509
|
||||
---
|
||||
t/022_ReportUtils.t | 2 +-
|
||||
t/024_BatchJobHandler.t | 2 +-
|
||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/t/022_ReportUtils.t b/t/022_ReportUtils.t
|
||||
index 4f5f326..d0e2000 100755
|
||||
--- a/t/022_ReportUtils.t
|
||||
+++ b/t/022_ReportUtils.t
|
||||
@@ -57,7 +57,7 @@ my $report_as_string = $report_handler->get_as_string();
|
||||
ok(!$report_as_string, "report as string");
|
||||
ok($report_as_string->isa("Google::Ads::Common::ReportDownloadError"),
|
||||
"check report handler->report_as_string return type");
|
||||
-ok($report_as_string =~ /ReportDownloadError\s{[^}]+}/,
|
||||
+ok($report_as_string =~ /ReportDownloadError\s\{[^}]+}/,
|
||||
"check ReportDownloadError STRINGIFY");
|
||||
|
||||
my ($fh, $filename) = tempfile();
|
||||
diff --git a/t/024_BatchJobHandler.t b/t/024_BatchJobHandler.t
|
||||
index 15983ae..4b86703 100755
|
||||
--- a/t/024_BatchJobHandler.t
|
||||
+++ b/t/024_BatchJobHandler.t
|
||||
@@ -133,6 +133,6 @@ my $batch_job_handler_error =
|
||||
description => "test"
|
||||
});
|
||||
ok(!$batch_job_handler_error, "BOOLIFY on error false");
|
||||
-ok($batch_job_handler_error =~ /BatchJobHandlerError\s{[^}]+}/,
|
||||
+ok($batch_job_handler_error =~ /BatchJobHandlerError\s\{[^}]+}/,
|
||||
"check BatchJobHandlerError STRINGIFY");
|
||||
|
||||
--
|
||||
2.12.2
|
||||
|
@ -1,63 +0,0 @@
|
||||
From 88bc49e7a21da0131b10546aa07ebdf98d18a37e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Torsten=20Sch=C3=B6nfeld?= <kaffeetisch@gmx.de>
|
||||
Date: Sun, 6 Jan 2019 15:18:02 +0100
|
||||
Subject: [PATCH] Load GdkPixdata introspection data if gdk-pixbuf >= 2.38.0
|
||||
|
||||
In gdk-pixbuf 2.38.0, the GdkPixdata introspection data was split out into its
|
||||
own file.
|
||||
|
||||
Based on a patch by gregor herrmann <gregoa@debian.org>.
|
||||
|
||||
https://rt.cpan.org/Ticket/Display.html?id=127071
|
||||
---
|
||||
lib/Gtk3.pm | 14 ++++++++++++++
|
||||
perl-Gtk3.doap => perl-gtk3.doap | 0
|
||||
2 files changed, 14 insertions(+)
|
||||
rename perl-Gtk3.doap => perl-gtk3.doap (100%)
|
||||
|
||||
diff --git a/lib/Gtk3.pm b/lib/Gtk3.pm
|
||||
index 6a65487..f90af7e 100644
|
||||
--- a/lib/Gtk3.pm
|
||||
+++ b/lib/Gtk3.pm
|
||||
@@ -60,6 +60,7 @@ and Perl packages:
|
||||
Gtk-3.0 | Gtk3
|
||||
Gdk-3.0 | Gtk3::Gdk
|
||||
GdkPixbuf-2.0 | Gtk3::Gdk
|
||||
+ GdkPixdata-2.0| Gtk3::Gdk
|
||||
Pango-1.0 | Pango
|
||||
|
||||
=cut
|
||||
@@ -84,6 +85,10 @@ my $_GDK_PIXBUF_BASENAME = 'GdkPixbuf';
|
||||
my $_GDK_PIXBUF_VERSION = '2.0';
|
||||
my $_GDK_PIXBUF_PACKAGE = 'Gtk3::Gdk';
|
||||
|
||||
+my $_GDK_PIXDATA_BASENAME = 'GdkPixdata';
|
||||
+my $_GDK_PIXDATA_VERSION = '2.0';
|
||||
+my $_GDK_PIXDATA_PACKAGE = 'Gtk3::Gdk';
|
||||
+
|
||||
my $_PANGO_BASENAME = 'Pango';
|
||||
my $_PANGO_VERSION = '1.0';
|
||||
my $_PANGO_PACKAGE = 'Pango';
|
||||
@@ -471,6 +476,15 @@ sub import {
|
||||
package => $_GDK_PIXBUF_PACKAGE,
|
||||
flatten_array_ref_return_for => \@_GDK_PIXBUF_FLATTEN_ARRAY_REF_RETURN_FOR);
|
||||
|
||||
+ # In gdk-pixbuf 2.38.0, the GdkPixdata introspection information was split
|
||||
+ # out into its own file.
|
||||
+ if (Gtk3::Gdk::Pixbuf::CHECK_VERSION (2, 38, 0)) {
|
||||
+ Glib::Object::Introspection->setup (
|
||||
+ basename => $_GDK_PIXDATA_BASENAME,
|
||||
+ version => $_GDK_PIXDATA_VERSION,
|
||||
+ package => $_GDK_PIXDATA_PACKAGE);
|
||||
+ }
|
||||
+
|
||||
Glib::Object::Introspection->setup (
|
||||
basename => $_PANGO_BASENAME,
|
||||
version => $_PANGO_VERSION,
|
||||
diff --git a/perl-Gtk3.doap b/perl-gtk3.doap
|
||||
similarity index 100%
|
||||
rename from perl-Gtk3.doap
|
||||
rename to perl-gtk3.doap
|
||||
--
|
||||
2.18.1
|
||||
|
@ -1,16 +1,12 @@
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
EAPI=8
|
||||
|
||||
MODULE_AUTHOR=AJPEACOCK
|
||||
DIST_AUTHOR=AJPEACOCK
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="produces HTML tables"
|
||||
|
||||
LICENSE="|| ( Artistic GPL-2 )"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ia64 ~ppc ~ppc64 sparc x86"
|
||||
IUSE=""
|
||||
|
||||
SRC_TEST="do"
|
@ -1,20 +0,0 @@
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
|
||||
MODULE_AUTHOR=SDRABBLE
|
||||
MODULE_VERSION=0.13
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Parse the content of tables in HTML"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="dev-perl/HTML-Parser"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
SRC_TEST=do
|
||||
PATCHES=( "${FILESDIR}"/0.13-test.patch )
|
@ -0,0 +1,21 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DIST_AUTHOR=WYANT
|
||||
DIST_VERSION=0.305
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Do interesting things with the contents of tables"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~x86"
|
||||
|
||||
RDEPEND="
|
||||
virtual/perl-Carp
|
||||
dev-perl/HTML-Parser
|
||||
"
|
||||
BDEPEND="${RDEPEND}
|
||||
virtual/perl-ExtUtils-MakeMaker
|
||||
"
|
@ -1,2 +1,2 @@
|
||||
DIST HTML-TableContentParser-0.13.tar.gz 4664 BLAKE2B 062dc7ac6a78ec75f7d306649710ef470c6b6f750f651cc976d9f44fa40fbf247a89e0847ed8a991cecd929f3ea328bbee69c2cb29627f6d4fb0e23d3a3ab5c5 SHA512 0707a0059a7d885052615ee7badecc8915d5f8c67fd8683a226e23a0690f1872519475c32f51f299333c3208c20ea15380624fd0ebd1dc0b11457febfb3db585
|
||||
DIST HTML-TableContentParser-0.304.tar.gz 18437 BLAKE2B 404ba11f9174cd3db019ede6078fca246722ff9ce1d2108cd689cfa3f79aebb178853143faa45022e5785daae5e79d1f21ad519099508c5554828d54da84e369 SHA512 f5b8aee24f777a7e8d6b4a88ac6b88927b6ec51a6b14ff2f48a33248702349f2f3a446bda3679b7c510cf6c9390b6a635721c696be3b49165dc9ca89116b2202
|
||||
DIST HTML-TableContentParser-0.305.tar.gz 18931 BLAKE2B 616bfbb1809af1f0434fe3fb61082e635ba2cb62c1d14c47d059eb2c2dada80fa74ba577f85e9961036bf68f179ccc036410e2f3d67f497babbd3fe713bb6f2b SHA512 beee3b16e61b32e39bd7fdacbf993f18c1b11b6e0ba9704584243a629d72abed0012ee14518cd8c2490cb08a4c1323ee9b49ac2a764f37fa26c632a1d0ec2450
|
||||
|
@ -1,27 +0,0 @@
|
||||
# Copyright 1999-2020 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
DIST_AUTHOR=DJERIUS
|
||||
DIST_VERSION=0.42
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Extract data from an HTML table"
|
||||
|
||||
LICENSE="GPL-3+"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~arm64 x86"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
>=dev-perl/HTML-Parser-3.260.0
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
>=virtual/perl-ExtUtils-MakeMaker-6.590.0
|
||||
virtual/perl-CPAN-Meta
|
||||
test? (
|
||||
>=virtual/perl-Test-Simple-0.320.0
|
||||
)
|
||||
"
|
@ -1,2 +1 @@
|
||||
DIST HTML-TableParser-0.42.tar.gz 73638 BLAKE2B d422069322eada6e72a6742b32418b3c99dda824ebe98c10211b0cf0c4bf7133c6c7fe990148969c8e18cb01c2f2792ebc13ebfc04f8b5032ab48c4febfa6992 SHA512 dddde421a186ebd354c06201fdaa1379378b83acfc86fb0ed9a7959a993dd403c6d40d9aa36e143d1236c9d21ec56c851d82867783e4954f0eeba75ea8400d3d
|
||||
DIST HTML-TableParser-0.43.tar.gz 66079 BLAKE2B 5309e8b09fdff9b85b8612e4122a5732b2b85bf8e9382ba8656605d0b7faf4bc88e267226e3c7c4565637e370fa9a8526354d38e4296fa7d359004614275a91c SHA512 1f4fa5d5d91c830b6b0e53f6353af4a6016c08aeb572a9ab9d22f21d694b62cace6e745f6af3f96160b885ac2cd788331f0beb0a8777964fb80ff561c227dbf8
|
||||
|
@ -1,20 +0,0 @@
|
||||
# Copyright 1999-2014 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
|
||||
MODULE_AUTHOR=SAMTREGAR
|
||||
MODULE_VERSION=0.07
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="HTML::Template extension adding expression support"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND=">=dev-perl/HTML-Template-2.8
|
||||
dev-perl/Parse-RecDescent"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
SRC_TEST="do"
|
@ -0,0 +1,20 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DIST_AUTHOR=SAMTREGAR
|
||||
DIST_VERSION=0.07
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="HTML::Template extension adding expression support"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 x86"
|
||||
|
||||
RDEPEND="
|
||||
>=dev-perl/HTML-Template-2.800.0
|
||||
dev-perl/Parse-RecDescent
|
||||
"
|
||||
BDEPEND="${RDEPEND}
|
||||
"
|
@ -1,32 +1,33 @@
|
||||
# Copyright 1999-2019 Gentoo Authors
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
EAPI=8
|
||||
|
||||
DIST_AUTHOR=OALDERS
|
||||
DIST_VERSION=3.14
|
||||
DIST_VERSION=3.35
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Determine Web browser, version, and platform from an HTTP user agent string"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~hppa ~mips ppc x86"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
KEYWORDS="~amd64 ~hppa ~mips ~ppc ~x86"
|
||||
|
||||
RDEPEND=""
|
||||
DEPEND="
|
||||
>=dev-perl/Module-Build-0.280.0
|
||||
BDEPEND="${RDEPEND}
|
||||
virtual/perl-ExtUtils-MakeMaker
|
||||
test? (
|
||||
virtual/perl-JSON-PP
|
||||
virtual/perl-File-Spec
|
||||
dev-perl/Hash-Merge
|
||||
>=virtual/perl-JSON-PP-4.40.0
|
||||
>=virtual/perl-Scalar-List-Utils-1.490.0
|
||||
dev-perl/Path-Tiny
|
||||
dev-perl/Test-FailWarnings
|
||||
virtual/perl-Test-Simple
|
||||
dev-perl/Test-Most
|
||||
dev-perl/Test-Differences
|
||||
>=virtual/perl-Test-Simple-0.960.0
|
||||
dev-perl/Test-NoWarnings
|
||||
dev-perl/Test-Warnings
|
||||
)
|
||||
"
|
||||
|
||||
src_test() {
|
||||
perl_rm_files t/release-*.t
|
||||
perl-module_src_test
|
@ -1,2 +1,2 @@
|
||||
DIST HTTP-BrowserDetect-3.14.tar.gz 95445 BLAKE2B 08a90c6e1154f7a7e1c55af2c056e67ba906d187f3ac8b4e82f1039446462ea9a60f1f875e5f26a2229275436c0deb5acbf090f893aef51f7971ae8e0e547c62 SHA512 cf05af60dbda462df81a9d38d5738826b820534c5fde52f41a290f6d3253783154a2e460042117be32e86dd95f7f1e0e6055b4ca549cb7972cd3c156200c09df
|
||||
DIST HTTP-BrowserDetect-3.31.tar.gz 121365 BLAKE2B 454f702905b269cf579bf6d192542cb8e4d63430b7107c78b505db65973c759f79f78053cc45e14b8f7c152f4c53fd18b728f04c0a5d8e86393b1c2bcc4c6b9f SHA512 9ea830b244be7b5d0707118f27a212c520a2117679fab75192881c04d244cc50ae71ee6de2d2be7c456c2a0d5f2bfd0c9bf473893a86ba5b13db89a7d4943e8b
|
||||
DIST HTTP-BrowserDetect-3.35.tar.gz 122366 BLAKE2B 997962c232419cdbf3ca8a1675e50cbb18190e6f5013156a2da9de47ab939dec81c086a300cca62bd6854a5e9f439ec79a20c5f7fb35ef66f26d57cf68fea928 SHA512 adf2239bffcafc9ae250307173cc3900fca55a4b8860aaefab93090853e5a307902d15cdee459d28c444c4c096f511d1e3f65df51e2f77cee045cbe4a5fc9963
|
||||
|
@ -1,2 +1,2 @@
|
||||
DIST HTTP-CookieJar-0.008.tar.gz 28754 BLAKE2B 7e0b55506cb6c48fa8eb608224e7848c150addf64a39fa8c6abca5396152695b835cc872efff862e6045ca246bb2a9fb2a23830711d8c5d349de1a340546e4c1 SHA512 6e85c22084ba2959b385f4cd706b2b937fcdb68f219ee03ccdd69dd2a01ff34b72bf7f442e414e3da43199fc43624b781af0c7599f856dc580a5d0a7742c6aff
|
||||
DIST HTTP-CookieJar-0.010.tar.gz 27883 BLAKE2B 3f0bf8fcff066955d1350a420a02fb8388238addc9877fee36e6073d04d4382cb34889b0fc851c13da10c020647be64248399fd35309c0346f6995178b651c19 SHA512 5e7d6222b9128441c506f1554de327af9695cb07bb6db9a772386752a6815b7e8ff1d02185429f9cd25a11085860867d42f6e209175c68cbeb9daa6547d83eac
|
||||
DIST HTTP-CookieJar-0.012.tar.gz 28223 BLAKE2B 67284519bf19271896625ec577121171d6bb559a7c011f2a8f1e92be537077d1ec5bbd5f4ad043e44c754d5b2a3f2b617e37a87bfef3026533fd442fd9275613 SHA512 3b4b0cd2228d53dfa9c1a75cf108f9b2a328c3bf054f0c7d8308bc0a71375340684b165ab05cb7868cdbeb232e4ceb4b465177a43c7573863e9274f8aa4034af
|
||||
|
@ -1,31 +0,0 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
DIST_AUTHOR=OALDERS
|
||||
DIST_VERSION=6.04
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Storage of cookies"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
!<dev-perl/libwww-perl-6
|
||||
virtual/perl-Carp
|
||||
>=dev-perl/HTTP-Date-6.0.0
|
||||
virtual/perl-Time-Local
|
||||
>=dev-perl/HTTP-Message-6.0.0
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
virtual/perl-ExtUtils-MakeMaker
|
||||
test? (
|
||||
virtual/perl-Test
|
||||
virtual/perl-Test-Simple
|
||||
dev-perl/URI
|
||||
)
|
||||
"
|
@ -1,2 +1 @@
|
||||
DIST HTTP-Cookies-6.04.tar.gz 39502 BLAKE2B a6a5de4a992ee246dd0e04594fe47ce635248d7fb004acdd4eb926a84c27a7b69f0b8d5a522460287f1786f3d3f9d8bfd23c933ab7650e8cfaffaf392eecb94e SHA512 e8b24b96e6630f1238e828edfbf7074fb9186a391fd1d129fb65a82748a4cf7d71669fa658c31957560a6faac3e638c8dc7aa3182acaa6fd14f0d56f3968f5e4
|
||||
DIST HTTP-Cookies-6.10.tar.gz 42448 BLAKE2B ce261bde7071f34811827099322a0c7282c4f2287ce4baca258d8237dc82ffa5502acbe9ca2a4b76ebe6d8bd0c1facdad5448f1f377390e46c2f4564550bf57e SHA512 c24a986e524ebf5d8b13b4580c3ee6aed018e79c203fd62208bfe970744482832fe9c41bb3195a596af1e11058053ed7615a09a26fbcef4433e270f0f5d38658
|
||||
|
@ -1,23 +0,0 @@
|
||||
# Copyright 1999-2015 Gentoo Foundation
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
|
||||
MODULE_AUTHOR=COSIMO
|
||||
MODULE_VERSION=0.48
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="A WebDAV client library for Perl5"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ~ppc x86"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="
|
||||
dev-perl/libwww-perl
|
||||
dev-perl/URI
|
||||
dev-perl/XML-DOM
|
||||
"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
SRC_TEST="do"
|
@ -1,2 +1 @@
|
||||
DIST HTTP-DAV-0.48.tar.gz 105090 BLAKE2B e0a88e186ae26d3240783aeed91b3da786b1ad21e31f9293c361147c540bd513cfd1f570b9dabc77301c5310ca65128c1574cc342bd5512fcf7e6340c97eabf2 SHA512 2edf92791660b1996eb22b9ea68bd4e417c497afeebb56cb0a2ecf0cf72ea54b6fb8efd4d69dae1dcb946517f917593932a8040bd0ef5cfc83f7fdfd1fe3ccf8
|
||||
DIST HTTP-DAV-0.49.tar.gz 107841 BLAKE2B 202a37766a949441417e6e88de02dcb238f811408f16cc86ebb5187f0cd0c8b780e322b3704dbc115225232c1d815cbe9d5fdb8ac7755e222c7eac5357ea0a81 SHA512 01a097f47d95090fd0fd08a44b440d0ed4f2f04e0bedc41f8e2abedf1879e7cfcae6cf5cf7a415ac89dc610cf0cacf4f75078586bbf6a818f8c6dd36ccb451f6
|
||||
|
@ -1,36 +0,0 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
DIST_AUTHOR=OALDERS
|
||||
DIST_VERSION=6.06
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Base class for simple HTTP servers"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
||||
IUSE="test"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
!<dev-perl/libwww-perl-6
|
||||
virtual/perl-Carp
|
||||
>=dev-perl/HTTP-Date-6.0.0
|
||||
>=dev-perl/HTTP-Message-6.0.0
|
||||
virtual/perl-IO-Socket-IP
|
||||
>=dev-perl/LWP-MediaTypes-6.0.0
|
||||
virtual/perl-Socket
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
virtual/perl-ExtUtils-MakeMaker
|
||||
>=dev-perl/Module-Build-Tiny-0.34.0
|
||||
test? (
|
||||
virtual/perl-File-Spec
|
||||
virtual/perl-Module-Metadata
|
||||
virtual/perl-Test-Simple
|
||||
dev-perl/Test-Needs
|
||||
dev-perl/URI
|
||||
)
|
||||
"
|
@ -1,2 +1 @@
|
||||
DIST HTTP-Daemon-6.06.tar.gz 45576 BLAKE2B 3f5a5eaf8fd89422cad916cbe384ac45989147510d171d9496937e732fe83c8c5a5514d03c468415358a575326aa86fc78d8a135b8c7602560923511268fca67 SHA512 8e6dcf4451aaa6bd5f38508a087e5bb9b7f5105e8e243d09bdd3f4be3d7009222b3d9f8e494f049b48f0caebf36f239b8bbc7b8edc805f7d32b1bbeb38431732
|
||||
DIST HTTP-Daemon-6.12.tar.gz 47117 BLAKE2B 54b494ff3976af427c899b2db6f7b4dad27fbf441e4b821c5185537f6661e5e10cd6a52f2faf07ef5843dbbfe86b8c8c86abe478663553d16e9b1b4a19dd791d SHA512 83a8b868162dfa1be66d4267e99af1111d28122c793e89d905243c175617c22ceb66f88b6ea54c29e7b131c26668776ab24cf671c4cc6c1c8810505e0f072596
|
||||
|
@ -1,22 +0,0 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=5
|
||||
|
||||
MODULE_AUTHOR=GAAS
|
||||
MODULE_VERSION=6.02
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Date conversion for HTTP date formats"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~x64-cygwin ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
|
||||
IUSE=""
|
||||
|
||||
RDEPEND="
|
||||
!<dev-perl/libwww-perl-6
|
||||
virtual/perl-Time-Local
|
||||
"
|
||||
DEPEND="${RDEPEND}"
|
||||
|
||||
SRC_TEST=do
|
@ -1,2 +1 @@
|
||||
DIST HTTP-Date-6.02.tar.gz 7319 BLAKE2B c56c349c612d88b90324ec2379beadcd0238e448f83fb2bed7f758dc4fb3d234d4f4cf203c86f3260692ae7db1e1deaf22152c6d7fa9d34a2c835425d0d06d32 SHA512 056d2ff01482922a644757f04cb924d60fa15b86873fdea02e65c78c8af2bbf3f184495852b579eb4fc86bc44f8a5a52f785ab800cc554431ed3e2767e858232
|
||||
DIST HTTP-Date-6.05.tar.gz 29673 BLAKE2B 680af1a4ea45160c15a5d086275b5157a091c7816bf5def67c413690c97756946e24d436c50d664e2f8809cd4ac8054e24466d2ef4127b4b09bc681d6b19a404 SHA512 08a427a860161cd0d7a34a4fa3eb6bf6439c2504478a308ff560de0e6620c20df46f004cfcb719e3d19e35fdb650728d6983ffce1423f4d9da06f91d85c7b927
|
||||
|
@ -1,35 +0,0 @@
|
||||
# Copyright 1999-2020 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
DIST_AUTHOR=KAZEBURO
|
||||
DIST_VERSION=0.20
|
||||
DIST_EXAMPLES=( "eg/*" )
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="PSGI compliant HTTP Entity Parser"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha amd64 ~ia64 ppc ppc64 sparc x86"
|
||||
IUSE="test +xs"
|
||||
RESTRICT="!test? ( test )"
|
||||
|
||||
RDEPEND="
|
||||
virtual/perl-Encode
|
||||
virtual/perl-File-Temp
|
||||
dev-perl/HTTP-MultiPartParser
|
||||
dev-perl/Hash-MultiValue
|
||||
>=dev-perl/JSON-MaybeXS-1.3.7
|
||||
virtual/perl-Module-Load
|
||||
dev-perl/Stream-Buffered
|
||||
>=dev-perl/WWW-Form-UrlEncoded-0.230.0
|
||||
xs? ( >=dev-perl/WWW-Form-UrlEncoded-XS-0.230.0 )
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
>=dev-perl/Module-Build-Tiny-0.35.0
|
||||
test? (
|
||||
virtual/perl-File-Spec
|
||||
>=dev-perl/HTTP-Message-6
|
||||
>=virtual/perl-Test-Simple-0.980.0
|
||||
)
|
||||
"
|
@ -1,2 +1 @@
|
||||
DIST HTTP-Entity-Parser-0.20.tar.gz 23662 BLAKE2B d003bf695e32084b524a9e56327b5485ef2d8d4f608d55c776b960372165e2139cddd8a8db609c59f40ef84c979eb42c3af010fc36f3bd52945a6a88417396fc SHA512 c80d9058b8682c51a0fe3669249cc219142e674959237d8ae6bd435afafc16c92a38328329e9b09a25af8a79fec5bf01050145d3c63dd81b15ad9d75946fdfc6
|
||||
DIST HTTP-Entity-Parser-0.25.tar.gz 24307 BLAKE2B 6c8e7d6dfef9c023ea9e6270d12c0790711a03bfe783ae7be0550b83859d03ad94515981f3b87887d2174ca45b1d3cbbee427064f1377f28e0a7d09c2942de2c SHA512 760bff3ddd818ecb8eeeaee86c2d2bd895820b4011c306135b2d6eb3c2519322b3bd4e20098c9458c2fec7dd944384dcd33bfdd5b2d368a28270ac14e8dab54b
|
||||
|
Binary file not shown.
@ -1,2 +1 @@
|
||||
DIST WebService-MusicBrainz-1.0.4.tar.gz 9937 BLAKE2B f57dc8edf4649bd1ee69d105cb6a1e885f695065f319e2537e1aa24a44560d19b2a947b98c2ad4fde0a965b93b3b3a9a562e6f6f6139d5694599e246735556d0 SHA512 91442fe4696a4f9ac1434cc9dc8d3a16d2e3a8ccd3434f5e4ac642ffba0d56db6583175283c0a1a75365cdc65dbb4516bfa6182be568de16767fba3676f2368b
|
||||
DIST WebService-MusicBrainz-1.0.5.tar.gz 10029 BLAKE2B 52e9e09f4b0c68fb26391cbfca2ba092fece7ebd1ead2b09a243718da1876209a4c12e723fdaf5ea8a3c796ec65b10481aeddba6297ef40812f61fca935f743e SHA512 b1dfa497b460fb56702905518d3f2de0f5af0f4003be9ce983954673b0abc8a67215a77079a2989fca2c0228409788ff3f767302659003f544e6bbd56ab6df24
|
||||
|
@ -1,21 +0,0 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=6
|
||||
|
||||
DIST_AUTHOR=BFAIST
|
||||
DIST_VERSION=1.0.4
|
||||
inherit perl-module
|
||||
|
||||
DESCRIPTION="Web service API to MusicBrainz database"
|
||||
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 ppc ppc64 ~riscv x86"
|
||||
IUSE=""
|
||||
PATCHES=( "${FILESDIR}/1.0.2-no-network-testing.patch" )
|
||||
RDEPEND="
|
||||
>=dev-perl/Mojolicious-7.130.0
|
||||
"
|
||||
DEPEND="${RDEPEND}
|
||||
>=dev-perl/Module-Build-0.420.0
|
||||
"
|
Binary file not shown.
@ -1,2 +1,3 @@
|
||||
DIST async-timeout-3.0.1.tar.gz 9724 BLAKE2B f18ae75969b7048469fe22949f25ea25da3fdbf08b98a16b5d5ffe823060a75e6de9ed764727e08d4344c79426e9c89013d49522f20ed62e6fbe912b5c7a8787 SHA512 fd30842671a79edfd52c7350e7fb2120533a6d97b44975f7b071ce2cbde43443bd5bbe1f2ad0ad3ab2156e1987b9e58e0c149b0ecfea8674eb0cb78eee79c986
|
||||
DIST async-timeout-4.0.0.tar.gz 8258 BLAKE2B 7a3edee9491aba11e59ef6bf7c07b9e3f00e97bf42e69adac92a23d89715e2c90dbf9e431c146c20e44b05ed47905cfd5afa41fd04df63315d9f347a6b8f70f1 SHA512 92716106b42ad3746c9873649b44d414da08f75cd507a0dc45d764270bcbd6f483c149e5cebe1a4c36f5cd02397c21b67b92a0475117d9dea17c580e422cf4da
|
||||
DIST async-timeout-4.0.0a3.tar.gz 11386 BLAKE2B 8918878c4edd64c70d831ddd05e3235c3c7cc116a99755205b7624df52cacfb61bf4e80083c85d93e420fbf18e7da16ee3ebc796c5a4890e2801885b670a494a SHA512 04775ea30ffba90a4b604ef040df24a6a2711fd3e2c3b45d1ab87ae3487f216458f44bbfb2c85498bef286acca90af43d8b3b95cf22244027c0a48494ef84e7a
|
||||
|
@ -0,0 +1,36 @@
|
||||
# Copyright 1999-2021 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
PYTHON_COMPAT=( python3_{8..10} pypy3 )
|
||||
inherit distutils-r1
|
||||
|
||||
MY_P=${PN/_/-}-${PV}
|
||||
DESCRIPTION="Timeout context manager for asyncio programs"
|
||||
HOMEPAGE="https://github.com/aio-libs/async-timeout"
|
||||
SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${MY_P}.tar.gz"
|
||||
S=${WORKDIR}/${MY_P}
|
||||
|
||||
LICENSE="Apache-2.0"
|
||||
SLOT="0"
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~riscv ~sparc ~x86 ~x64-macos"
|
||||
|
||||
BDEPEND="
|
||||
dev-python/setuptools_scm[${PYTHON_USEDEP}]
|
||||
test? (
|
||||
dev-python/pytest-aiohttp[${PYTHON_USEDEP}]
|
||||
dev-python/pytest-asyncio[${PYTHON_USEDEP}]
|
||||
)"
|
||||
|
||||
distutils_enable_tests pytest
|
||||
|
||||
python_prepare_all() {
|
||||
# remove pointless dep on pytest-cov
|
||||
sed -i -e '/addopts/d' setup.cfg || die
|
||||
distutils-r1_python_prepare_all
|
||||
}
|
||||
|
||||
python_test() {
|
||||
epytest -p no:aiohttp
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue