# ----------------------------------------------------------------------------
# configure options
option (BUILD_SHARED_LIBS "Request build of shared libraries." OFF)
+set (GFLAGS_SHARED_LIBS ${BUILD_SHARED_LIBS})
set (GFLAGS_NAMESPACE "gflags" CACHE STRING "C++ namespace identifier of gflags library.")
mark_as_advanced (GFLAGS_NAMESPACE)
endif ()
endif ()
+if (BUILD_SHARED_LIBS)
+ set (GFLAGS_SHARED 1)
+else ()
+ set (GFLAGS_SHARED 0)
+endif ()
+
# ----------------------------------------------------------------------------
# source files - excluding root subdirectory and/or .in suffix
set (PUBLIC_HDRS
"gflags.h"
+ "gflags_config.h"
"gflags_declare.h"
"gflags_completions.h"
)
# ----------------------------------------------------------------------------
# add library target
-if (WIN32)
+if (WIN32 AND BUILD_SHARED_LIBS)
add_definitions (-DGFLAGS_DLL_EXPORT)
endif ()
include_directories ("${PROJECT_SOURCE_DIR}/src")
-/* Generated from config.h.in during configuration using CMake. */
+/* Generated from config.h.in during build configuration using CMake. */
+
+// Note: This header file is only used internally. It is not part of public interface!
+
+#include "gflags_config.h"
// ---------------------------------------------------------------------------
-// Meta-information
+// Additional meta-information
// Name of package.
#define PACKAGE @PROJECT_NAME@
#define PACKAGE_BUGREPORT @PACKAGE_BUGREPORT@
// ---------------------------------------------------------------------------
-// Namespace for gflags symbols.
-#define GFLAGS_NAMESPACE @GFLAGS_NAMESPACE@
-
-// ---------------------------------------------------------------------------
// Available system headers
-// Whether sources are compiled on a Windows system
-#define WINDOWS (defined(_WIN32) || defined(WIN32) || defined(_WINDOWS))
-
// Define to 1 if you have the <fnmatch.h> header file.
#define HAVE_FNMATCH_H @HAVE_FNMATCH_H@
// ---------------------------------------------------------------------------
// Path separator
-#ifndef PATH_SEPARATOR
-# define PATH_SEPARATOR '/'
-#endif
+#define PATH_SEPARATOR '/'
// ---------------------------------------------------------------------------
-// Windows-specific definitions
-#if !defined(GFLAGS_DLL_DECL)
-# if defined(_MSC_VER)
-# if defined(GFLAGS_DLL_EXPORT)
-# define GFLAGS_DLL_DECL __declspec(dllexport)
-# else
-# define GFLAGS_DLL_DECL __declspec(dllimport)
-# endif
-# else
-# define GFLAGS_DLL_DECL
-# endif
-#endif
-
-#if WINDOWS
+// Windows port
+#ifdef _WIN32
// This must be defined before the windows.h is included.
// It's needed for mutex.h, to give access to the TryLock method.
# if !defined(_WIN32_WINNT) && !(defined( __MINGW32__) || defined(__MINGW64__))
# define _WIN32_WINNT 0x0400
# endif
+# if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+# define _CRT_SECURE_NO_WARNINGS
+# endif
# include "windows_port.h"
#endif
}
const char* ProgramInvocationShortName() { // like the GNU libc fn
const char* slash = strrchr(argv0, '/');
-#ifdef WINDOWS
+#ifdef _WINDOWS
if (!slash) slash = strrchr(argv0, '\\');
#endif
return slash ? slash + 1 : argv0;
#ifndef GFLAGS_GFLAGS_H_
#define GFLAGS_GFLAGS_H_
-
-#if !defined(GFLAGS_DLL_DECL)
-# if defined(_MSC_VER)
-# if defined(GFLAGS_DLL_EXPORT)
-# define GFLAGS_DLL_DECL __declspec(dllexport)
-# else
-# define GFLAGS_DLL_DECL __declspec(dllimport)
-# endif
-# else
-# define GFLAGS_DLL_DECL
-# endif
-#endif
-
-// We always want to export defined variables, dll or no
-#if !defined(GFLAGS_DLL_DEFINE_FLAG)
-# if defined(_MSC_VER)
-# define GFLAGS_DLL_DEFINE_FLAG __declspec(dllimport)
-# else
-# define GFLAGS_DLL_DEFINE_FLAG
-# endif
-#endif
-
-
#include <string>
#include <vector>
-#include <@GFLAGS_NAMESPACE@/gflags_declare.h> // IWYU pragma: export
+#include "gflags_config.h"
+#include "gflags_declare.h" // IWYU pragma: export
-namespace @GFLAGS_NAMESPACE@ {
+namespace GFLAGS_NAMESPACE {
// --------------------------------------------------------------------
// Convenience macro for the registration of a flag validator
#define DEFINE_validator(name, validator) \
static const bool name##_validator_registered = \
- @GFLAGS_NAMESPACE@::RegisterFlagValidator(&FLAGS_##name, validator)
+ GFLAGS_NAMESPACE::RegisterFlagValidator(&FLAGS_##name, validator)
// --------------------------------------------------------------------
FlagSaver(const FlagSaver&); // no copying!
void operator=(const FlagSaver&);
}
-@__ATTRIBUTE__UNUSED@;
+GFLAGS__ATTRIBUTE__UNUSED;
// --------------------------------------------------------------------
// Some deprecated or hopefully-soon-to-be-deprecated functions.
extern const char kStrippedFlagHelp[];
-} // namespace @GFLAGS_NAMESPACE@
+} // namespace GFLAGS_NAMESPACE
#ifndef SWIG // In swig, ignore the main flag declarations
#if defined(STRIP_FLAG_HELP) && STRIP_FLAG_HELP > 0
// Need this construct to avoid the 'defined but not used' warning.
#define MAYBE_STRIPPED_HELP(txt) \
- (false ? (txt) : @GFLAGS_NAMESPACE@::kStrippedFlagHelp)
+ (false ? (txt) : GFLAGS_NAMESPACE::kStrippedFlagHelp)
#else
#define MAYBE_STRIPPED_HELP(txt) txt
#endif
/* We always want to export defined variables, dll or no */ \
GFLAGS_DLL_DEFINE_FLAG type FLAGS_##name = FLAGS_nono##name; \
type FLAGS_no##name = FLAGS_nono##name; \
- static @GFLAGS_NAMESPACE@::FlagRegisterer o_##name( \
+ static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \
#name, #type, MAYBE_STRIPPED_HELP(help), __FILE__, \
&FLAGS_##name, &FLAGS_no##name); \
} \
DEFINE_VARIABLE(bool, B, name, val, txt)
#define DEFINE_int32(name, val, txt) \
- DEFINE_VARIABLE(@GFLAGS_NAMESPACE@::int32, I, \
+ DEFINE_VARIABLE(GFLAGS_NAMESPACE::int32, I, \
name, val, txt)
#define DEFINE_int64(name, val, txt) \
- DEFINE_VARIABLE(@GFLAGS_NAMESPACE@::int64, I64, \
+ DEFINE_VARIABLE(GFLAGS_NAMESPACE::int64, I64, \
name, val, txt)
#define DEFINE_uint64(name,val, txt) \
- DEFINE_VARIABLE(@GFLAGS_NAMESPACE@::uint64, U64, \
+ DEFINE_VARIABLE(GFLAGS_NAMESPACE::uint64, U64, \
name, val, txt)
#define DEFINE_double(name, val, txt) \
clstring* const FLAGS_no##name = ::fLS:: \
dont_pass0toDEFINE_string(s_##name[0].s, \
val); \
- static @GFLAGS_NAMESPACE@::FlagRegisterer o_##name( \
+ static GFLAGS_NAMESPACE::FlagRegisterer o_##name( \
#name, "string", MAYBE_STRIPPED_HELP(txt), __FILE__, \
s_##name[0].s, new (s_##name[1].s) clstring(*FLAGS_no##name)); \
extern GFLAGS_DLL_DEFINE_FLAG clstring& FLAGS_##name; \
--- /dev/null
+/* Generated from gflags_config.h.in during build configuration using CMake. */
+
+#ifndef GFLAGS_GFLAGS_CONFIG_H_
+#define GFLAGS_GFLAGS_CONFIG_H_
+
+// ---------------------------------------------------------------------------
+// Meta-information
+
+// Version number of gflags library.
+#define GFLAGS_VERSION_STRING "@PACKAGE_VERSION@"
+
+#define GFLAGS_VERSION_MAJOR @PACKAGE_VERSION_MAJOR@ ///< Major version number.
+#define GFLAGS_VERSION_MINOR @PACKAGE_VERSION_MINOR@ ///< Minor version number.
+#define GFLAGS_VERSION_PATCH @PACKAGE_VERSION_PATCH@ ///< Version patch number.
+
+// Whether gflags library is shared. Used for DLL import declaration.
+#cmakedefine GFLAGS_SHARED_LIBS
+
+// ---------------------------------------------------------------------------
+// Namespace for gflags symbols.
+#define GFLAGS_NAMESPACE @GFLAGS_NAMESPACE@
+
+// ---------------------------------------------------------------------------
+// Unused attribute declaration for GNU GCC.
+#define GFLAGS__ATTRIBUTE__UNUSED @GFLAGS__ATTRIBUTE_UNUSED@
+
+// ---------------------------------------------------------------------------
+// Windows DLL import/export.
+#if defined(_MSC_VER) && defined(GFLAGS_SHARED_LIBS)
+# ifdef GFLAGS_DLL_EXPORT
+# define GFLAGS_DLL_DECL __declspec(dllexport)
+# else
+# define GFLAGS_DLL_DECL __declspec(dllimport)
+# endif
+#else
+# define GFLAGS_DLL_DECL
+#endif
+
+// We always want to export defined variables, dll or no
+#if defined(_MSC_VER)
+# define GFLAGS_DLL_DEFINE_FLAG __declspec(dllexport)
+#else
+# define GFLAGS_DLL_DEFINE_FLAG
+#endif
+
+
+#endif // GFLAGS_GFLAGS_CONFIG_H_
\ No newline at end of file
#ifndef GFLAGS_WINDOWS_PORT_H_
#define GFLAGS_WINDOWS_PORT_H_
-#ifdef _WIN32
-
#ifndef WIN32_LEAN_AND_MEAN
# define WIN32_LEAN_AND_MEAN /* We always want minimal includes */
#endif
value = kFakeZero;
// Apparently the semantics of putenv() is that the input
// must live forever, so we leak memory here. :-(
- const int nameval_len = strlen(name) + 1 + strlen(value) + 1;
+ const size_t nameval_len = strlen(name) + 1 + strlen(value) + 1;
char* nameval = reinterpret_cast<char*>(malloc(nameval_len));
snprintf(nameval, nameval_len, "%s=%s", name, value);
_putenv(nameval);
#define PATH_MAX 1024
#endif
-#endif /* _WIN32 */
-
#endif /* GFLAGS_WINDOWS_PORT_H_ */