Commit e0b71e57 authored by Craig Silverstein's avatar Craig Silverstein

Thu Sep 18 12:58:05 2008 Google Inc. <opensource@google.com>

	* google-gflags: version 1.0rc2
	* Report current flag values in --helpxml (hdn)
	* Fix compilation troubles with gcc 4.3.3 (simonb)
	* BUG FIX: I was missing a std:: in DECLARE_string (csilvers)
	* BUG FIX: Clarify in docs how to specify --bool flags (csilvers)
	* BUG FIX: Fix --helpshort for source files not in a subdir (csilvers)
	* BUG FIX: Fix python unittest for 64-bit builds (bcmills)


git-svn-id: https://gflags.googlecode.com/svn/trunk@27 6586e3c6-dcc4-952a-343f-ff74eb82781d
parent 67914687
Tue Aug 19 16:15:48 2008 Google Inc. <opensource@google.com>
Thu Sep 18 12:58:05 2008 Google Inc. <opensource@google.com>
* google-gflags: version 1.0rc2
* Report current flag values in --helpxml (hdn)
* Fix compilation troubles with gcc 4.3.3 (simonb)
* BUG FIX: I was missing a std:: in DECLARE_string (csilvers)
* BUG FIX: Clarify in docs how to specify --bool flags (csilvers)
* BUG FIX: Fix --helpshort for source files not in a subdir (csilvers)
* BUG FIX: Fix python unittest for 64-bit builds (bcmills)
Tue Aug 19 16:15:48 2008
* google-gflags: version 1.0rc1
* Move #include files from google/ to gflags/ (csilvers)
......
Installation Instructions
*************************
Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
Foundation, Inc.
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
Basic Installation
==================
These are generic installation instructions.
These are generic installation instructions.
The `configure' shell script attempts to guess correct values for
various system-dependent variables used during compilation. It uses
......@@ -70,9 +68,9 @@ The simplest way to compile this package is:
Compilers and Options
=====================
Some systems require unusual options for compilation or linking that the
`configure' script does not know about. Run `./configure --help' for
details on some of the pertinent environment variables.
Some systems require unusual options for compilation or linking that
the `configure' script does not know about. Run `./configure --help'
for details on some of the pertinent environment variables.
You can give `configure' initial values for configuration parameters
by setting variables in the command line or in the environment. Here
......@@ -85,7 +83,7 @@ is an example:
Compiling For Multiple Architectures
====================================
You can compile the package for more than one kind of computer at the
You can compile the package for more than one kind of computer at the
same time, by placing the object files for each architecture in their
own directory. To do this, you must use a version of `make' that
supports the `VPATH' variable, such as GNU `make'. `cd' to the
......@@ -102,19 +100,19 @@ for another architecture.
Installation Names
==================
By default, `make install' installs the package's commands under
`/usr/local/bin', include files under `/usr/local/include', etc. You
can specify an installation prefix other than `/usr/local' by giving
`configure' the option `--prefix=PREFIX'.
By default, `make install' will install the package's files in
`/usr/local/bin', `/usr/local/man', etc. You can specify an
installation prefix other than `/usr/local' by giving `configure' the
option `--prefix=PATH'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
pass the option `--exec-prefix=PREFIX' to `configure', the package uses
PREFIX as the prefix for installing programs and libraries.
Documentation and other data files still use the regular prefix.
give `configure' the option `--exec-prefix=PATH', the package will use
PATH as the prefix for installing programs and libraries.
Documentation and other data files will still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
options like `--bindir=PATH' to specify different values for particular
kinds of files. Run `configure --help' for a list of the directories
you can set and what kinds of files go in them.
......@@ -125,7 +123,7 @@ option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
Optional Features
=================
Some packages pay attention to `--enable-FEATURE' options to
Some packages pay attention to `--enable-FEATURE' options to
`configure', where FEATURE indicates an optional part of the package.
They may also pay attention to `--with-PACKAGE' options, where PACKAGE
is something like `gnu-as' or `x' (for the X Window System). The
......@@ -140,11 +138,11 @@ you can use the `configure' options `--x-includes=DIR' and
Specifying the System Type
==========================
There may be some features `configure' cannot figure out automatically,
but needs to determine by the type of machine the package will run on.
Usually, assuming the package is built to be run on the _same_
architectures, `configure' can figure that out, but if it prints a
message saying it cannot guess the machine type, give it the
There may be some features `configure' cannot figure out
automatically, but needs to determine by the type of machine the package
will run on. Usually, assuming the package is built to be run on the
_same_ architectures, `configure' can figure that out, but if it prints
a message saying it cannot guess the machine type, give it the
`--build=TYPE' option. TYPE can either be a short name for the system
type, such as `sun4', or a canonical name which has the form:
......@@ -159,7 +157,7 @@ where SYSTEM can have one of these forms:
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
use the option `--target=TYPE' to select the type of system they will
use the `--target=TYPE' option to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
......@@ -170,9 +168,9 @@ eventually be run) with `--host=TYPE'.
Sharing Defaults
================
If you want to set default values for `configure' scripts to share, you
can create a site shell script called `config.site' that gives default
values for variables like `CC', `cache_file', and `prefix'.
If you want to set default values for `configure' scripts to share,
you can create a site shell script called `config.site' that gives
default values for variables like `CC', `cache_file', and `prefix'.
`configure' looks for `PREFIX/share/config.site' if it exists, then
`PREFIX/etc/config.site' if it exists. Or, you can set the
`CONFIG_SITE' environment variable to the location of the site script.
......@@ -181,7 +179,7 @@ A warning: not all `configure' scripts look for a site script.
Defining Variables
==================
Variables not defined in a site shell script can be set in the
Variables not defined in a site shell script can be set in the
environment passed to `configure'. However, some packages may run
configure again during the build, and the customized values of these
variables may be lost. In order to avoid this problem, you should set
......@@ -189,18 +187,14 @@ them in the `configure' command line, using `VAR=value'. For example:
./configure CC=/usr/local2/bin/gcc
causes the specified `gcc' to be used as the C compiler (unless it is
overridden in the site shell script). Here is a another example:
/bin/bash ./configure CONFIG_SHELL=/bin/bash
Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
configuration-related scripts to be executed by `/bin/bash'.
will cause the specified gcc to be used as the C compiler (unless it is
overridden in the site shell script).
`configure' Invocation
======================
`configure' recognizes the following options to control how it operates.
`configure' recognizes the following options to control how it
operates.
`--help'
`-h'
......
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.59 for gflags 1.0rc1.
# Generated by GNU Autoconf 2.59 for gflags 1.0rc2.
#
# Report bugs to <opensource@google.com>.
#
......@@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='gflags'
PACKAGE_TARNAME='gflags'
PACKAGE_VERSION='1.0rc1'
PACKAGE_STRING='gflags 1.0rc1'
PACKAGE_VERSION='1.0rc2'
PACKAGE_STRING='gflags 1.0rc2'
PACKAGE_BUGREPORT='opensource@google.com'
ac_unique_file="README"
......@@ -954,7 +954,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures gflags 1.0rc1 to adapt to many kinds of systems.
\`configure' configures gflags 1.0rc2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
......@@ -1020,7 +1020,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of gflags 1.0rc1:";;
short | recursive ) echo "Configuration of gflags 1.0rc2:";;
esac
cat <<\_ACEOF
......@@ -1163,7 +1163,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
gflags configure 1.0rc1
gflags configure 1.0rc2
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
......@@ -1177,7 +1177,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by gflags $as_me 1.0rc1, which was
It was created by gflags $as_me 1.0rc2, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
......@@ -1823,7 +1823,7 @@ fi
# Define the identity of the package.
PACKAGE='gflags'
VERSION='1.0rc1'
VERSION='1.0rc2'
cat >>confdefs.h <<_ACEOF
......@@ -21261,7 +21261,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
This file was extended by gflags $as_me 1.0rc1, which was
This file was extended by gflags $as_me 1.0rc2, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
......@@ -21324,7 +21324,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
gflags config.status 1.0rc1
gflags config.status 1.0rc2
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
......
......@@ -4,7 +4,7 @@
# make sure we're interpreted by some minimal autoconf
AC_PREREQ(2.57)
AC_INIT(gflags, 1.0rc1, opensource@google.com)
AC_INIT(gflags, 1.0rc2, opensource@google.com)
# The argument here is just something that should be in the current directory
# (for sanity checking)
AC_CONFIG_SRCDIR(README)
......
......@@ -81,11 +81,11 @@ translates directly to Python.</p>
<p> Defining a flag is easy: just use the appropriate macro for the
type you want the flag to be, as defined at the bottom of
<code>google/gflags.h</code>. Here's an example file,
<code>gflags/gflags.h</code>. Here's an example file,
<code>foo.cc</code>:</p>
<pre>
#include &lt;google/gflags.h&gt;
#include &lt;gflags/gflags.h&gt;
DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");
DEFINE_string(languages, "english,french,german",
......@@ -287,14 +287,12 @@ specify the "languages" flag:</p>
<li> <code>app_containing_foo -languages "chinese,japanese,korean"</code>
</ul>
<p>For boolean flags, there are even more possibilities:</p>
<p>For boolean flags, the possibilities are slightly different:</p>
<ul>
<li> <code>app_containing_foo --big_menu</code>
<li> <code>app_containing_foo --nobig_menu</code>
<li> <code>app_containing_foo --big_menu=true</code>
<li> <code>app_containing_foo --big_menu=false</code>
<li> <code>app_containing_foo --big_menu true</code>
<li> <code>app_containing_foo --big_menu false</code>
</ul>
<p>(as well as the single-dash variant on all of these).</p>
......@@ -477,7 +475,7 @@ methods such as <code>google::SetUsageMessage</code>, see
<p>If your application has code like this:</p>
<pre>
#define STRIP_FLAG_HELP 1 // this must go before the #include!
#include &lt;google/gflags.h&gt;
#include &lt;gflags/gflags.h&gt;
</pre>
<p>we will remove the help messages from the compiled source. This can
reduce the size of the resulting binary somewhat, and may also be
......
This diff is collapsed.
This diff is collapsed.
google-gflags (1.0rc2-1) unstable; urgency=low
* New upstream release.
-- Google Inc. <opensource@google.com> Tue, 18 Sep 2008 12:58:05 -0700
google-gflags (1.0rc1-1) unstable; urgency=low
* New upstream release.
......
......@@ -7,7 +7,7 @@ Summary: A commandline flags library that allows for distributed flags
Version: %VERSION
Release: %rel
Group: Development/Libraries
URL: http://code.google.com/p/gflags
URL: http://code.google.com/p/google-gflags
License: BSD
Vendor: Google
Packager: Google Inc. <opensource@google.com>
......
......@@ -243,14 +243,12 @@ class FlagsUnitTest(unittest.TestCase):
# Test integer argument passing
argv = ('./program', '--x', '0x12345')
argv = FLAGS(argv)
# 0x12345 == 74565
self.assertEquals(FLAGS.x, 74565)
self.assertEquals(FLAGS.x, 0x12345)
self.assertEquals(type(FLAGS.x), int)
argv = ('./program', '--x', '0x123456789A')
argv = ('./program', '--x', '0x1234567890ABCDEF1234567890ABCDEF')
argv = FLAGS(argv)
# 0x123456789A == 78187493530L
self.assertEquals(FLAGS.x, 78187493530L)
self.assertEquals(FLAGS.x, 0x1234567890ABCDEF1234567890ABCDEF)
self.assertEquals(type(FLAGS.x), long)
# Treat 0-prefixed parameters as base-10, not base-8
......
......@@ -210,6 +210,7 @@ typedef bool (*ValidateFnProto)();
// given type, and back. Thread-compatible.
// --------------------------------------------------------------------
class CommandLineFlag;
class FlagValue {
public:
FlagValue(void* valbuf, const char* type);
......@@ -223,7 +224,7 @@ class FlagValue {
friend class GOOGLE_NAMESPACE::FlagSaverImpl; // calls New()
friend class FlagRegistry; // checks value_buffer_ for flags_by_ptr_ map
template <typename T> friend T GetFromEnv(const char*, const char*, T);
friend bool TryParseLocked(const class CommandLineFlag*, FlagValue*,
friend bool TryParseLocked(const CommandLineFlag*, FlagValue*,
const char*, string*); // for New(), CopyFrom()
enum ValueType {FV_BOOL, FV_INT32, FV_INT64, FV_UINT64, FV_DOUBLE, FV_STRING};
......
......@@ -494,7 +494,7 @@ extern bool FlagsTypeWarn(const char *name);
// try to avoid crashes in that case, we use a char buffer to store
// the string, which we can static-initialize, and then placement-new
// into it later. It's not perfect, but the best we can do.
#define DECLARE_string(name) namespace fLS { extern string& FLAGS_##name; } \
#define DECLARE_string(name) namespace fLS { extern std::string& FLAGS_##name; } \
using fLS::FLAGS_##name
// We need to define a var named FLAGS_no##name so people don't define
......
......@@ -202,7 +202,7 @@ struct NotableFlags {
static void PrintFlagCompletionInfo(void) {
string cursor_word = FLAGS_tab_completion_word;
string canonical_token;
CompletionOptions options;
CompletionOptions options = { };
CanonicalizeCursorWordAndSearchOptions(
cursor_word,
&canonical_token,
......
......@@ -201,6 +201,7 @@ static string DescribeOneFlagInXML(const CommandLineFlagInfo& flag) {
"<name>" + XMLText(flag.name) + "</name>" +
"<meaning>" + XMLText(flag.description) + "</meaning>" +
"<default>" + XMLText(flag.default_value) + "</default>" +
"<current>" + XMLText(flag.current_value) + "</current>" +
"<type>" + XMLText(flag.type) + "</type>" +
string("</flag>"));
}
......@@ -234,9 +235,16 @@ static bool FileMatchesSubstring(const string& filename,
for (vector<string>::const_iterator target = substrings.begin();
target != substrings.end();
++target) {
if (strstr(filename.c_str(), target->c_str()) != NULL) {
if (strstr(filename.c_str(), target->c_str()) != NULL)
return true;
// If the substring starts with a '/', that means that we want
// the string to be at the beginning of a directory component.
// That should match the first directory component as well, so
// we allow '/foo' to match a filename of 'foo'.
if (!target->empty() && (*target)[0] == '/' &&
strncmp(filename.c_str(), target->c_str() + 1,
strlen(target->c_str() + 1)) == 0)
return true;
}
}
return false;
}
......
......@@ -31,7 +31,7 @@
// Author: Marius Eriksen
//
// For now, this unit test does not cover all features of
// commandlineflags.cc
// gflags.cc
#include "config.h"
#include <stdio.h>
......@@ -51,11 +51,13 @@ void (*unused_fn)() = &GOOGLE_NAMESPACE::HandleCommandLineCompletions;
using std::vector;
using std::string;
using GOOGLE_NAMESPACE::int32;
using GOOGLE_NAMESPACE::FlagRegisterer;
// Returns the number of elements in an array.
#define GET_ARRAY_SIZE(arr) (sizeof(arr)/sizeof(*(arr)))
DECLARE_string(tryfromenv); // in commandlineflags.cc
DECLARE_string(tryfromenv); // in gflags.cc
DEFINE_string(test_tmpdir, "/tmp/gflags_unittest", "Dir we use for temp files");
DEFINE_string(srcdir, GOOGLE_NAMESPACE::StringFromEnv("SRCDIR", "."),
......@@ -111,8 +113,8 @@ static string ChangeableString() {
DEFINE_string(changeable_string_var, ChangeableString(), "");
// These are never used in this unittest, but can be used by
// commandlineflags_unittest.sh when it needs to specify flags
// that are legal for commandlineflags_unittest but don't need to
// gflags_unittest.sh when it needs to specify flags
// that are legal for gflags_unittest but don't need to
// be a particular value.
DEFINE_bool(unused_bool, true, "unused bool-ness");
DEFINE_int32(unused_int32, -1001, "");
......@@ -129,6 +131,31 @@ static bool AlwaysFail(const char* flag, bool value) { return value == false; }
DEFINE_bool(always_fail, false, "will fail to validate when you set it");
static const bool dummy = GOOGLE_NAMESPACE::RegisterFlagValidator(&FLAGS_always_fail, AlwaysFail);
// This is a psuedo-flag -- we want to register a flag with a filename
// at the top level, but there is no way to do this except by faking
// the filename.
namespace fLI {
static const int32 FLAGS_nonotldflag1 = 12;
int32 FLAGS_tldflag1 = FLAGS_nonotldflag1;
int32 FLAGS_notldflag1 = FLAGS_nonotldflag1;
static FlagRegisterer o_tldflag1(
"tldflag1", "int32",
"should show up in --helpshort", "gflags_unittest.cc",
&FLAGS_tldflag1, &FLAGS_notldflag1);
}
using fLI::FLAGS_tldflag1;
namespace fLI {
static const int32 FLAGS_nonotldflag2 = 23;
int32 FLAGS_tldflag2 = FLAGS_nonotldflag2;
int32 FLAGS_notldflag2 = FLAGS_nonotldflag2;
static FlagRegisterer o_tldflag2(
"tldflag2", "int32",
"should show up in --helpshort", "gflags_unittest.",
&FLAGS_tldflag2, &FLAGS_notldflag2);
}
using fLI::FLAGS_tldflag2;
_START_GOOGLE_NAMESPACE_
// The following is some bare-bones testing infrastructure
......@@ -674,7 +701,7 @@ TEST(FromEnvTest, LegalValues) {
}
// Tests that the FooFromEnv dies on parse-error
TEST(FromEnvTest, IllegalValues) {
TEST(FromEnvDeathTest, IllegalValues) {
setenv("BOOL_BAD1", "so true!",1 );
setenv("BOOL_BAD2", "", 1);
EXPECT_DEATH(BoolFromEnv("BOOL_BAD1", false), "error parsing env variable");
......@@ -1039,7 +1066,7 @@ TEST(GetCommandLineFlagInfoOrDieTest, FlagExistsAndWasAssigned) {
EXPECT_EQ(false, info.has_validator_fn);
}
TEST(GetCommandLineFlagInfoOrDieTest, FlagDoesNotExist) {
TEST(GetCommandLineFlagInfoOrDieDeathTest, FlagDoesNotExist) {
EXPECT_DEATH(GetCommandLineFlagInfoOrDie("test_int3210"),
".*: flag test_int3210 does not exist");
}
......@@ -1249,7 +1276,7 @@ TEST(ParseCommandLineFlagsAndDashArgs, OneDashArg) {
EXPECT_EQ(0, ParseTestFlag(false, GET_ARRAY_SIZE(argv) - 1, argv));
}
TEST(ParseCommandLineFlagsUnknownFlag,
TEST(ParseCommandLineFlagsUnknownFlagDeathTest,
FlagIsCompletelyUnknown) {
const char* argv[] = {
"my_test",
......@@ -1263,7 +1290,7 @@ TEST(ParseCommandLineFlagsUnknownFlag,
"unknown command line flag.*");
}
TEST(ParseCommandLineFlagsUnknownFlag,
TEST(ParseCommandLineFlagsUnknownFlagDeathTest,
BoolFlagIsCompletelyUnknown) {
const char* argv[] = {
"my_test",
......@@ -1277,7 +1304,7 @@ TEST(ParseCommandLineFlagsUnknownFlag,
"unknown command line flag.*");
}
TEST(ParseCommandLineFlagsUnknownFlag,
TEST(ParseCommandLineFlagsUnknownFlagDeathTest,
FlagIsNotABool) {
const char* argv[] = {
"my_test",
......@@ -1351,7 +1378,7 @@ TEST(FlagsValidator, ValidFlagViaSetValue) {
EXPECT_TRUE(RegisterFlagValidator(&FLAGS_test_flag, NULL));
}
TEST(FlagsValidator, InvalidFlagViaArgv) {
TEST(FlagsValidatorDeathTest, InvalidFlagViaArgv) {
const char* argv[] = {
"my_test",
"--test_flag=50",
......@@ -1385,7 +1412,7 @@ TEST(FlagsValidator, InvalidFlagViaSetValue) {
EXPECT_TRUE(RegisterFlagValidator(&FLAGS_test_flag, NULL));
}
TEST(FlagsValidator, InvalidFlagNeverSet) {
TEST(FlagsValidatorDeathTest, InvalidFlagNeverSet) {
// If a flag keeps its default value, and that default value is
// invalid, we should die at argv-parse time.
const char* argv[] = {
......
......@@ -130,6 +130,10 @@ Expect $LINENO 1 "/gflags_reporting.cc" "" -helpfull
# --helpshort should show only flags from the unittest itself
Expect $LINENO 1 "/gflags_unittest.cc" "/gflags_reporting.cc" --helpshort
# --helpshort should show the tldflag we created in the unittest dir
Expect $LINENO 1 "tldflag1" "/google.cc" --helpshort
Expect $LINENO 1 "tldflag2" "/google.cc" --helpshort
# --helpshort should work if the main source file is suffixed with [_-]main
ExpectExe "$EXE2" $LINENO 1 "/gflags_unittest-main.cc" "/gflags_reporting.cc" \
--helpshort
......@@ -158,9 +162,9 @@ Expect $LINENO 1 "/gflags_unittest.cc" "/gflags.cc" \
-helpmatch=unittest
# if no flags are found with helpmatch or helpon, suggest --help
Expect $LINENO 1 "No modules matched" "/commandlineflags_unittest.cc" \
Expect $LINENO 1 "No modules matched" "/gflags_unittest.cc" \
-helpmatch=nosuchsubstring
Expect $LINENO 1 "No modules matched" "/commandlineflags_unittest.cc" \
Expect $LINENO 1 "No modules matched" "/gflags_unittest.cc" \
-helpon=nosuchmodule
# helppackage shows all the flags in the same dir as this unittest
......
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