[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Ensure cwrapper compiles without warnings under -std=c99.
From: |
Charles Wilson |
Subject: |
Re: [PATCH] Ensure cwrapper compiles without warnings under -std=c99. |
Date: |
Sun, 11 May 2008 12:48:02 -0400 |
User-agent: |
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.14) Gecko/20080421 Thunderbird/2.0.0.14 Mnenhy/0.7.5.666 |
Gary V. Vaughan wrote:
On 6 May 2008, at 22:47, Charles Wilson wrote:
Unresolved:
(1) whether func_emit_wrapper_part1 should even TAKE an argument
(2) whether the cwrapper src, when printing a const char*, should use
puts() in preference to printf("%s",...)
Please go ahead and choose however you think best and then push the patch.
Thanks, Gary. I went with:
(1) prefer uniformity between parallel functions over strict minimalism
(that is, func_emit_wrapper_part1 does take the arg, even though it
doesn't currently use it.
(2) continue using printf for now
Fixed ARG/arg issue in first line of comments.
As pushed:
* libltdl/config/ltmain.m4sh (func_emit_wrapper_part1):
new function.
(func_emit_wrapper_part2): new function.
(func_emit_wrapper): delegate to new functions.
(func_emit_cwrapperexe_src) [__CYGWIN__ && __STRICT_ANSI__]:
ensure realpath is declared.
(func_emit_cwrapperexe_src): declare two different strings
to each hold part of the wrapper script content. Initialize
using new func_emit_wrapper_partX functions.
(func_emit_cwrapperexe_src) [main]: when emitting wrapper
script content, use both strings.
Reported by Yaakov Selkowitz.
---
ChangeLog | 16 +++++++
libltdl/config/ltmain.m4sh | 94
+++++++++++++++++++++++++++++++++----------
2 files changed, 88 insertions(+), 22 deletions(-)
--
Chuck
diff --git a/ChangeLog b/ChangeLog
index 6784cb5..81f532e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2008-05-11 Charles Wilson <address@hidden>
+
+ Ensure cwrapper compiles without warnings under -std=c99.
+ * libltdl/config/ltmain.m4sh (func_emit_wrapper_part1):
+ new function.
+ (func_emit_wrapper_part2): new function.
+ (func_emit_wrapper): delegate to new functions.
+ (func_emit_cwrapperexe_src) [__CYGWIN__ && __STRICT_ANSI__]:
+ ensure realpath is declared.
+ (func_emit_cwrapperexe_src): declare two different strings
+ to each hold part of the wrapper script content. Initialize
+ using new func_emit_wrapper_partX functions.
+ (func_emit_cwrapperexe_src) [main]: when emitting wrapper
+ script content, use both strings.
+ Reported by Yaakov Selkowitz.
+
2008-05-06 Charles Wilson <address@hidden>
Ensure $OBJDUMP is defined
diff --git a/libltdl/config/ltmain.m4sh b/libltdl/config/ltmain.m4sh
index 33689b9..09dc434 100644
--- a/libltdl/config/ltmain.m4sh
+++ b/libltdl/config/ltmain.m4sh
@@ -2249,25 +2249,16 @@ func_extract_archives ()
-# func_emit_wrapper arg
+# func_emit_wrapper_part1 [arg=no]
#
-# emit a libtool wrapper script on stdout
-# don't directly open a file because we may want to
-# incorporate the script contents within a cygwin/mingw
-# wrapper executable. Must ONLY be called from within
-# func_mode_link because it depends on a number of variable
-# set therein.
-#
-# arg is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
-# variable will take. If 'yes', then the emitted script
-# will assume that the directory in which it is stored is
-# the '.lib' directory. This is a cygwin/mingw-specific
-# behavior.
-func_emit_wrapper ()
+# Emit the first part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part1 ()
{
- func_emit_wrapper_arg1=no
+ func_emit_wrapper_part1_arg1=no
if test -n "$1" ; then
- func_emit_wrapper_arg1=$1
+ func_emit_wrapper_part1_arg1=$1
fi
$ECHO "\
@@ -2352,10 +2343,27 @@ else
file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
done
+"
+}
+# end: func_emit_wrapper_part1
+
+# func_emit_wrapper_part2 [arg=no]
+#
+# Emit the second part of a libtool wrapper script on stdout.
+# For more information, see the description associated with
+# func_emit_wrapper(), below.
+func_emit_wrapper_part2 ()
+{
+ func_emit_wrapper_part2_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_part2_arg1=$1
+ fi
+
+ $ECHO "\
# Usually 'no', except on cygwin/mingw when embedded into
# the cwrapper.
- WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1
+ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
# special case for '.'
if test \"\$thisdir\" = \".\"; then
@@ -2472,7 +2480,36 @@ else
fi\
"
}
-# end: func_emit_wrapper
+# end: func_emit_wrapper_part2
+
+
+# func_emit_wrapper [arg=no]
+#
+# Emit a libtool wrapper script on stdout.
+# Don't directly open a file because we may want to
+# incorporate the script contents within a cygwin/mingw
+# wrapper executable. Must ONLY be called from within
+# func_mode_link because it depends on a number of variables
+# set therein.
+#
+# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
+# variable will take. If 'yes', then the emitted script
+# will assume that the directory in which it is stored is
+# the $objdir directory. This is a cygwin/mingw-specific
+# behavior.
+func_emit_wrapper ()
+{
+ func_emit_wrapper_arg1=no
+ if test -n "$1" ; then
+ func_emit_wrapper_arg1=$1
+ fi
+
+ # split this up so that func_emit_cwrapperexe_src
+ # can call each part independently.
+ func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
+ func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
+}
+
# func_emit_cwrapperexe_src
# emit the source code for a wrapper executable on stdout
@@ -2509,6 +2546,9 @@ EOF
# include <stdint.h>
# ifdef __CYGWIN__
# include <io.h>
+# ifdef __STRICT_ANSI__
+char *realpath (const char *, char *);
+# endif
# endif
#endif
#include <malloc.h>
@@ -2616,10 +2656,18 @@ int check_executable (const char *path);
char *strendzap (char *str, const char *pat);
void lt_fatal (const char *message, ...);
-static const char *script_text =
+static const char *script_text_part1 =
EOF
- func_emit_wrapper yes |
+ func_emit_wrapper_part1 yes |
+ $SED -e 's/\([\\"]\)/\\\1/g' \
+ -e 's/^/ "/' -e 's/$/\\n"/'
+ echo ";"
+ cat <<EOF
+
+static const char *script_text_part2 =
+EOF
+ func_emit_wrapper_part2 yes |
$SED -e 's/\([\\"]\)/\\\1/g' \
-e 's/^/ "/' -e 's/$/\\n"/'
echo ";"
@@ -2658,7 +2706,8 @@ EOF
esac
cat <<EOF
- printf ("%s", script_text);
+ printf ("%s", script_text_part1);
+ printf ("%s", script_text_part2);
return 0;
}
}
@@ -2750,7 +2799,8 @@ EOF
{
lt_fatal ("Could not open %s for writing", newargz[1]);
}
- fprintf (shwrapper, "%s", script_text);
+ fprintf (shwrapper, "%s", script_text_part1);
+ fprintf (shwrapper, "%s", script_text_part2);
fclose (shwrapper);
make_executable (newargz[1]);
--
1.5.5.1