From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 6338D13888F for ; Thu, 15 Oct 2015 16:44:27 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E668D21C05E; Thu, 15 Oct 2015 16:44:23 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 79E7321C066 for ; Thu, 15 Oct 2015 16:44:22 +0000 (UTC) Received: from oystercatcher.gentoo.org (unknown [IPv6:2a01:4f8:202:4333:225:90ff:fed9:fc84]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 50CB9340C1E for ; Thu, 15 Oct 2015 16:44:21 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 69092B81 for ; Thu, 15 Oct 2015 16:44:17 +0000 (UTC) From: "Paul Varner" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Paul Varner" Message-ID: <1293582614.879cf3ce1f3041854c9dc886b59ac7e136ae9b9b.fuzzyray@gentoo> Subject: [gentoo-commits] proj/gentoolkit:master commit in: / X-VCS-Repository: proj/gentoolkit X-VCS-Committer: fuzzyray X-VCS-Committer-Name: Paul Varner X-VCS-Revision: 879cf3ce1f3041854c9dc886b59ac7e136ae9b9b X-VCS-Branch: master Date: Thu, 15 Oct 2015 16:44:17 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: bfa04193-d504-4e4e-ac45-6047c13a131c X-Archives-Hash: 3b38c953fb76f6631e8bad93722c41e7 commit: 879cf3ce1f3041854c9dc886b59ac7e136ae9b9b Author: Paul Varner gentoo org> AuthorDate: Wed Dec 29 00:30:14 2010 +0000 Commit: Paul Varner gentoo org> CommitDate: Wed Dec 29 00:30:14 2010 +0000 URL: https://gitweb.gentoo.org/proj/gentoolkit.git/commit/?id=879cf3ce Merge branch 'gentoolkit' into euse Conflicts: bin/euse AUTHORS | 8 +- CREDITS | 16 + ChangeLog | 96 ++ DEVELOPING | 161 ++++ MANIFEST.in | 12 +- Makefile | 25 - NEWS | 40 + README.dev | 39 + TODO | 37 +- VERSION | 1 - bin/analyse | 48 + bin/eclean | 849 +--------------- bin/epkginfo | 284 +----- bin/equery | 28 +- bin/eshowkw | 9 + bin/euse | 137 ++- bin/glsa-check | 126 +-- bin/revdep-rebuild | 192 ++-- man/analyse.1 | 210 ++++ man/eclean.1 | 31 +- man/epkginfo.1 | 60 +- man/equery.1 | 862 ++++++++++++----- man/eshowkw.1 | 47 + man/glsa-check.1 | 14 +- man/revdep-rebuild.1 | 9 +- pylintrc | 321 ++++++ pym/gentoolkit/__init__.py | 45 +- pym/gentoolkit/analyse/__init__.py | 128 +++ pym/gentoolkit/analyse/analyse.py | 378 ++++++++ pym/gentoolkit/analyse/base.py | 134 +++ pym/gentoolkit/analyse/lib.py | 352 +++++++ pym/gentoolkit/analyse/output.py | 213 ++++ pym/gentoolkit/analyse/rebuild.py | 235 +++++ pym/gentoolkit/atom.py | 347 +++++++ pym/gentoolkit/base.py | 149 +++ pym/gentoolkit/cpv.py | 256 +++++ pym/gentoolkit/dbapi.py | 17 + pym/gentoolkit/dependencies.py | 330 +++++++ pym/gentoolkit/{ => deprecated}/helpers.py | 61 +- pym/gentoolkit/eclean/__init__.py | 4 + pym/gentoolkit/eclean/clean.py | 149 +++ pym/gentoolkit/eclean/cli.py | 504 ++++++++++ pym/gentoolkit/eclean/exclude.py | 262 +++++ pym/gentoolkit/eclean/output.py | 187 ++++ pym/gentoolkit/eclean/pkgindex.py | 91 ++ pym/gentoolkit/eclean/search.py | 569 +++++++++++ pym/gentoolkit/eprefix.py | 34 + pym/gentoolkit/equery/__init__.py | 198 ++-- pym/gentoolkit/equery/belongs.py | 168 ++-- pym/gentoolkit/equery/changes.py | 310 ++---- pym/gentoolkit/equery/check.py | 370 ++++--- pym/gentoolkit/equery/depends.py | 283 +++--- pym/gentoolkit/equery/depgraph.py | 265 +++-- pym/gentoolkit/equery/files.py | 180 ++-- pym/gentoolkit/equery/has.py | 213 ++++ pym/gentoolkit/equery/hasuse.py | 152 +-- pym/gentoolkit/equery/keywords.py | 8 + pym/gentoolkit/equery/list_.py | 203 ++-- pym/gentoolkit/equery/meta.py | 609 ++++++------ pym/gentoolkit/equery/size.py | 137 ++- pym/gentoolkit/equery/uses.py | 240 ++--- pym/gentoolkit/equery/which.py | 51 +- pym/gentoolkit/errors.py | 164 ++-- pym/gentoolkit/eshowkw/__init__.py | 130 +++ pym/gentoolkit/eshowkw/display_pretty.py | 103 ++ pym/gentoolkit/eshowkw/keywords_content.py | 325 +++++++ pym/gentoolkit/eshowkw/keywords_header.py | 100 ++ pym/gentoolkit/flag.py | 165 ++++ pym/gentoolkit/formatters.py | 99 ++ pym/gentoolkit/glsa/__init__.py | 149 +-- pym/gentoolkit/helpers.py | 616 +++++++++--- pym/gentoolkit/helpers2.py | 437 --------- pym/gentoolkit/keyword.py | 144 +++ pym/gentoolkit/metadata.py | 307 ++++++ pym/gentoolkit/package.py | 860 +++++++++-------- pym/gentoolkit/pprinter.py | 265 +++-- pym/gentoolkit/query.py | 382 ++++++++ pym/gentoolkit/sets.py | 57 ++ pym/gentoolkit/test/__init__.py | 25 + pym/gentoolkit/test/eclean/Packages | 1017 ++++++++++++++++++++ pym/gentoolkit/test/eclean/__init__.py | 6 + pym/gentoolkit/test/eclean/creator.py | 242 +++++ pym/gentoolkit/test/eclean/distfiles.exclude | 11 + pym/gentoolkit/test/eclean/distsupport.py | 482 ++++++++++ pym/gentoolkit/test/eclean/test_clean.py | 152 +++ pym/gentoolkit/test/eclean/test_search.py | 632 ++++++++++++ pym/gentoolkit/test/equery/__init__.py | 6 + pym/gentoolkit/{tests => test}/equery/test_init.py | 10 +- pym/gentoolkit/test/test_atom.py | 153 +++ pym/gentoolkit/test/test_cpv.py | 142 +++ pym/gentoolkit/test/test_helpers.py | 122 +++ pym/gentoolkit/test/test_keyword.py | 57 ++ pym/gentoolkit/test/test_query.py | 109 +++ pym/gentoolkit/test/test_syntax.py | 34 + pym/gentoolkit/tests/test_helpers2.py | 39 - pym/gentoolkit/tests/test_template.py | 38 - pym/gentoolkit/textwrap_.py | 108 ++- pym/gentoolkit/versionmatch.py | 153 +-- setup.py | 156 ++- 99 files changed, 14772 insertions(+), 4719 deletions(-) diff --cc bin/euse index fc9d60f,297d4f6..c54135f --- a/bin/euse +++ b/bin/euse @@@ -7,13 -7,44 +7,53 @@@ # Licensed under the GPL v2 PROGRAM_NAME=euse - PROGRAM_VERSION=$(cat /usr/share/gentoolkit/VERSION) + VERSION="svn" - MAKE_CONF_PATH=/etc/make.conf - MAKE_GLOBALS_PATH=/etc/make.globals - MAKE_PROFILE_PATH=/etc/make.profile - MAKE_CONF_BACKUP_PATH=/etc/make.conf.euse_backup - PACKAGE_USE_PATH=/etc/portage/package.use + EPREFIX=${EPREFIX:-$(portageq envvar EPREFIX)} + ETC="${EPREFIX}/etc" + USR_SHARE_PORTAGE="${EPREFIX}/usr/share/portage" + -# define error function so it can be used immediately -error() { - echo "ERROR: ${1}" ++# define error functions so they can be used immediately ++fatal() { ++ echo -e "ERROR: ${*}" + set +f + exit 1 + } + ++error() { ++ echo -e "ERROR: ${*}" ++} ++ ++warn() { ++ echo -e "WARNING: ${*}" ++} ++ + # /etc/make.conf can now exist in /etc/portage/make.conf, prefer it over /etc/make.conf for changes + if [ -e "${ETC}/portage/make.conf" ]; then + MAKE_CONF_PATH="${ETC}/portage/make.conf" + elif [ -e "${ETC}/make.conf" ]; then + MAKE_CONF_PATH="${ETC}/make.conf" + else - error "make.conf does not exist" ++ fatal "make.conf does not exist" + fi + MAKE_CONF_BACKUP_PATH="${MAKE_CONF_PATH}.euse_backup" + + # /etc/make.globals has been moved to /usr/share/portage/config/make.globals + if [ -e "${USR_SHARE_PORTAGE}/config/make.globals" ]; then + MAKE_GLOBALS_PATH="${USR_SHARE_PORTAGE}/config/make.globals" + else + MAKE_GLOBALS_PATH="${ETC}/make.globals" + fi + + # /etc/make.profile or /etc/portage/make.profile, if /etc/make.profile exists, it will be used + if [ -e "${ETC}/make.profile" ]; then + MAKE_PROFILE_PATH="${ETC}/make.profile" + elif [ -e "${ETC}/portage/make.profile" ]; then + MAKE_PROFILE_PATH="${ETC}/portage/make.profile" + else - error "make.profile does not exist" ++ fatal "make.profile does not exist" + fi ++PACKAGE_USE_PATH=${ETC}/portage/package.use [ -z "${MODE}" ] && MODE="showhelp" # available operation modes: showhelp, showversion, showdesc, showflags, modify @@@ -79,22 -93,27 +105,28 @@@ check_sanity() # file permission tests local descdir local make_defaults - + local make_conf + + [[ ! -d "${MAKE_PROFILE_PATH}" || ! -r "${MAKE_PROFILE_PATH}" ]] && error "${MAKE_PROFILE_PATH} is not readable" + # + for make_conf in $(get_all_make_conf); do - [ ! -r "${make_conf}" ] && error "${make_conf} is not readable" ++ [ ! -r "${make_conf}" ] && fatal "${make_conf} is not readable" + done + descdir="$(get_portdir)/profiles" + - [ ! -r "${MAKE_CONF_PATH}" ] && fatal "${MAKE_CONF_PATH} is not readable" + [ ! -r "${MAKE_GLOBALS_PATH}" ] && fatal "${MAKE_GLOBALS_PATH} is not readable" - [ ! -h "${MAKE_PROFILE_PATH}" ] && fatal "${MAKE_PROFILE_PATH} is not a symlink" + [ -z "$(get_portdir)" ] && fatal "\$PORTDIR couldn't be determined" + [ ! -d "${descdir}" ] && fatal "${descdir} does not exist or is not a directory" + [ ! -r "${descdir}/use.desc" ] && fatal "${descdir}/use.desc is not readable" + [ ! -r "${descdir}/use.local.desc" ] && fatal "${descdir}/use.local.desc is not readable" + - [ ! -r "${MAKE_GLOBALS_PATH}" ] && error "${MAKE_GLOBALS_PATH} is not readable" - [ -z "$(get_portdir)" ] && error "\$PORTDIR couldn't be determined" - [ ! -d "${descdir}" ] && error "${descdir} does not exist or is not a directory" - [ ! -r "${descdir}/use.desc" ] && error "${descdir}/use.desc is not readable" - [ ! -r "${descdir}/use.local.desc" ] && error "${descdir}/use.local.desc is not readable" for make_defaults in $(get_all_make_defaults); do - [ ! -r "$make_defaults" ] && error "$_make_defaults is not readable" + [ ! -r "$make_defaults" ] && fatal "$_make_defaults is not readable" done -# [ ! -r "$(get_make_defaults)" ] && error "$(get_make_defaults) is not readable" - [ "${MODE}" == "modify" -a ! -w "${MAKE_CONF_PATH}" ] && error ""${MAKE_CONF_PATH}" is not writable" -} + [ "${MODE}" == "modify" -a ! -w "${MAKE_CONF_PATH}" ] && fatal ""${MAKE_CONF_PATH}" is not writable" + [ "${MODE}" == "modify" -a -s "${PACKAGE_USE_PATH}" -a ! -w "${PACKAGE_USE_PATH}" ] && fatal ""${PACKAGE_USE_PATH}" is not writable" +} # }}} showhelp() { cat << HELP @@@ -235,11 -187,13 +267,13 @@@ get_useflags() # backup portdir so get_portdir() doesn't give false results later portdir_backup="${PORTDIR}" - + ACTIVE_FLAGS[0]="$(reduce_incrementals ${USE})" USE="" - source "${MAKE_CONF_PATH}" - ACTIVE_FLAGS[1]="$(reduce_incrementals ${USE})" + for x in $(get_all_make_conf); do + source "${x}" + ACTIVE_FLAGS[1]="$(reduce_incrementals ${ACTIVE_FLAGS[1]} ${USE})" + done USE="" for x in $(get_all_make_defaults); do source "${x}" @@@ -254,139 -207,36 +288,146 @@@ USE="${ACTIVE_FLAGS[0]}" PORTDIR="${portdir_backup}" + # + # Traverse through use.mask and use.force (0.5s) + # Flip signs of use.mask (it's interpreted oppositely), + ACTIVE_FLAGS[6]=$(reduce_incrementals_trump \ + $(cat $(traverse_profile "use.mask") | sed -re "/^#.*$/{d}") \ + | sed -re "s/(^| )-[^ ]*//g" -e "s/(^| )([a-z0-9])/ -\2/g") + ACTIVE_FLAGS[7]=$(reduce_incrementals \ + $(cat $(traverse_profile "use.force") \ + | sed -re "/^#.*$/ {d}")) + + USE_FLAGS_CALCULATED=1 +} # }}} + +# Function: get_portageuseflags # {{{ +# Fetch USE flags reported active by Portage +get_portageuseflags() { + # only calculate once as calling emerge is painfully slow + [ -n "${_PORTAGE_USE_FLAGS_CALCULATED}" ] && return # get the currently active USE flags as seen by portage, this has to be after # restoring USE or portage won't see the original environment + # Bug 181309, emerge may complain if EMERGE_DEFAULT_OPTS="--ask" is set - ACTIVE_FLAGS[9]="$(emerge --ignore-default-opts --info | grep 'USE=' | cut -b 5- | sed -e 's:"::g')" #' + ACTIVE_FLAGS[9]="$(portageq envvar USE)" #' - USE_FLAGS_CALCULATED=1 -} - -# get the list of all known USE flags by reading use.desc and/or use.local.desc -# (depending on the value of $SCOPE) + _PORTAGE_USE_FLAGS_CALCULATED=1 +} # }}} + +# Function: get_useflaglist {{{ +# Get the list of all known USE flags by reading use.desc and/or +# use.local.desc (depending on the value of $SCOPE). Also searches any +# registered overlays after searching the main portage tree first. +# Use flags visible in both the main tree and overlays are trumped by +# the main tree. Overlays are indicated by brackets [xxx] at the +# beginning of the description. +# +# Returns: +# (written to stdout) Sorted, unique list of system-wide USE flags and +# descriptions. Flags defined in overlays have the overlay in brackets +# prepended to the descriptions. +# +# Environment: +# SCOPE - [local|global] constrain search to local (use.local.desc) or +# global (use.desc) get_useflaglist() { local descdir - - descdir="$(get_portdir)/profiles" - - if [ -z "${SCOPE}" -o "${SCOPE}" == "global" ]; then - egrep "^[^# ]+ +-" "${descdir}/use.desc" | cut -d\ -f 1 - fi - if [ -z "${SCOPE}" -o "${SCOPE}" == "local" ]; then - egrep "^[^# :]+:[^ ]+ +-" "${descdir}/use.local.desc" | cut -d: -f 2 | cut -d\ -f 1 + local overlay + for profiledir in ${ALL_PORTDIRS[@]}; do + descdir="${profiledir}/profiles" + if [[ -z ${SCOPE} || ${SCOPE} == "global" ]]; then + [[ ! -s "${descdir}/use.desc" ]] && continue + egrep "^[^# ]+ +-" "${descdir}/use.desc" + fi + if [[ -z ${SCOPE} || ${SCOPE} == "local" ]]; then + [[ ! -s "${descdir}/use.local.desc" ]] && continue + egrep "^[^# :]+:[^ ]+ +-" "${descdir}/use.local.desc" \ + | cut -d: -f 2 + fi + done | cut -d " " -f1 | sort --field=":" --key=1,1 --unique +} # }}} + +# Function: get_useflaglist_ebuild {{{ +# Builds USE flag information for specified package atom into +# ACTIVE_FLAGS[5]. For the atom, the versions available are found, and +# for each, the corresponding SLOT, IUSE are stored along with which +# overlay the ebuild lives in. Considering that the pieces of information +# may be required in any order or any subsets, it is intended for the +# function to cache the information and it be retrieved from +# ACTIVE_FLAGS[5]. So the format of ACTIVE_FLAGS[5] is newline-separated +# list of: +# +# category/packge;version;SLOT;IUSE;overlay +# +# Arguments: +# $1 - Package atom to lookup (app-editor/vim) +# +# Returns: +# Nothing significant +# +# Environment: +# PORTDIR - Root of portage tree +# ACTIVE_FLAGS - Array of current use flag info +# +get_useflaglist_ebuild() { + local known=$(echo "${ACTIVE_FLAGS[5]}" | egrep "^${1}") + if [[ -n $known ]]; then + # No need to recache + return fi -} + local pkg=$(echo ${1} | cut -d/ -f2) + declare append + for portdir in ${ALL_PORTDIRS[@]}; do + # Open the ebuild file and retrieve defined USE flags + [[ ! -d "$portdir/${1}" ]] && continue + append=$(echo -n $portdir/${1}/*.ebuild "" \ + | perl -pne "s:$portdir/${1}/${pkg}-(([^.]|\.(?!e))+)\.ebuild:\1:g" \ + | while read -d " " version; do + IFS=$'\n' + if [[ $portdir == $PORTDIR ]]; then + overlay="" + else + if [[ -s $(dirname ${portdir}/repo_name) ]]; then + overlay="$(cat "${portdir}/profiles/repo_name")" + else + # XXX: May be better to use full path + overlay="$(basename "${portdir}")" + fi + fi + if [[ ! -d "$portdir/metadata/cache" ]]; then + echo "!!! Metadata cache not found. You need to run " >&2 + echo "!!! 'egencache --repo=$overlay --update'" >&2 + echo "!!! to generate metadata for your overlays" >&2 + return 1 + elif [[ ! -e "$portdir/metadata/cache/${1}-$version" ]]; then + # Repo does not have this particular package + continue + fi + iuse=$(head -11 "$portdir/metadata/cache/${1}-$version"|tail -1) + slot=$(head -3 "$portdir/metadata/cache/${1}-$version"|tail -1) + echo "${1};${version};${slot};${iuse};${overlay}" + done + ) + if [[ -z ${ACTIVE_FLAGS[5]} ]]; then ACTIVE_FLAGS[5]="$append" + else ACTIVE_FLAGS[5]="${ACTIVE_FLAGS[5]}"$'\n'"$append" + fi + done +} # }}} + # get all make.conf files that exist on the system + get_all_make_conf() { + # At least one of the files exists or we would not have made it this far + for x in ${ETC}/make.conf ${ETC}/portage/make.conf; do + [ -e "${x}" ] && echo "${x}" + done + } -# get all make.defaults by traversing the cascaded profile directories -get_all_make_defaults() { +# Function: traverse_profile {{{ +# General method of collecting the contents of a profile +# component by traversing through the cascading profile +# +# Arguments: +# $1 - Filename (make.profile) +# [$2] - Current directory (unspecified means to start at the top) +traverse_profile() { local curdir local parent local rvalue @@@ -684,10 -326,9 +727,10 @@@ showdesc() local current_desc local found_one local args - + + set -f args="${*:-*}" - + if [ -z "${SCOPE}" ]; then SCOPE="global" showdesc ${args} echo @@@ -700,49 -341,37 +743,49 @@@ [ "${SCOPE}" == "global" ] && echo "global use flags (searching: ${args})" [ "${SCOPE}" == "local" ] && echo "local use flags (searching: ${args})" echo "************************************************************" - + set +f if [ "${args}" == "*" ]; then - args="$(get_useflaglist | sort -u)" + args="${useflags[*]}" fi - + set ${args} foundone=0 - while [ -n "${1}" ]; do - if [ "${SCOPE}" == "global" ]; then - if grep "^${1} *-" "${descdir}/use.desc" > /dev/null; then + while [[ -n "${1}" ]]; do + if [[ "${SCOPE}" == "global" ]]; then + if array_contains "${useflags[*]}" "$1"; then get_flagstatus "${1}" + # XXX: Handle overlay + grep "^${1} *-" ${ALL_PORTDIRS[@]/%//profiles/use.desc} 2> /dev/null \ + | sed -re "s/^([^:]+)://" foundone=1 fi - grep "^${1} *-" "${descdir}/use.desc" fi - # local flags are a bit more complicated as there can be multiple + # local flags are a bit more complicated as there can be multiple # entries per flag and we can't pipe into printf - if [ "${SCOPE}" == "local" ]; then - if grep ":${1} *-" "${descdir}/use.local.desc" > /dev/null; then + if [[ "${SCOPE}" == "local" ]]; then + if array_contains "${useflags[*]}" "$1"; then foundone=1 fi - grep ":${1} *-" "${descdir}/use.local.desc" \ - | sed -e "s/^\([^:]\+\):\(${1}\) *- *\(.\+\)/\1|\2|\3/g" \ - | while read line; do - pkg="$(echo $line | cut -d\| -f 1)" - flag="$(echo $line | cut -d\| -f 2)" - desc="$(echo $line | cut -d\| -f 3)" - get_flagstatus "${flag}" - printf "%s (%s):\n%s\n\n" "${flag}" "${pkg}" "${desc}" - done + # Fetch all the packages data using this flag + infos=$( grep ":${1} *-" ${ALL_PORTDIRS[@]/%//profiles/use.local.desc} 2> /dev/null \ + | sed -re "s/^([^:]+):([^:]+):(${1}) *- *(.+)/\1|\2|\3|\4/g") + OIFS=$IFS; IFS=$'\n'; infos=($infos); IFS=$OIFS; + for line in "${infos[@]}"; do + OIFS=$IFS; IFS="|"; line=($line); IFS=$OIFS + pkg=${line[1]} + flag=${line[2]} + desc=${line[3]} + if get_flagstatus "${flag}"; then + ACTIVE="+" + else + ACTIVE="-" + fi + printf "%s\n" "${flag}" + printf "%s: %s\n" "${pkg}" "${desc}" \ + | fold --width=$((${COLUMNS:-80}-10)) -s | sed -e "s/^/ /g" + get_flagstatus_pkg "${flag}" "${pkg}" "${ACTIVE}" + done fi shift done @@@ -853,10 -466,9 +896,10 @@@ showflags() if [ "${args}" == "*" ]; then args="$(get_useflaglist | sort -u)" fi - + set ${args} - + get_portageuseflags + while [ -n "${1}" ]; do if echo " ${ACTIVE_FLAGS[9]} " | grep " ${1} " > /dev/null; then printf "%-20s" ${1} @@@ -1226,9 -578,9 +1269,9 @@@ modify() echo -ne "${NEW_MAKE_CONF_USE_2%% }" echo '"' fi ) < "${MAKE_CONF_BACKUP_PATH}" | sed -e 's:\\ $:\\:' > "${MAKE_CONF_PATH}" - + echo "${MAKE_CONF_PATH} was modified, a backup copy has been placed at ${MAKE_CONF_BACKUP_PATH}" -} +} # }}} ##### main program comes now #####