This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] fixincludes: handle symlinks with multiple slashes


If you have a symlink in /usr/include like so:
	/usr/include/oracle/10.2.0.3/client -> //usr/lib64/oracle/10.2.0.3/client/include

The fixincludes script gets confused and tries to write to /usr/include.
This is because the logic to walk the path names strips just one slash.
Tweak the sed statement to consume all duplicate slashes instead.

Before this change (and the aforementioned symlink):

$ rm -rf output
$ ./fixinc.sh $PWD/output 2>/dev/null
Fixing headers into /var/tmp/portage/sys-devel/gcc-4.5.4/work/build/build-x86_64-pc-linux-gnu/fixincludes/output for x86_64-pc-linux-gnu target
Forbidden identifiers:
Finding directories and links to directories
 Searching /usr/include/.
 Searching /usr/include/./quicktime
 Searching /usr/include/./schily/scg
 Searching /usr/include/./libpq
 Searching /usr/include/./libunrar
 Searching /usr/include/./cryptopp
 Searching /usr/include/./oracle/10.2.0.3/client
 Searching /usr/include/./postgresql
 Searching /usr/include/./scsilib
Making symbolic directory links
Fixing directory /usr/include into /var/tmp/portage/sys-devel/gcc-4.5.4/work/build/build-x86_64-pc-linux-gnu/fixincludes/output
Fixing directory /usr/include/oracle/10.2.0.3/client into /usr/include
Cleaning up unneeded directories:
fixincludes is done

Notice that second "Fixing directory" is wrong -- it shouldn't be in /usr.

After this fix, that second line correctly reads:
Fixing directory /usr/include/oracle/10.2.0.3/client into /var/tmp/portage/sys-devel/gcc-4.5.4/work/build/build-x86_64-pc-linux-gnu/fixincludes/output/root/usr/lib64/oracle/10.2.0.3/client/include

Signed-off-by: Mike Frysinger <vapier@gentoo.org>

2012-12-25  Mike Frysinger  <vapier@gentoo.org>

	* fixinc.in (dirname): Change sed from 's|[^/]*/||' to
	's|[^/]*//*||'.
---
 fixincludes/fixinc.in | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fixincludes/fixinc.in b/fixincludes/fixinc.in
index f7b8d8f..202fff3 100755
--- a/fixincludes/fixinc.in
+++ b/fixincludes/fixinc.in
@@ -344,7 +344,7 @@ if $LINKS; then
             mkdir $component >/dev/null 2>&1
             cd $component
             dirmade=$dirmade/$component
-            dirname=`echo $dirname | sed -e 's|[^/]*/||'`
+            dirname=`echo $dirname | sed -e 's|[^/]*//*||'`
           done
         fi
 
-- 
1.8.0


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]