Blame sel-hashes.awk

Packit 13e0ca
# Expand a list of selected hashes to a list of enabled hashes, using
Packit 13e0ca
# the information in hashes.lst.
Packit 13e0ca
#
Packit 13e0ca
#   Copyright 2018 Zack Weinberg
Packit 13e0ca
#
Packit 13e0ca
#   This library is free software; you can redistribute it and/or
Packit 13e0ca
#    modify it under the terms of the GNU Lesser General Public License
Packit 13e0ca
#   as published by the Free Software Foundation; either version 2.1 of
Packit 13e0ca
#   the License, or (at your option) any later version.
Packit 13e0ca
#
Packit 13e0ca
#   This library is distributed in the hope that it will be useful,
Packit 13e0ca
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 13e0ca
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 13e0ca
#   GNU Lesser General Public License for more details.
Packit 13e0ca
#
Packit 13e0ca
#   You should have received a copy of the GNU Lesser General Public
Packit 13e0ca
#   License along with this library; if not, see
Packit 13e0ca
#   <https://www.gnu.org/licenses/>.
Packit 13e0ca
Packit 13e0ca
BEGIN {
Packit 13e0ca
    enable_all      = 0
Packit 13e0ca
    enable_strong   = 0
Packit 13e0ca
    enable_glibc    = 0
Packit 13e0ca
    enable_freebsd  = 0
Packit 13e0ca
    enable_netbsd   = 0
Packit 13e0ca
    enable_openbsd  = 0
Packit 13e0ca
    enable_osx      = 0
Packit 13e0ca
    enable_solaris  = 0
Packit 13e0ca
    error = 0
Packit 13e0ca
    split(SELECTED_HASHES, selected_hashes_list, ",")
Packit 13e0ca
    for (i in selected_hashes_list) {
Packit 13e0ca
        h = selected_hashes_list[i]
Packit 13e0ca
        if (h == "all") {
Packit 13e0ca
            enable_all = 1
Packit 13e0ca
        } else if (h == "strong") {
Packit 13e0ca
            enable_strong = 1
Packit 13e0ca
        } else if (h == "glibc") {
Packit 13e0ca
            enable_glibc = 1
Packit 13e0ca
        } else if (h == "freebsd") {
Packit 13e0ca
            enable_freebsd = 1
Packit 13e0ca
        } else if (h == "netbsd") {
Packit 13e0ca
            enable_netbsd = 1
Packit 13e0ca
        } else if (h == "openbsd") {
Packit 13e0ca
            enable_openbsd = 1
Packit 13e0ca
        } else if (h == "osx") {
Packit 13e0ca
            enable_osx = 1
Packit 13e0ca
        } else if (h == "solaris") {
Packit 13e0ca
            enable_solaris = 1
Packit 13e0ca
        } else {
Packit 13e0ca
            enable_some = 1
Packit 13e0ca
            selected_hashes[h] = 1
Packit 13e0ca
        }
Packit 13e0ca
    }
Packit 13e0ca
    if (enable_all && (enable_strong  || enable_glibc  || enable_some    || \
Packit 13e0ca
                       enable_freebsd || enable_netbsd || enable_openbsd || \
Packit 13e0ca
                       enable_osx     || enable_solaris)) {
Packit 13e0ca
        error = 1
Packit 13e0ca
        exit 1
Packit 13e0ca
    }
Packit 13e0ca
}
Packit 13e0ca
Packit 13e0ca
/^#/ {
Packit 13e0ca
    next
Packit 13e0ca
}
Packit 13e0ca
Packit 13e0ca
{
Packit 13e0ca
    if (enable_all || $1 in selected_hashes) {
Packit 13e0ca
        enabled_hashes[$1] = 1
Packit 13e0ca
    } else {
Packit 13e0ca
        enabled_hashes[$1] = 0
Packit 13e0ca
Packit 13e0ca
        split($5, flags, ",")
Packit 13e0ca
        for (i in flags) {
Packit 13e0ca
            flag = flags[i]
Packit 13e0ca
            if (flag == "STRONG" && enable_strong) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "GLIBC" && enable_glibc) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "FREEBSD" && enable_freebsd) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "NETBSD" && enable_netbsd) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "OPENBSD" && enable_openbsd) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "OSX" && enable_osx) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            } else if (flag == "SOLARIS" && enable_solaris) {
Packit 13e0ca
                enabled_hashes[$1] = 1
Packit 13e0ca
            }
Packit 13e0ca
        }
Packit 13e0ca
    }
Packit 13e0ca
}
Packit 13e0ca
Packit 13e0ca
Packit 13e0ca
END {
Packit 13e0ca
    if (error) {
Packit 13e0ca
        exit 1
Packit 13e0ca
    }
Packit 13e0ca
Packit 13e0ca
    # Check for individual selected hashes that didn't appear in
Packit 13e0ca
    # hashes.lst.
Packit 13e0ca
    for (h in selected_hashes) {
Packit 13e0ca
        if (!(h in enabled_hashes)) {
Packit 13e0ca
            exit 1
Packit 13e0ca
        }
Packit 13e0ca
    }
Packit 13e0ca
Packit 13e0ca
    enabled_hash_list = ","
Packit 13e0ca
    for (i in enabled_hashes) {
Packit 13e0ca
        if (enabled_hashes[i]) {
Packit 13e0ca
            enabled_hash_list = enabled_hash_list i ","
Packit 13e0ca
        }
Packit 13e0ca
    }
Packit 13e0ca
    print enabled_hash_list
Packit 13e0ca
}