From: Que Quotion <quequotion@gmail.com> Drop-ins for finding executables Signed-off-by: Que Quotion <quequotion@gmail.com> --- scripts/Makefile.am | 10 ++ scripts/libmakepkg/buildenv.sh.in | 1 - scripts/libmakepkg/buildenv/buildflags.sh.in | 1 + scripts/libmakepkg/buildenv/compiler.sh.in | 19 +-- scripts/libmakepkg/buildenv/makeflags.sh.in | 1 + scripts/libmakepkg/executable.sh.in | 44 ++++++ scripts/libmakepkg/executable/ccache.sh.in | 37 +++++ scripts/libmakepkg/executable/checksum.sh.in | 43 +++++ scripts/libmakepkg/executable/distcc.sh.in | 37 +++++ scripts/libmakepkg/executable/fakeroot.sh.in | 37 +++++ scripts/libmakepkg/executable/gpg.sh.in | 38 +++++ scripts/libmakepkg/executable/gzip.sh.in | 37 +++++ scripts/libmakepkg/executable/meson.build | 25 +++ scripts/libmakepkg/executable/strip.sh.in | 37 +++++ scripts/libmakepkg/executable/sudo.sh.in | 36 +++++ scripts/libmakepkg/executable/vcs.sh.in | 107 +++++++++++++ scripts/libmakepkg/meson.build | 1 + scripts/makepkg.sh.in | 156 ------------------- 18 files changed, 497 insertions(+), 170 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/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 adced908..02188e9f 100644 --- a/scripts/Makefile.am +++ b/scripts/Makefile.am @@ -51,6 +51,16 @@ 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/strip.sh \ + libmakepkg/executable/sudo.sh \ + libmakepkg/executable/vcs.sh \ libmakepkg/buildenv.sh \ libmakepkg/buildenv/buildflags.sh \ libmakepkg/buildenv/compiler.sh \ diff --git a/scripts/libmakepkg/buildenv.sh.in b/scripts/libmakepkg/buildenv.sh.in index b49b24bf..c3442c42 100644 --- a/scripts/libmakepkg/buildenv.sh.in +++ b/scripts/libmakepkg/buildenv.sh.in @@ -25,7 +25,6 @@ LIBMAKEPKG_BUILDENV_SH=1 LIBRARY=${LIBRARY:-'@libmakepkgdir@'} source "$LIBRARY/util/message.sh" -source "$LIBRARY/util/option.sh" declare -a buildenv_functions diff --git a/scripts/libmakepkg/buildenv/buildflags.sh.in b/scripts/libmakepkg/buildenv/buildflags.sh.in index 4bdfd6a1..ac207fd3 100644 --- a/scripts/libmakepkg/buildenv/buildflags.sh.in +++ b/scripts/libmakepkg/buildenv/buildflags.sh.in @@ -25,6 +25,7 @@ LIBRARY=${LIBRARY:-'@libmakepkgdir@'} source "$LIBRARY/util/option.sh" +build_options+=('buildflags') buildenv_functions+=('buildenv_buildflags') buildenv_buildflags() { diff --git a/scripts/libmakepkg/buildenv/compiler.sh.in b/scripts/libmakepkg/buildenv/compiler.sh.in index 384b94da..38399269 100644 --- a/scripts/libmakepkg/buildenv/compiler.sh.in +++ b/scripts/libmakepkg/buildenv/compiler.sh.in @@ -1,6 +1,8 @@ #!/usr/bin/bash # -# ccache.sh - Cache compiliations and recycle them to save time on repititions +# compiler.sh - CCache and DistCC compilation +# ccache - Cache compiliations and recycle them to save time on repititions +# distcc - Distribute compliation to reduce compilation time # # Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> # @@ -18,25 +20,21 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # -[[ -n "$LIBMAKEPKG_BUILDENV_CCACHE_SH" ]] && return -LIBMAKEPKG_BUILDENV_CCACHE_SH=1 +[[ -n "$LIBMAKEPKG_BUILDENV_COMPILER_SH" ]] && return +LIBMAKEPKG_BUILDENV_COMPILER_SH=1 LIBRARY=${LIBRARY:-'@libmakepkgdir@'} source "$LIBRARY/util/message.sh" source "$LIBRARY/util/option.sh" +build_options+=('ccache' 'distcc') buildenv_functions+=('buildenv_ccache' 'buildenv_distcc') using_ccache=0 buildenv_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" - return 1 - fi - if [ -d /usr/lib/ccache/bin ]; then export PATH="/usr/lib/ccache/bin:$PATH" using_ccache=1 @@ -46,11 +44,6 @@ buildenv_ccache() { buildenv_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" - return 1 - fi - if (( using_ccache )); then export CCACHE_PREFIX="${CCACHE_PREFIX:+$CCACHE_PREFIX }distcc" export CCACHE_BASEDIR="$srcdir" diff --git a/scripts/libmakepkg/buildenv/makeflags.sh.in b/scripts/libmakepkg/buildenv/makeflags.sh.in index 2d4a44c6..45e77468 100644 --- a/scripts/libmakepkg/buildenv/makeflags.sh.in +++ b/scripts/libmakepkg/buildenv/makeflags.sh.in @@ -25,6 +25,7 @@ LIBRARY=${LIBRARY:-'@libmakepkgdir@'} source "$LIBRARY/util/option.sh" +build_options+=('makeflags') buildenv_functions+=('buildenv_makeflags') buildenv_makeflags() { diff --git a/scripts/libmakepkg/executable.sh.in b/scripts/libmakepkg/executable.sh.in new file mode 100644 index 00000000..06ed86e2 --- /dev/null +++ b/scripts/libmakepkg/executable.sh.in @@ -0,0 +1,44 @@ +#!/bin/bash +# +# executable.sh - functions for altering the build environment before +# compiliation +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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() { + msg "$(gettext "Checking for needed software...")" + + for func in ${executable_functions[@]}; do + $func + done +} diff --git a/scripts/libmakepkg/executable/ccache.sh.in b/scripts/libmakepkg/executable/ccache.sh.in new file mode 100644 index 00000000..f31a2014 --- /dev/null +++ b/scripts/libmakepkg/executable/ccache.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# ccache.sh - Cache compiliations and recycle them to save time on repititions +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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" + return 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..4ddb20a6 --- /dev/null +++ b/scripts/libmakepkg/executable/checksum.sh.in @@ -0,0 +1,43 @@ +#!/usr/bin/bash +# +# checksum.sh - Checksum operations +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -n "$LIBMAKEPKG_EXECUTABLE_CHECKSUM_SH" ]] && return +LIBMAKEPKG_EXECUTABLE_CHECKSUM_SH=1 + +LIBRARY=${LIBRARY:-'@libmakepkgdir@'} + +source "$LIBRARY/util/option.sh" + +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..e794d51a --- /dev/null +++ b/scripts/libmakepkg/executable/distcc.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# distcc.sh - Distribute compliation to reduce compilation time +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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" + return 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..7c03ebeb --- /dev/null +++ b/scripts/libmakepkg/executable/fakeroot.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# fakeroot.sh - Correct package file permissions +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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" + return 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..0c198473 --- /dev/null +++ b/scripts/libmakepkg/executable/gpg.sh.in @@ -0,0 +1,38 @@ +#!/usr/bin/bash +# +# gpg.sh - Package signing or source verification +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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"; } } || \ + { (( ! SKIPPGPCHECK )) && source_has_signatures }; then + if ! type -p gpg >/dev/null; then + error "$(gettext "Cannot find the %s binary required for signing packages.")" "gpg" + return 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..6d90369e --- /dev/null +++ b/scripts/libmakepkg/executable/gzip.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# gzip.sh - Compressig man and info pages +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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" + return 1 + fi + fi +} diff --git a/scripts/libmakepkg/executable/meson.build b/scripts/libmakepkg/executable/meson.build new file mode 100644 index 00000000..f6f86a4d --- /dev/null +++ b/scripts/libmakepkg/executable/meson.build @@ -0,0 +1,25 @@ +libmakepkg_module = 'executable' + +sources = [ + 'ccache.sh.in', + 'checksum.sh.in', + 'distcc.sh.in', + 'fakeroot.sh.in', + 'gpg.sh.in', + 'gzip.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/strip.sh.in b/scripts/libmakepkg/executable/strip.sh.in new file mode 100644 index 00000000..8d66c02a --- /dev/null +++ b/scripts/libmakepkg/executable/strip.sh.in @@ -0,0 +1,37 @@ +#!/usr/bin/bash +# +# strip.sh - Strip symbols from binaries/libraries +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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" + return 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..04807604 --- /dev/null +++ b/scripts/libmakepkg/executable/sudo.sh.in @@ -0,0 +1,36 @@ +#!/usr/bin/bash +# +# sudo.sh - Check for sudo if we will need it during makepkg execution +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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..966c3680 --- /dev/null +++ b/scripts/libmakepkg/executable/vcs.sh.in @@ -0,0 +1,107 @@ +#!/usr/bin/bash +# +# vcs.sh - Tools to download vcs sources +# +# Copyright (c) 2018 Pacman Development Team <pacman-dev@archlinux.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# 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 <http://www.gnu.org/licenses/>. +# + +[[ -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 + + if (( SOURCEONLY == 1 )); then + # we will not download VCS sources + return 0 + fi + + if [[ -z $PACMAN_PATH ]]; then + warning "$(gettext "Cannot find the %s binary needed to check VCS source requirements.")" "$PACMAN" + return 0 + 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%%+*}" + return 1 + fi + fi + fi + ;; + *) + # non VCS source + ;; + esac + done +} + +executable_vcs() { + if ! check_vcs_software; then + return 1 + fi +} diff --git a/scripts/libmakepkg/meson.build b/scripts/libmakepkg/meson.build index 3a487f0d..bfba56a5 100644 --- a/scripts/libmakepkg/meson.build +++ b/scripts/libmakepkg/meson.build @@ -1,5 +1,6 @@ libmakepkg_modules = [ { 'name' : 'buildenv', 'has_subdir' : true }, + { '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 8ce006fb..4449ccf7 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -855,162 +855,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 - - # 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) -- 2.19.1