diff options
author | CoprDistGit <infra@openeuler.org> | 2024-09-18 07:06:26 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2024-09-18 07:06:26 +0000 |
commit | d68770f6939ab160ff27ec4e65ccc88cd3677bd0 (patch) | |
tree | 5fc00dcf6a9f1ac8a974f9d3b42e07001796a3b6 /brp-chrpath | |
parent | c22cb56acddf5bc4147f60908d5ebd770a079070 (diff) |
automatic import of openEuler-rpm-config
Diffstat (limited to 'brp-chrpath')
-rwxr-xr-x | brp-chrpath | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/brp-chrpath b/brp-chrpath new file mode 100755 index 0000000..dc48351 --- /dev/null +++ b/brp-chrpath @@ -0,0 +1,104 @@ +#!/usr/bin/sh +# remove rpath specified + +rpathSuffix=( + "/home/abuild/rpmbuild/BUILD", + "/home/lkp/rpmbuild/BUILD" +) + +rpath=( + "/usr/lib64", + "/lib64", + "/usr/lib", + "/lib", + "/usr/lib/../lib64" +) + +buildroot=$1 + +function rpathChange() +{ + localSrcPath=$1 + localDstPath="" + + rpathArr=(`echo $localSrcPath | tr ':' ' '`) + + for path in ${rpathArr[*]} + do + localflag=0 + for suffix in ${rpathSuffix[*]} + do + if echo "$path" | grep $suffix &> /dev/null; then + localflag=1 + break + fi + done + + # Is the suffix path, delete + if [ $localflag -eq 1 ]; then + continue; + fi + + #Is the standard path, delete + if echo "${rpath[@]}" | grep -w $path &> /dev/null; then + continue + fi + + if [ x"$localDstPath" == x"" ]; then + localDstPath=$path + else + localDstPath=$localDstPath:$path + fi + done + + echo $localDstPath +} + +function removeRpathOrRunpath() +{ + localfile=$1 + + rpathInfo=$(chrpath -l $localfile | grep "RPATH=") + runpathInfo=$(chrpath -l $localfile | grep "RUNPATH=") + + currPath="" + realPath="" + needCh=0 + if [ x"$rpathInfo" != x"" ]; then + needCh=1 + currPath=$(echo $rpathInfo | awk -F "RPATH=" '{print $2}') + realPath=$(rpathChange $currPath) + fi + + if [ x"$runpathInfo" != x"" ]; then + needCh=1 + currPath=$(echo $runpathInfo | awk -F "RUNPATH=" '{print $2}') + realPath=$(rpathChange $currPath) + fi + + if [ $needCh -eq 0 ]; then + return 0 + fi + + if [ x"$realPath" == x"" ]; then + chrpath -d $localfile + else + chrpath -r $realPath $localfile + fi + + return 0 +} + +for file in $(find $buildroot/ -executable -type f -exec file {} ';' | grep "\<ELF\>" | awk -F ':' '{print $1}') +do + test -u $file + if [ $? -eq 0 ]; then + continue + fi + + if [ -w "$file" ]; then + removeRpathOrRunpath $file + fi +done + +exit 0 |