nemiver r960 - in trunk: . src/common tests



Author: jjongsma
Date: Wed Dec 24 19:42:51 2008
New Revision: 960
URL: http://svn.gnome.org/viewvc/nemiver?rev=960&view=rev

Log:
Fix libtool wrapper detection for files with dashes (Bug #554405)

	* src/common/nmv-proc-utils.cc: change is_libtool_executable_wrapper a bit
	so that it doesn't interpret dashes in the filename as the dash between the
	filename and the libtool boilerplate.  This allows us to detect filenames
	with dashes as libtool wrapper scripts (Bug #554405)
	* tests/Makefile.am: dist the new test libtool wrapper
	* tests/test-libtool-wrapper-detection.cc: add a test for a libtool wrapper
	with a dash in the filename
	* tests/libtool-wrapper-with-dashes: Added example libtool wrapper witha
	dash in the filename that we can use in our unit test

Added:
   trunk/tests/libtool-wrapper-with-dashes   (contents, props changed)
Modified:
   trunk/ChangeLog
   trunk/src/common/nmv-proc-utils.cc
   trunk/tests/Makefile.am
   trunk/tests/test-libtool-wrapper-detection.cc

Modified: trunk/src/common/nmv-proc-utils.cc
==============================================================================
--- trunk/src/common/nmv-proc-utils.cc	(original)
+++ trunk/src/common/nmv-proc-utils.cc	Wed Dec 24 19:42:51 2008
@@ -247,13 +247,25 @@
     if (c != '#') {
         return false;
     }
-    //goto dash, skip the white space that comes after
-    while (file.good () && !file.eof () && c != '-') {c = file.get ();}
-    if (c != '-')
-        return false;
-    c = file.get ();
-    if (!isspace (c))
-        return false;
+    // We're looking for a line that looks like this:
+    // # runtestcore - temporary wrapper script for .libs/runtestcore
+    //
+    // so read until we get to a dash (-) character
+    for (;;) {
+        int prev = 0;
+        while (file.good () && !file.eof () && c != '-') {
+            prev = c;
+            c = file.get ();
+        }
+        if (c != '-')
+            return false;
+        int next = file.get ();
+        // keep looking if the dash is not surrounded by spaces because the
+        // dash might be part of the filename: '# foo-bar - temporary ...'
+        if (isspace (prev) && isspace(next))
+            break;
+        c = next;
+    }
     //now go get the string "temporary wrapper script for "
     string str;
     for (int i=0; i < 29/*length of the string we are looking for*/; ++i) {

Modified: trunk/tests/Makefile.am
==============================================================================
--- trunk/tests/Makefile.am	(original)
+++ trunk/tests/Makefile.am	Wed Dec 24 19:42:51 2008
@@ -140,3 +140,4 @@
 
 LDADD=$(top_builddir)/src/common/libnemivercommon.la
 
+EXTRA_DIST=libtool-wrapper-with-dashes

Added: trunk/tests/libtool-wrapper-with-dashes
==============================================================================
--- (empty file)
+++ trunk/tests/libtool-wrapper-with-dashes	Wed Dec 24 19:42:51 2008
@@ -0,0 +1,147 @@
+#! /bin/bash
+
+# test-scaled-font - temporary wrapper script for .libs/test-scaled-font
+# Generated by ltmain.sh (GNU libtool) 2.2.4 Debian-2.2.4-0ubuntu4
+#
+# The test-scaled-font program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='/bin/sed -e 1s/^X//'
+sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
+fi
+BIN_SH=xpg4; export BIN_SH # for Tru64
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
+relink_command="(cd /home/jonathon/Projects/cairomm/tests; { test -z \"\${LIBRARY_PATH+set}\" || unset LIBRARY_PATH || { LIBRARY_PATH=; export LIBRARY_PATH; }; }; { test -z \"\${COMPILER_PATH+set}\" || unset COMPILER_PATH || { COMPILER_PATH=; export COMPILER_PATH; }; }; { test -z \"\${GCC_EXEC_PREFIX+set}\" || unset GCC_EXEC_PREFIX || { GCC_EXEC_PREFIX=; export GCC_EXEC_PREFIX; }; }; { test -z \"\${LD_RUN_PATH+set}\" || unset LD_RUN_PATH || { LD_RUN_PATH=; export LD_RUN_PATH; }; }; LD_LIBRARY_PATH=:/usr/local/lib; export LD_LIBRARY_PATH; PATH=/home/jonathon/Projects/webkit.git/WebKitTools/Scripts:/usr/lib/ccache:/usr/lib/icecc/bin:/home/jonathon/bin:/home/jonathon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games; export PATH; g++ -g -O0 -Wall -Wextra -Wall -g -Werror -Wextra -o \$progdir/\$file test-scaled-font.o  ../cairomm/.libs/libcairomm-1.0.so -L/usr/local/lib /usr/lib/libsigc-2.0.so /usr/local/lib/libcairo.so -lpixman-1 /usr/lib/libfreetype.s
 o -lfontconfig -lpng12 -lXrender -lz -lm -lX11 /usr/lib/libboost_unit_test_framework.a -Wl,-rpath -Wl,/home/jonathon/Projects/cairomm/cairomm/.libs)"
+
+# This environment variable determines our operation mode.
+if test "$libtool_install_magic" = "%%%MAGIC variable%%%"; then
+  # install mode needs the following variables:
+  generated_by_libtool_version='2.2.4'
+  notinst_deplibs=' ../cairomm/libcairomm-1.0.la'
+else
+  # When we are sourced in execute mode, $file and $ECHO are already set.
+  if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+    ECHO="echo"
+    file="$0"
+    # Make sure echo works.
+    if test "X$1" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
+      # Yippee, $ECHO works!
+      :
+    else
+      # Restart under the correct shell, and then maybe $ECHO will work.
+      exec /bin/bash "$0" --no-reexec ${1+"$@"}
+    fi
+  fi
+
+  # Find the directory that this script lives in.
+  thisdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+  test "x$thisdir" = "x$file" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=`ls -ld "$file" | /bin/sed -n 's/.*-> //p'`
+  while test -n "$file"; do
+    destdir=`$ECHO "X$file" | $Xsed -e 's%/[^/]*$%%'`
+
+    # If there was a directory component, then change thisdir.
+    if test "x$destdir" != "x$file"; then
+      case "$destdir" in
+      [\\/]* | [A-Za-z]:[\\/]*) thisdir="$destdir" ;;
+      *) thisdir="$thisdir/$destdir" ;;
+      esac
+    fi
+
+    file=`$ECHO "X$file" | $Xsed -e 's%^.*/%%'`
+    file=`ls -ld "$thisdir/$file" | /bin/sed -n 's/.*-> //p'`
+  done
+
+  # Usually 'no', except on cygwin/mingw when embedded into
+  # the cwrapper.
+  WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=no
+  if test "$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR" = "yes"; then
+    # special case for '.'
+    if test "$thisdir" = "."; then
+      thisdir=`pwd`
+    fi
+    # remove .libs from thisdir
+    case "$thisdir" in
+    *[\\/].libs ) thisdir=`$ECHO "X$thisdir" | $Xsed -e 's%[\\/][^\\/]*$%%'` ;;
+    .libs )   thisdir=. ;;
+    esac
+  fi
+
+  # Try to get the absolute directory name.
+  absdir=`cd "$thisdir" && pwd`
+  test -n "$absdir" && thisdir="$absdir"
+
+  program=lt-'test-scaled-font'
+  progdir="$thisdir/.libs"
+
+  if test ! -f "$progdir/$program" ||
+     { file=`ls -1dt "$progdir/$program" "$progdir/../$program" 2>/dev/null | /bin/sed 1q`; \
+       test "X$file" != "X$progdir/$program"; }; then
+
+    file="$$-$program"
+
+    if test ! -d "$progdir"; then
+      mkdir "$progdir"
+    else
+      rm -f "$progdir/$file"
+    fi
+
+    # relink executable if necessary
+    if test -n "$relink_command"; then
+      if relink_command_output=`eval $relink_command 2>&1`; then :
+      else
+	echo "$relink_command_output" >&2
+	rm -f "$progdir/$file"
+	exit 1
+      fi
+    fi
+
+    mv -f "$progdir/$file" "$progdir/$program" 2>/dev/null ||
+    { rm -f "$progdir/$program";
+      mv -f "$progdir/$file" "$progdir/$program"; }
+    rm -f "$progdir/$file"
+  fi
+
+  if test -f "$progdir/$program"; then
+    if test "$libtool_execute_magic" != "%%%MAGIC variable%%%"; then
+      # Run the actual program with our arguments.
+
+      exec "$progdir/$program" ${1+"$@"}
+
+      $ECHO "$0: cannot exec $program $*" 1>&2
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    $ECHO "$0: error: \`$progdir/$program' does not exist" 1>&2
+    $ECHO "This script is just a wrapper for $program." 1>&2
+    echo "See the libtool documentation for more information." 1>&2
+    exit 1
+  fi
+fi

Modified: trunk/tests/test-libtool-wrapper-detection.cc
==============================================================================
--- trunk/tests/test-libtool-wrapper-detection.cc	(original)
+++ trunk/tests/test-libtool-wrapper-detection.cc	Wed Dec 24 19:42:51 2008
@@ -15,6 +15,13 @@
     BOOST_REQUIRE (is_libtool_executable_wrapper ("./fooprog"));
 }
 
+void
+test_filename_with_dashes()
+{
+    UString real_path;
+    BOOST_REQUIRE (is_libtool_executable_wrapper ("./libtool-wrapper-with-dashes"));
+}
+
 test_suite*
 init_unit_test_suite (int argc, char** argv)
 {
@@ -26,6 +33,7 @@
 
     test_suite *suite = BOOST_TEST_SUITE ("libtool wrapper detect tests") ;
     suite->add (BOOST_TEST_CASE (&test0)) ;
+    suite->add (BOOST_TEST_CASE (&test_filename_with_dashes)) ;
     return suite;
 
     NEMIVER_CATCH_NOX



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]