diff --git a/doc/makepkg.8.txt b/doc/makepkg.8.txt index 3fbd4062..1c70a35d 100644 --- a/doc/makepkg.8.txt +++ b/doc/makepkg.8.txt @@ -81,10 +81,11 @@ Options *-g, \--geninteg*:: For each source file in the source array of PKGBUILD, download the file - if required and generate integrity checks. The integrity checks - generated are determined by the value of the INTEGRITY_CHECK array in - linkman:makepkg.conf[5]. This output can be redirected into your - PKGBUILD for source validation using "`makepkg -g >> PKGBUILD`". + if required and generate integrity checks. The integrity checks generated + are determined by the checks present in the PKGBUILD, falling back to the + value of the INTEGRITY_CHECK array in makepkg.conf(5) if these are absent + This output can be redirected into your PKGBUILD for source validation + using "`makepkg -g >> PKGBUILD`". *--skipinteg*:: Do not fail when the PKGBUILD does not contain any integrity checks, just diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 7e99062b..dbb1a1e7 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -497,6 +497,24 @@ download_sources() { popd &>/dev/null } +get_integlist() { + local integ + local integlist=() + + for integ in md5 sha1 sha256 sha384 sha512; do + local integrity_sums=($(eval echo "\${${integ}sums[@]}")) + if [[ -n "$integrity_sums" ]]; then + integlist=(${integlist[@]} $integ) + fi + done + + if (( ${#integlist[@]} > 0 )); then + echo ${integlist[@]} + else + echo ${INTEGRITY_CHECK[@]} + fi +} + generate_checksums() { msg "$(gettext "Generating checksums for source files...")" plain "" @@ -506,8 +524,15 @@ generate_checksums() { exit 1 # $E_MISSING_PROGRAM fi + local integlist + if (( $# == 0 )); then + integlist=$(get_integlist) + else + integlist=$@ + fi + local integ - for integ in ${INTEGRITY_CHECK[@]}; do + for integ in ${integlist[@]}; do integ="${integ,,}" case "$integ" in md5|sha1|sha256|sha384|sha512) : ;;