Commit 71e1be97 authored by Craig Silverstein's avatar Craig Silverstein

* Update acx_pthread.m4 for nostdlib (liujisi)

        * Typo fix in docs (bogdand)
        * Change ReparseCommandLineFlags to return void (csilvers)


git-svn-id: https://gflags.googlecode.com/svn/trunk@46 6586e3c6-dcc4-952a-343f-ff74eb82781d
parent 24b4c59e
...@@ -15094,6 +15094,77 @@ $as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shar ...@@ -15094,6 +15094,77 @@ $as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shar
acx_pthread_ok=no acx_pthread_ok=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether what we have so far is sufficient with -nostdlib" >&5
$as_echo_n "checking whether what we have so far is sufficient with -nostdlib... " >&6; }
CFLAGS="-nostdlib $CFLAGS"
# we need c with nostdlib
LIBS="$LIBS -lc"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
main ()
{
pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
done=yes
else
done=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test "x$done" = xyes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test x"$done" = xno; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lpthread saves the day" >&5
$as_echo_n "checking whether -lpthread saves the day... " >&6; }
LIBS="-lpthread $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
main ()
{
pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0);
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
done=yes
else
done=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
if test "x$done" = xyes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
PTHREAD_LIBS="$PTHREAD_LIBS -lpthread"
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&5
$as_echo "$as_me: WARNING: Impossible to determine how to use pthreads with shared libraries and -nostdlib" >&2;}
fi
fi
CFLAGS="$save_CFLAGS" CFLAGS="$save_CFLAGS"
LIBS="$save_LIBS" LIBS="$save_LIBS"
CC="$save_CC" CC="$save_CC"
......
...@@ -218,7 +218,7 @@ two files. This causes the flag to be a global variable.</p> ...@@ -218,7 +218,7 @@ two files. This causes the flag to be a global variable.</p>
<p>After DEFINE-ing a flag, you may optionally register a validator <p>After DEFINE-ing a flag, you may optionally register a validator
function with the flag. If you do this, after the flag is parsed from function with the flag. If you do this, after the flag is parsed from
the commandline, and whenever its value is changes via a call to the commandline, and whenever its value is changed via a call to
<code>SetCommandLineOption()</code>, the validator function is called <code>SetCommandLineOption()</code>, the validator function is called
with the new value as an argument. The validator function should with the new value as an argument. The validator function should
return 'true' if the flag value is valid, and false otherwise. return 'true' if the flag value is valid, and false otherwise.
......
...@@ -340,6 +340,40 @@ if test "x$acx_pthread_ok" = xyes; then ...@@ -340,6 +340,40 @@ if test "x$acx_pthread_ok" = xyes; then
acx_pthread_ok=no acx_pthread_ok=no
fi fi
AC_MSG_CHECKING([whether what we have so far is sufficient with -nostdlib])
CFLAGS="-nostdlib $CFLAGS"
# we need c with nostdlib
LIBS="$LIBS -lc"
AC_TRY_LINK([#include <pthread.h>],
[pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
[done=yes],[done=no])
if test "x$done" = xyes; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
fi
if test x"$done" = xno; then
AC_MSG_CHECKING([whether -lpthread saves the day])
LIBS="-lpthread $LIBS"
AC_TRY_LINK([#include <pthread.h>],
[pthread_t th; pthread_join(th, 0);
pthread_attr_init(0); pthread_cleanup_push(0, 0);
pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
[done=yes],[done=no])
if test "x$done" = xyes; then
AC_MSG_RESULT([yes])
PTHREAD_LIBS="$PTHREAD_LIBS -lpthread"
else
AC_MSG_RESULT([no])
AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries and -nostdlib])
fi
fi
CFLAGS="$save_CFLAGS" CFLAGS="$save_CFLAGS"
LIBS="$save_LIBS" LIBS="$save_LIBS"
CC="$save_CC" CC="$save_CC"
......
...@@ -1934,7 +1934,7 @@ void AllowCommandLineReparsing() { ...@@ -1934,7 +1934,7 @@ void AllowCommandLineReparsing() {
allow_command_line_reparsing = true; allow_command_line_reparsing = true;
} }
uint32 ReparseCommandLineNonHelpFlags() { void ReparseCommandLineNonHelpFlags() {
// We make a copy of argc and argv to pass in // We make a copy of argc and argv to pass in
const vector<string>& argvs = GetArgvs(); const vector<string>& argvs = GetArgvs();
int tmp_argc = static_cast<int>(argvs.size()); int tmp_argc = static_cast<int>(argvs.size());
...@@ -1942,13 +1942,11 @@ uint32 ReparseCommandLineNonHelpFlags() { ...@@ -1942,13 +1942,11 @@ uint32 ReparseCommandLineNonHelpFlags() {
for (int i = 0; i < tmp_argc; ++i) for (int i = 0; i < tmp_argc; ++i)
tmp_argv[i] = strdup(argvs[i].c_str()); // TODO(csilvers): don't dup tmp_argv[i] = strdup(argvs[i].c_str()); // TODO(csilvers): don't dup
const int retval = ParseCommandLineNonHelpFlags(&tmp_argc, &tmp_argv, false); ParseCommandLineNonHelpFlags(&tmp_argc, &tmp_argv, false);
for (int i = 0; i < tmp_argc; ++i) for (int i = 0; i < tmp_argc; ++i)
free(tmp_argv[i]); free(tmp_argv[i]);
delete[] tmp_argv; delete[] tmp_argv;
return retval;
} }
void ShutDownCommandLineFlags() { void ShutDownCommandLineFlags() {
......
...@@ -385,9 +385,7 @@ extern void AllowCommandLineReparsing(); ...@@ -385,9 +385,7 @@ extern void AllowCommandLineReparsing();
// separate command line argument that follows the flag argument. // separate command line argument that follows the flag argument.
// Intended for handling flags from dynamically loaded libraries, // Intended for handling flags from dynamically loaded libraries,
// since their flags are not registered until they are loaded. // since their flags are not registered until they are loaded.
// Returns the index (into the original argv) of the first non-flag extern void ReparseCommandLineNonHelpFlags();
// argument. (If remove_flags is true, will always return 1.)
extern uint32 ReparseCommandLineNonHelpFlags();
// Clean up memory allocated by flags. This is only needed to reduce // Clean up memory allocated by flags. This is only needed to reduce
// the quantity of "potentially leaked" reports emitted by memory // the quantity of "potentially leaked" reports emitted by memory
......
...@@ -370,7 +370,8 @@ extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage); ...@@ -370,7 +370,8 @@ extern GFLAGS_DLL_DECL void SetUsageMessage(const std::string& usage);
// Looks for flags in argv and parses them. Rearranges argv to put // Looks for flags in argv and parses them. Rearranges argv to put
// flags first, or removes them entirely if remove_flags is true. // flags first, or removes them entirely if remove_flags is true.
// If a flag is defined more than once in the command line or flag // If a flag is defined more than once in the command line or flag
// file, the last definition is used. // file, the last definition is used. Returns the index (into argv)
// of the first non-flag argument.
// See top-of-file for more details on this function. // See top-of-file for more details on this function.
#ifndef SWIG // In swig, use ParseCommandLineFlagsScript() instead. #ifndef SWIG // In swig, use ParseCommandLineFlagsScript() instead.
extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv, extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv,
...@@ -384,9 +385,10 @@ extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv, ...@@ -384,9 +385,10 @@ extern GFLAGS_DLL_DECL uint32 ParseCommandLineFlags(int *argc, char*** argv,
// changing default values for some FLAGS (via // changing default values for some FLAGS (via
// e.g. SetCommandLineOptionWithMode calls) between the time of // e.g. SetCommandLineOptionWithMode calls) between the time of
// command line parsing and the time of dumping help information for // command line parsing and the time of dumping help information for
// the flags as a result of command line parsing. // the flags as a result of command line parsing. If a flag is
// If a flag is defined more than once in the command line or flag // defined more than once in the command line or flag file, the last
// file, the last definition is used. // definition is used. Returns the index (into argv) of the first
// non-flag argument. (If remove_flags is true, will always return 1.)
extern GFLAGS_DLL_DECL uint32 ParseCommandLineNonHelpFlags(int *argc, char*** argv, extern GFLAGS_DLL_DECL uint32 ParseCommandLineNonHelpFlags(int *argc, char*** argv,
bool remove_flags); bool remove_flags);
// This is actually defined in commandlineflags_reporting.cc. // This is actually defined in commandlineflags_reporting.cc.
...@@ -400,12 +402,14 @@ extern GFLAGS_DLL_DECL void HandleCommandLineHelpFlags(); // in commandlinefla ...@@ -400,12 +402,14 @@ extern GFLAGS_DLL_DECL void HandleCommandLineHelpFlags(); // in commandlinefla
// are spawned. // are spawned.
extern GFLAGS_DLL_DECL void AllowCommandLineReparsing(); extern GFLAGS_DLL_DECL void AllowCommandLineReparsing();
// Reparse the flags that have not yet been recognized. // Reparse the flags that have not yet been recognized. Only flags
// Only flags registered since the last parse will be recognized. // registered since the last parse will be recognized. Any flag value
// Any flag value must be provided as part of the argument using "=", // must be provided as part of the argument using "=", not as a
// not as a separate command line argument that follows the flag argument. // separate command line argument that follows the flag argument.
// Intended for handling flags from dynamically loaded libraries, // Intended for handling flags from dynamically loaded libraries,
// since their flags are not registered until they are loaded. // since their flags are not registered until they are loaded.
// Returns the index (into the original argv) of the first non-flag
// argument. (If remove_flags is true, will always return 1.)
extern GFLAGS_DLL_DECL uint32 ReparseCommandLineNonHelpFlags(); extern GFLAGS_DLL_DECL uint32 ReparseCommandLineNonHelpFlags();
// Clean up memory allocated by flags. This is only needed to reduce // Clean up memory allocated by flags. This is only needed to reduce
...@@ -478,7 +482,7 @@ extern const char kStrippedFlagHelp[]; ...@@ -478,7 +482,7 @@ extern const char kStrippedFlagHelp[];
#if defined(STRIP_FLAG_HELP) && STRIP_FLAG_HELP > 0 #if defined(STRIP_FLAG_HELP) && STRIP_FLAG_HELP > 0
// Need this construct to avoid the 'defined but not used' warning. // Need this construct to avoid the 'defined but not used' warning.
#define MAYBE_STRIPPED_HELP(txt) (false ? (txt) : kStrippedFlagHelp) #define MAYBE_STRIPPED_HELP(txt) (false ? (txt) : ::google::kStrippedFlagHelp)
#else #else
#define MAYBE_STRIPPED_HELP(txt) txt #define MAYBE_STRIPPED_HELP(txt) txt
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment