diff options
| author | Joshua Watt <jpewhacker@gmail.com> | 2018-02-12 10:52:02 -0600 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2018-02-15 13:28:54 +0000 |
| commit | 832934efd633de3fa0051bfb30e94b64c885f542 (patch) | |
| tree | 039f17ed744021f591dfa882c4495ebbe93d2a1d /meta/recipes-devtools/icecc-create-env | |
| parent | 3e10060c99d6752236317c7590a0aa7563193346 (diff) | |
| download | poky-832934efd633de3fa0051bfb30e94b64c885f542.tar.gz | |
icecc-create-env: Symlink alternate names
Instead of renaming files to a new path in the toolchain archive, keep
the files with their original paths and create a relative symbolic link
from the new path to the original file.
(From OE-Core rev: 256f8f6cc5b520b59cfdc44aa076f71990e18e2c)
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'meta/recipes-devtools/icecc-create-env')
| -rwxr-xr-x | meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env | 64 |
1 files changed, 57 insertions, 7 deletions
diff --git a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env index 7636d090a4..0791bd54b2 100755 --- a/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env +++ b/meta/recipes-devtools/icecc-create-env/icecc-create-env/icecc-create-env | |||
| @@ -21,10 +21,28 @@ is_contained () | |||
| 21 | esac | 21 | esac |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | normalize_path () | ||
| 25 | { | ||
| 26 | # Normalizes the path to a file or directory, removing all "." and ".." | ||
| 27 | # entries. Use pwd -L to explicitly prevent symlink expansion | ||
| 28 | local path=$1 | ||
| 29 | if test -f "$path"; then | ||
| 30 | pushd $(dirname $path) > /dev/null 2>&1 | ||
| 31 | dir_path=$(pwd -L) | ||
| 32 | path=$dir_path/$(basename $path) | ||
| 33 | popd > /dev/null 2>&1 | ||
| 34 | elif test -d "$path"; then | ||
| 35 | pushd $path > /dev/null 2>&1 | ||
| 36 | path=$(pwd -L) | ||
| 37 | popd > /dev/null 2>&1 | ||
| 38 | fi | ||
| 39 | echo $path | ||
| 40 | } | ||
| 41 | |||
| 24 | add_file () | 42 | add_file () |
| 25 | { | 43 | { |
| 26 | local name="$1" | 44 | local path=`normalize_path $1` |
| 27 | local path="$1"; | 45 | local name="$path" |
| 28 | if test -n "$2"; then | 46 | if test -n "$2"; then |
| 29 | name="$2" | 47 | name="$2" |
| 30 | fi | 48 | fi |
| @@ -129,7 +147,7 @@ if test -n "$specfile" && test -e "$specfile"; then | |||
| 129 | fi | 147 | fi |
| 130 | 148 | ||
| 131 | ltofile=`$added_gcc -print-prog-name=lto1` | 149 | ltofile=`$added_gcc -print-prog-name=lto1` |
| 132 | pluginfile="${ltofile%lto1}liblto_plugin.so" | 150 | pluginfile=`normalize_path "${ltofile%lto1}liblto_plugin.so"` |
| 133 | if test -r "$pluginfile" | 151 | if test -r "$pluginfile" |
| 134 | then | 152 | then |
| 135 | add_file $pluginfile ${pluginfile#*usr} | 153 | add_file $pluginfile ${pluginfile#*usr} |
| @@ -146,6 +164,19 @@ else | |||
| 146 | exit 1 | 164 | exit 1 |
| 147 | fi | 165 | fi |
| 148 | 166 | ||
| 167 | link_rel () | ||
| 168 | { | ||
| 169 | local target="$1" | ||
| 170 | local name="$2" | ||
| 171 | local base="$3" | ||
| 172 | |||
| 173 | local prefix=`dirname $name` | ||
| 174 | |||
| 175 | prefix=`echo $prefix | sed 's,[^/]\+,..,g' | sed 's,^/*,,g'` | ||
| 176 | |||
| 177 | ln -s $prefix/$target $base/$name | ||
| 178 | } | ||
| 179 | |||
| 149 | tempdir=`mktemp -d /tmp/iceccenvXXXXXX` | 180 | tempdir=`mktemp -d /tmp/iceccenvXXXXXX` |
| 150 | new_target_files= | 181 | new_target_files= |
| 151 | for i in $target_files; do | 182 | for i in $target_files; do |
| @@ -159,11 +190,30 @@ for i in $target_files; do | |||
| 159 | target=$i | 190 | target=$i |
| 160 | ;; | 191 | ;; |
| 161 | esac | 192 | esac |
| 162 | mkdir -p $tempdir/`dirname $target` | 193 | if test "$target" == "$path"; then |
| 163 | cp -p $path $tempdir/$target | 194 | mkdir -p $tempdir/`dirname $target` |
| 164 | if test -f $tempdir/$target -a -x $tempdir/$target; then | 195 | cp -pH $target $tempdir/$target |
| 165 | strip -s $tempdir/$target 2>/dev/null | 196 | |
| 197 | if test -f $tempdir/$target -a -x $tempdir/$target; then | ||
| 198 | strip -s $tempdir/$target 2>/dev/null | ||
| 199 | fi | ||
| 200 | else | ||
| 201 | mkdir -p $tempdir/`dirname $path` | ||
| 202 | cp -pH $path $tempdir/$path | ||
| 203 | |||
| 204 | mkdir -p $tempdir/`dirname $target` | ||
| 205 | # Relative links are used because the files are checked for being | ||
| 206 | # executable outside the chroot | ||
| 207 | link_rel $path $target $tempdir | ||
| 208 | |||
| 209 | if test -f $tempdir/$path -a -x $tempdir/$path; then | ||
| 210 | strip -s $tempdir/$path 2>/dev/null | ||
| 211 | fi | ||
| 212 | |||
| 213 | path=`echo $path | cut -b2-` | ||
| 214 | new_target_files="$new_target_files $path" | ||
| 166 | fi | 215 | fi |
| 216 | |||
| 167 | target=`echo $target | cut -b2-` | 217 | target=`echo $target | cut -b2-` |
| 168 | new_target_files="$new_target_files $target" | 218 | new_target_files="$new_target_files $target" |
| 169 | done | 219 | done |
