blueness    15/05/13 14:49:02

  Added:                ldconfig.in
  Log:
  Version bump.  Addresses bug #544128.
  
  (Portage version: 2.2.18/cvs/Linux x86_64, signed Manifest commit with key 
0xF52D4BBA)

Revision  Changes    Path
1.1                  sys-libs/musl/files/ldconfig.in

file : 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/ldconfig.in?rev=1.1&view=markup
plain: 
http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-libs/musl/files/ldconfig.in?rev=1.1&content-type=text/plain

Index: ldconfig.in
===================================================================
#!/bin/bash -e
# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

ROOT="/"

LDSO_CONF="/etc/ld.so.conf"
if [[ ! -e $LDSO_CONF ]]; then
        echo "$LDSO_CONF not found" >&2
        exit 1
fi

LDSO_CONF_DIR=$(dirname $LDSO_CONF)

VERBOSE=0

UPDATE_LINKS=1

get_options() {
        while getopts "vnNXf:C:r:p" opt "$@"; do
                case $opt in
                v)
                        echo "ldconfig for musl in Gentoo"
                        VERBOSE=1
                        ;;
                r)
                        ROOT=$OPTARG
                        ;;
                f)
                        LDSO_CONF=$OPTARG
                        ;;
                X)
                        UPDATE_LINKS=0
                        ;;
                \?)
                        echo "Invalid option: -$opt" >&2
                        exit 1
                        ;;
                n|N|C|p)
                        echo "Unimplemented option: -$opt" >&2
                        exit 1
                        ;;
                esac
        done

        if [[ $UPDATE_LINKS == 1 ]]; then
                echo "Updating links is not implemented."
        fi
}


repeated() {
        local l=$1
        local drs="${@:2}"
        for m in $drs; do
                [[ $m == $l ]] && return 0
        done
        return 1
}

expand() {
        # We are assuming the ld.so.conf's 'include' is not recursive
        local f line l
        local glob="$LDSO_CONF_DIR/$1"
        local drs="${@:2} "

        for f in $glob; do
                [[ ! -f $f ]] && continue
                while read line; do
                        line=${line%%#*}
                        line=${line//:/ }
                        line=${line//,/ }
                        for l in $line; do
                                #We must add this whether or not the directory 
exists
                                repeated $l $drs && continue
                                drs+=" $l "
                        done
                done < $f
        done

        echo $drs
}

read_ldso_conf() {
        local drs=" "

        while read line; do
                # Sanitize the line - see ldconfig(8) for delimiters
                # Note: bash read turns tabs into spaces and read already
                # delimits on newlines with the default $IFS
                line=${line%%#*}   # Remove comments
                line=${line//:/ }  # Change colon delimiter to space
                line=${line//,/ }  # Change comma delimiter to space

                next=0
                for l in $line; do
                        if [[ $next == 1 ]]; then
                                next=0
                                drs=$(expand $l $drs)
                        elif [[ $l == "include" ]]; then
                                next=1
                        else
                                # glibc's ldconfig silently skips non 
directories
                                if [[ -d $l ]]; then
                                        repeated $l $drs && continue
                                        drs+=" $l "
                                fi
                        fi
                done
        done < $1

        echo $drs
}

sanitize() {
        local drs=$@

        repeated "/lib" $drs || drs="/lib $drs"
        repeated "/usr/lib" $drs || drs="/usr/lib $drs"

        echo $drs
}

get_options "$@"
drs=$(read_ldso_conf "$LDSO_CONF")
drs=$(sanitize $drs)

ARCH=@@ARCH@@
LDSO_PATH="/lib/ld-musl-${ARCH}.so.1"
if [[ ! -e $LDSO_PATH ]]; then
        echo "$LDSO_PATH not found" >&2
        exit 1
fi

LDSO_ARCH=$(basename $LDSO_PATH)
LDSO_NAME=${LDSO_ARCH%.so.1}
ETC_LDSO_PATH=/etc/${LDSO_NAME}.path

X=$(mktemp --tmpdir=/tmp ${LDSO_NAME}.XXXXXX)
for d in $drs; do
        echo $d >> $X
done
chmod 644 $X
mv $X $ETC_LDSO_PATH




Reply via email to