diff options
author | P. J. McDermott <pj@pehjota.net> | 2015-12-07 12:07:15 (EST) |
---|---|---|
committer | P. J. McDermott <pj@pehjota.net> | 2015-12-07 12:07:15 (EST) |
commit | 34a77f7822126263fed5c72aedaa65b58fee94ac (patch) | |
tree | a3404e611672f64126298e2f0f6d3398b014851e /lib/deps.sh | |
parent | 84f3cccfb57fc8270b2ae14f0adf2c2ff24cc69b (diff) | |
parent | 41f638c961d5c7832e2b18a9f2e45a09b54dc53e (diff) |
Merge branch 'feature/use-shld'
Diffstat (limited to 'lib/deps.sh')
-rw-r--r-- | lib/deps.sh | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/lib/deps.sh b/lib/deps.sh deleted file mode 100644 index 7800cad..0000000 --- a/lib/deps.sh +++ /dev/null @@ -1,161 +0,0 @@ -# Functions for parsing dependency field values -# -# Copyright (C) 2012, 2014 Patrick "P. J." McDermott -# -# This file is part of the ProteanOS Development Kit. -# -# The ProteanOS Development Kit 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 3 of the -# License, or (at your option) any later version. -# -# The ProteanOS Development Kit 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 the ProteanOS Development Kit. If not, see -# <http://www.gnu.org/licenses/>. - -[ "x${_DEPS_SM+set}" = 'xset' ] && return 0 -_DEPS_SM=1 - -use archplat - -parse_dep() -{ - local dep="${1}" - local host_arch="${2}" - local host_plat="${3}" - local pkgarchqual= - local pkg= - local archqual= - local relver= - local rel= - local ver= - local arches= - local plats= - - dep="$(printf '%s\n' "${dep}" | sed -n ' - H; # Store each input line in hold space. - ${ # On the last line: - g; # Restore everything to pattern space. - s/[\t\n]/ /g; # Replace tabs & newlines with spaces. - s/ *\([(\[<]\) */ \1/g; # One space before "(", "[", and "<". - s/ *\([)\]>]\) */\1 /g; # One space after "(", "[", and "<". - s/ *\(<[<=]\) */\1 /g; # One space after "<<" and "<=". - s/ *\(>[>=]\) */\1 /g; # One space after ">>" and ">=". - s/ *\(=\) */\1 /g; # One space after "=". - s/^ *//; # Remove leading spaces. - s/ *$//; # Remove trailing spaces. - s/ */ /g; # Remove duplicate spaces. - p; # Print the pattern space. - }; # End. - ')" - - # dep is now of the form: - # pkg[:archqual] [(rel ver)] [\[arches\]] [<plats>] - - pkgarchqual="${dep%% *}" - dep=" ${dep#* }" - pkg="${pkgarchqual%:*}" - if [ "x${pkg}" != "x${pkgarchqual}" ]; then - archqual="${pkgarchqual##*:}" - fi - - if [ "x${dep# (*)}" != "x${dep}" ]; then - relver="${dep# (}" - relver="${relver%%)*}" - dep="${dep# (*)}" - rel="${relver% *}" - ver="${relver##* }" - fi - - if [ "x${dep# \[*\]}" != "x${dep}" ]; then - arches="${dep# \[}" - arches="${arches%%\]*}" - dep="${dep# \[*\]}" - fi - - if [ "x${dep# <*>}" != "x${dep}" ]; then - plats="${dep# <}" - plats="${plats%%>*}" - dep="${dep# <*>}" - fi - - if [ "x${host_arch}" != 'x' ] && ! arch_is_concerned \ - "${host_arch}" "${arches}"; then - return 0 - fi - if [ "x${host_plat}" != 'x' ] && ! plat_is_concerned \ - "${host_plat}" "${plats}"; then - return 0 - fi - - printf '%s' "${pkg}" - [ "x${archqual}" != 'x' ] && printf ':%s' "${archqual}" - [ "x${ver}" != 'x' ] && printf ' (%s %s)' "${rel}" "${ver}" - [ "x${host_arch}" = 'x' ] && [ "x${arches}" != 'x' ] && \ - printf ' [%s]' "${arches}" - [ "x${host_plat}" = 'x' ] && [ "x${plats}" != 'x' ] && \ - printf ' <%s>' "${plats}" - printf '\n' - - return 0 -} - -reduce_deps() -{ - local deps="${1}" - local union="${2}" - local host_arch="${3}" - local host_plat="${4}" - local dep_and= - local dep_or= - local dep_list= - local dep_or_list= - local dep= - - dep_list='' - IFS=',' - for dep_and in ${deps}; do - unset IFS - if ! ${union}; then - dep_or_list='' - IFS='|' - for dep_or in ${dep_and}; do - unset IFS - dep="$(parse_dep "${dep_or}" \ - "${host_arch}" "${host_plat}")" - if [ "x${dep}" != 'x' ]; then - if [ "x${dep_or_list}" != 'x' ]; then - dep_or_list="${dep_or_list} | " - fi - dep_or_list="${dep_or_list}${dep}" - fi - done - unset IFS - if [ "x${dep_or_list}" != 'x' ]; then - if [ "x${dep_list}" != 'x' ]; then - dep_list="${dep_list}, " - fi - dep_list="${dep_list}${dep_or_list}" - fi - else - dep="$(parse_dep "${dep_and}" \ - "${host_arch}" "${host_plat}")" - if [ "x${dep}" != 'x' ]; then - if [ "x${dep_list}" != 'x' ]; then - dep_list="${dep_list}, " - fi - dep_list="${dep_list}${dep}" - fi - fi - done - unset IFS - - printf '%s\n' "${dep_list}" - - return 0 -} |