From 0bb04fa16a82db133dd010478c1256bc8500c5e7 Mon Sep 17 00:00:00 2001 From: Que Quotion Date: Tue, 27 Nov 2018 18:23:00 +0900 Subject: Split check_software() to libmakepkg This opens the door for third parties who provide extensions to libmakepkg to supply scripts that confirm the presence of their dependant executables. Signed-off-by: Que Quotion Signed-off-by: Allan McRae --- scripts/Makefile.am | 12 ++ scripts/libmakepkg/executable.sh.in | 45 +++++++ scripts/libmakepkg/executable/ccache.sh.in | 37 ++++++ scripts/libmakepkg/executable/checksum.sh.in | 42 +++++++ scripts/libmakepkg/executable/distcc.sh.in | 37 ++++++ scripts/libmakepkg/executable/fakeroot.sh.in | 37 ++++++ scripts/libmakepkg/executable/gpg.sh.in | 44 +++++++ scripts/libmakepkg/executable/gzip.sh.in | 37 ++++++ scripts/libmakepkg/executable/meson.build | 26 ++++ scripts/libmakepkg/executable/pacman.sh.in | 37 ++++++ scripts/libmakepkg/executable/strip.sh.in | 37 ++++++ scripts/libmakepkg/executable/sudo.sh.in | 36 ++++++ scripts/libmakepkg/executable/vcs.sh.in | 109 +++++++++++++++++ scripts/libmakepkg/meson.build | 1 + scripts/makepkg.sh.in | 172 --------------------------- 15 files changed, 537 insertions(+), 172 deletions(-) create mode 100644 scripts/libmakepkg/executable.sh.in create mode 100644 scripts/libmakepkg/executable/ccache.sh.in create mode 100644 scripts/libmakepkg/executable/checksum.sh.in create mode 100644 scripts/libmakepkg/executable/distcc.sh.in create mode 100644 scripts/libmakepkg/executable/fakeroot.sh.in create mode 100644 scripts/libmakepkg/executable/gpg.sh.in create mode 100644 scripts/libmakepkg/executable/gzip.sh.in create mode 100644 scripts/libmakepkg/executable/meson.build create mode 100644 scripts/libmakepkg/executable/pacman.sh.in create mode 100644 scripts/libmakepkg/executable/strip.sh.in create mode 100644 scripts/libmakepkg/executable/sudo.sh.in create mode 100644 scripts/libmakepkg/executable/vcs.sh.in diff --git a/scripts/Makefile.am b/scripts/Makefile.am index 26c2e10d..b4c53953 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -40,6 +40,7 @@ LIBRARY = \ libmakepkgdir = $(datarootdir)/makepkg LIBMAKEPKGDIRS = \ + executable \ integrity \ lint_config \ lint_package \ @@ -49,6 +50,17 @@ LIBMAKEPKGDIRS = \ util LIBMAKEPKG_IN = \ + libmakepkg/executable.sh \ + libmakepkg/executable/ccache.sh \ + libmakepkg/executable/checksum.sh \ + libmakepkg/executable/distcc.sh \ + libmakepkg/executable/fakeroot.sh \ + libmakepkg/executable/gpg.sh \ + libmakepkg/executable/gzip.sh \ + libmakepkg/executable/pacman.sh \ + libmakepkg/executable/strip.sh \ + libmakepkg/executable/sudo.sh \ + libmakepkg/executable/vcs.sh \ libmakepkg/integrity.sh \ libmakepkg/integrity/generate_checksum.sh \ libmakepkg/integrity/generate_signature.sh \ diff --git a/scripts/libmakepkg/executable.sh.in b/scripts/libmakepkg/executable.sh.in new file mode 100644 index 00000000..68c48038 --- /dev/null +++ b/scripts/libmakepkg/executable.sh.in @@ -0,0 +1,45 @@ +#!/bin/bash +# +# executable.sh - confirm presence of dependent executables +# +# Copyright (c) 2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/message.sh" + + +declare -a executable_functions + +for lib in "$LIBRARY/executable/"*.sh; do + source "$lib" +done + +readonly -a executable_functions + +check_software() { + local ret=0 + + for func in ${executable_functions[@]}; do + $func + done + + return $ret +} diff --git a/scripts/libmakepkg/executable/ccache.sh.in b/scripts/libmakepkg/executable/ccache.sh.in new file mode 100644 index 00000000..dafde076 --- /dev/null +++ b/scripts/libmakepkg/executable/ccache.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# ccache.sh - Confirm presence of ccache binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_CCACHE_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_CCACHE_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_ccache') + +executable_ccache() { + if check_buildoption "ccache" "y"; then + if ! type -p ccache >/dev/null; then + error "$(gettext "Cannot find the %s binary required for compiler cache usage.")" "ccache" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/checksum.sh.in b/scripts/libmakepkg/executable/checksum.sh.in new file mode 100644 index 00000000..9783d4ee --- /dev/null +++ b/scripts/libmakepkg/executable/checksum.sh.in @@ -0,0 +1,42 @@ +#!/usr/bin/bash +# +# checksum.sh - Confirm presence of binaries for checksum operations +# +# Copyright (c) 2016-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_CHECKSUM_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_CHECKSUM_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + + +executable_functions+=('executable_checksum') + +executable_checksum() { + if (( GENINTEG || ! SKIPCHECKSUMS )); then + local integlist + IFS=$'\n' read -rd '' -a integlist < <(get_integlist) + + local integ + for integ in "${integlist[@]}"; do + if ! type -p "${integ}sum" >/dev/null; then + error "$(gettext "Cannot find the %s binary required for source file checksums operations.")" "${integ}sum" + return 1 + fi + done + fi +} diff --git a/scripts/libmakepkg/executable/distcc.sh.in b/scripts/libmakepkg/executable/distcc.sh.in new file mode 100644 index 00000000..b9883f6b --- /dev/null +++ b/scripts/libmakepkg/executable/distcc.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# distcc.sh - Confirm presence of distcc binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_DISTCC_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_DISTCC_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_distcc') + +executable_distcc() { + if check_buildoption "distcc" "y"; then + if ! type -p distcc >/dev/null; then + error "$(gettext "Cannot find the %s binary required for distributed compilation.")" "distcc" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/fakeroot.sh.in b/scripts/libmakepkg/executable/fakeroot.sh.in new file mode 100644 index 00000000..e22d9a96 --- /dev/null +++ b/scripts/libmakepkg/executable/fakeroot.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# fakeroot.sh - Confirm presence of fakeroot binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_FAKEROOT_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_FAKEROOT_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_fakeroot') + +executable_fakeroot() { + if check_buildenv "fakeroot" "y" && (( EUID > 0 )); then + if ! type -p fakeroot >/dev/null; then + error "$(gettext "Cannot find the %s binary.")" "fakeroot" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/gpg.sh.in b/scripts/libmakepkg/executable/gpg.sh.in new file mode 100644 index 00000000..c0f57013 --- /dev/null +++ b/scripts/libmakepkg/executable/gpg.sh.in @@ -0,0 +1,44 @@ +#!/usr/bin/bash +# +# gpg.sh - Confirm presence of gpg binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_GPG_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_GPG_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_gpg') + +executable_gpg() { + if [[ $SIGNPKG == 'y' ]] || { [[ -z $SIGNPKG ]] && check_buildenv "sign" "y"; }; then + if ! type -p gpg >/dev/null; then + error "$(gettext "Cannot find the %s binary required for signing packages.")" "gpg" + ret=1 + fi + fi + + if (( ! SKIPPGPCHECK )) && source_has_signatures; then + if ! type -p gpg >/dev/null; then + error "$(gettext "Cannot find the %s binary required for verifying source files.")" "gpg" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/gzip.sh.in b/scripts/libmakepkg/executable/gzip.sh.in new file mode 100644 index 00000000..66748320 --- /dev/null +++ b/scripts/libmakepkg/executable/gzip.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# gzip.sh - Confirm presence of gzip binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_GZIP_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_GZIP_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_gzip') + +executable_gzip() { + if check_option "zipman" "y"; then + if ! type -p gzip >/dev/null; then + error "$(gettext "Cannot find the %s binary required for compressing man and info pages.")" "gzip" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/meson.build b/scripts/libmakepkg/executable/meson.build new file mode 100644 index 00000000..8536a540 --- /dev/null +++ b/scripts/libmakepkg/executable/meson.build @@ -0,0 +1,26 @@ +libmakepkg_module = 'executable' + +sources = [ + 'ccache.sh.in', + 'checksum.sh.in', + 'distcc.sh.in', + 'fakeroot.sh.in', + 'gpg.sh.in', + 'gzip.sh.in', + 'pacman.sh.in', + 'strip.sh.in', + 'sudo.sh.in', + 'vcs.sh.in', +] + +foreach src : sources + output_dir = join_paths(get_option('datadir'), 'makepkg', libmakepkg_module) + + custom_target( + libmakepkg_module + '_' + src.underscorify(), + command : [ SCRIPT_EDITOR, '@INPUT@', '@OUTPUT@' ], + input : src, + output : '@BASENAME@', + install : true, + install_dir : output_dir) +endforeach diff --git a/scripts/libmakepkg/executable/pacman.sh.in b/scripts/libmakepkg/executable/pacman.sh.in new file mode 100644 index 00000000..d9967f45 --- /dev/null +++ b/scripts/libmakepkg/executable/pacman.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# pacman.sh - Confirm presence of pacman binary +# +# Copyright (c) 2012-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_PACMAN_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_PACMAN_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_pacman') + +executable_pacman() { + if (( ! NODEPS || DEP_BIN || RMDEPS || INSTALL )); then + if [[ -z $PACMAN_PATH ]]; then + error "$(gettext "Cannot find the %s binary required for dependency operations.")" "$PACMAN" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/strip.sh.in b/scripts/libmakepkg/executable/strip.sh.in new file mode 100644 index 00000000..a6b81db6 --- /dev/null +++ b/scripts/libmakepkg/executable/strip.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# strip.sh - Confirm presense of strip binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_STRIP_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_STRIP_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_strip') + +executable_strip() { + if check_option "strip" "y"; then + if ! type -p strip >/dev/null; then + error "$(gettext "Cannot find the %s binary required for object file stripping.")" "strip" + ret=1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/sudo.sh.in b/scripts/libmakepkg/executable/sudo.sh.in new file mode 100644 index 00000000..7ec18ec5 --- /dev/null +++ b/scripts/libmakepkg/executable/sudo.sh.in @@ -0,0 +1,36 @@ +#!/usr/bin/bash +# +# sudo.sh - Confirm presence of sudo binary +# +# Copyright (c) 2011-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_SUDO_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_SUDO_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_sudo') + +executable_sudo() { + if (( DEP_BIN || RMDEPS || INSTALL )); then + if ! type -p sudo >/dev/null; then + warning "$(gettext "Cannot find the %s binary. Will use %s to acquire root privileges.")" "sudo" "su" + fi + fi +} diff --git a/scripts/libmakepkg/executable/vcs.sh.in b/scripts/libmakepkg/executable/vcs.sh.in new file mode 100644 index 00000000..527d6f22 --- /dev/null +++ b/scripts/libmakepkg/executable/vcs.sh.in @@ -0,0 +1,109 @@ +#!/usr/bin/bash +# +# vcs.sh - Confirm presence of binaries for VCS operations +# +# Copyright (c) 2014-2018 Pacman Development Team +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_VCS_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_VCS_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +executable_functions+=('executable_vcs') + +get_vcsclient() { + local proto=${1%%+*} + + local i + for i in "${VCSCLIENTS[@]}"; do + local handler="${i%%::*}" + if [[ $proto = "$handler" ]]; then + local client="${i##*::}" + break + fi + done + + # if we didn't find an client, return an error + if [[ -z $client ]]; then + error "$(gettext "Unknown download protocol: %s")" "$proto" + plain "$(gettext "Aborting...")" + exit $E_CONFIG_ERROR + fi + + printf "%s\n" "$client" +} + +check_vcs_software() { + local netfile all_sources all_deps deps ret=0 + + if (( SOURCEONLY == 1 )); then + # we will not download VCS sources + return $ret + fi + + if [[ -z $PACMAN_PATH ]]; then + warning "$(gettext "Cannot find the %s binary needed to check VCS source requirements.")" "$PACMAN" + return $ret + fi + + # we currently only use global depends/makedepends arrays for --syncdeps + for attr in depends makedepends; do + get_pkgbuild_attribute "$pkg" "$attr" 1 'deps' + all_deps+=("${deps[@]}") + + get_pkgbuild_attribute "$pkg" "${attr}_$CARCH" 1 'deps' + all_deps+=("${deps[@]}") + done + + get_all_sources_for_arch 'all_sources' + for netfile in ${all_sources[@]}; do + local proto=$(get_protocol "$netfile") + + case $proto in + bzr*|git*|hg*|svn*) + if ! type -p ${proto%%+*} > /dev/null; then + local client + client=$(get_vcsclient "$proto") || exit $? + # ensure specified program is installed + local uninstalled + uninstalled=$(check_deps "$client") || exit $E_INSTALL_DEPS_FAILED + # if not installed, check presence in depends or makedepends + if [[ -n "$uninstalled" ]] && (( ! NODEPS || ( VERIFYSOURCE && !DEP_BIN ) )); then + if ! in_array "$client" ${all_deps[@]}; then + error "$(gettext "Cannot find the %s package needed to handle %s sources.")" \ + "$client" "${proto%%+*}" + ret=1 + fi + fi + fi + ;; + *) + # non VCS source + ;; + esac + done + + return $ret +} + +executable_vcs() { + if ! check_vcs_software; then + ret=1 + fi +} diff --git a/scripts/libmakepkg/meson.build b/scripts/libmakepkg/meson.build index 07475b4d..872e61ca 100644 --- a/scripts/libmakepkg/meson.build +++ b/scripts/libmakepkg/meson.build @@ -1,4 +1,5 @@ libmakepkg_modules = [ + { 'name' : 'executable', 'has_subdir' : true }, { 'name' : 'integrity', 'has_subdir' : true }, { 'name' : 'lint_config', 'has_subdir' : true }, { 'name' : 'lint_package', 'has_subdir' : true }, diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 9365801c..d92e4aac 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -897,178 +897,6 @@ install_package() { fi } -get_vcsclient() { - local proto=${1%%+*} - - local i - for i in "${VCSCLIENTS[@]}"; do - local handler="${i%%::*}" - if [[ $proto = "$handler" ]]; then - local client="${i##*::}" - break - fi - done - - # if we didn't find an client, return an error - if [[ -z $client ]]; then - error "$(gettext "Unknown download protocol: %s")" "$proto" - plain "$(gettext "Aborting...")" - exit $E_CONFIG_ERROR - fi - - printf "%s\n" "$client" -} - -check_vcs_software() { - local netfile all_sources all_deps deps ret=0 - - if (( SOURCEONLY == 1 )); then - # we will not download VCS sources - return $ret - fi - - if [[ -z $PACMAN_PATH ]]; then - warning "$(gettext "Cannot find the %s binary needed to check VCS source requirements.")" "$PACMAN" - return $ret - fi - - # we currently only use global depends/makedepends arrays for --syncdeps - for attr in depends makedepends; do - get_pkgbuild_attribute "$pkg" "$attr" 1 'deps' - all_deps+=("${deps[@]}") - - get_pkgbuild_attribute "$pkg" "${attr}_$CARCH" 1 'deps' - all_deps+=("${deps[@]}") - done - - get_all_sources_for_arch 'all_sources' - for netfile in ${all_sources[@]}; do - local proto=$(get_protocol "$netfile") - - case $proto in - bzr*|git*|hg*|svn*) - if ! type -p ${proto%%+*} > /dev/null; then - local client - client=$(get_vcsclient "$proto") || exit $? - # ensure specified program is installed - local uninstalled - uninstalled=$(check_deps "$client") || exit $E_INSTALL_DEPS_FAILED - # if not installed, check presence in depends or makedepends - if [[ -n "$uninstalled" ]] && (( ! NODEPS || ( VERIFYSOURCE && !DEP_BIN ) )); then - if ! in_array "$client" ${all_deps[@]}; then - error "$(gettext "Cannot find the %s package needed to handle %s sources.")" \ - "$client" "${proto%%+*}" - ret=1 - fi - fi - fi - ;; - *) - # non VCS source - ;; - esac - done - - return $ret -} - -check_software() { - # check for needed software - local ret=0 - - # check for PACMAN if we need it - if (( ! NODEPS || DEP_BIN || RMDEPS || INSTALL )); then - if [[ -z $PACMAN_PATH ]]; then - error "$(gettext "Cannot find the %s binary required for dependency operations.")" "$PACMAN" - ret=1 - fi - fi - - # check for sudo if we will need it during makepkg execution - if (( DEP_BIN || RMDEPS || INSTALL )); then - if ! type -p sudo >/dev/null; then - warning "$(gettext "Cannot find the %s binary. Will use %s to acquire root privileges.")" "sudo" "su" - fi - fi - - # fakeroot - correct package file permissions - if check_buildenv "fakeroot" "y" && (( EUID > 0 )); then - if ! type -p fakeroot >/dev/null; then - error "$(gettext "Cannot find the %s binary.")" "fakeroot" - ret=1 - fi - fi - - # gpg - package signing - if [[ $SIGNPKG == 'y' ]] || { [[ -z $SIGNPKG ]] && check_buildenv "sign" "y"; }; then - if ! type -p gpg >/dev/null; then - error "$(gettext "Cannot find the %s binary required for signing packages.")" "gpg" - ret=1 - fi - fi - - # gpg - source verification - if (( ! SKIPPGPCHECK )) && source_has_signatures; then - if ! type -p gpg >/dev/null; then - error "$(gettext "Cannot find the %s binary required for verifying source files.")" "gpg" - ret=1 - fi - fi - - # checksum operations - if (( GENINTEG || ! SKIPCHECKSUMS )); then - local integlist - IFS=$'\n' read -rd '' -a integlist < <(get_integlist) - - local integ - for integ in "${integlist[@]}"; do - if ! type -p "${integ}sum" >/dev/null; then - error "$(gettext "Cannot find the %s binary required for source file checksums operations.")" "${integ}sum" - ret=1 - fi - done - fi - - # distcc - compilation with distcc - if check_buildoption "distcc" "y"; then - if ! type -p distcc >/dev/null; then - error "$(gettext "Cannot find the %s binary required for distributed compilation.")" "distcc" - ret=1 - fi - fi - - # ccache - compilation with ccache - if check_buildoption "ccache" "y"; then - if ! type -p ccache >/dev/null; then - error "$(gettext "Cannot find the %s binary required for compiler cache usage.")" "ccache" - ret=1 - fi - fi - - # strip - strip symbols from binaries/libraries - if check_option "strip" "y"; then - if ! type -p strip >/dev/null; then - error "$(gettext "Cannot find the %s binary required for object file stripping.")" "strip" - ret=1 - fi - fi - - # gzip - compressig man and info pages - if check_option "zipman" "y"; then - if ! type -p gzip >/dev/null; then - error "$(gettext "Cannot find the %s binary required for compressing man and info pages.")" "gzip" - ret=1 - fi - fi - - # tools to download vcs sources - if ! check_vcs_software; then - ret=1 - fi - - return $ret -} - check_build_status() { if (( ! SPLITPKG )); then fullver=$(get_full_version) -- cgit v1.2.3-54-g00ecf