aboutsummaryrefslogtreecommitdiff
path: root/libcommon
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-09-14 12:00:03 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-09-14 12:00:03 +0200
commit0c370d056fe0848c8a9cf11c48e423f3f2e97264 (patch)
treed68548fb60758c0f027cb7ca024a9e1e290321fd /libcommon
parent71a46a05f30f6f02186ba2a03b29fae37bf9e585 (diff)
Use options parsing from database instead of our own
Diffstat (limited to 'libcommon')
-rw-r--r--libcommon/common/common.cxx55
-rw-r--r--libcommon/common/common.hxx2
-rw-r--r--libcommon/common/makefile42
-rw-r--r--libcommon/common/options.cli58
4 files changed, 28 insertions, 129 deletions
diff --git a/libcommon/common/common.cxx b/libcommon/common/common.cxx
index ed8be69..730b8ce 100644
--- a/libcommon/common/common.cxx
+++ b/libcommon/common/common.cxx
@@ -10,58 +10,39 @@
# include <common/config.h>
#endif
-#ifdef DB_ID_MYSQL
+#if defined(DB_ID_MYSQL)
# include <odb/mysql/database.hxx>
# include <odb/mysql/connection-factory.hxx>
+#else
+# error unknown database
#endif
#include <common/common.hxx>
-#include <common/options.hxx>
using namespace std;
using namespace odb;
auto_ptr<database>
-create_database (int argc, char* argv[], size_t max_connections)
+create_database (int& argc, char* argv[], size_t max_connections)
{
- try
+ if (argc > 1 && argv[1] == string ("--help"))
{
-#ifdef DB_ID_MYSQL
- cli::argv_file_scanner scan (argc, argv, "--options-file");
- cli::mysql_options ops (scan);
+ cerr << "Usage: " << argv[0] << " [options]" << endl
+ << "Options:" << endl;
- if (ops.help ())
- {
- cerr << "Usage: " << argv[0] << " [options]" << endl
- << "Options:" << endl;
- cli::mysql_options::print_usage (cerr);
- exit (0);
- }
+#if defined(DB_ID_MYSQL)
+ mysql::database::print_usage (cerr);
+#endif
- auto_ptr<mysql::connection_factory> f;
+ exit (0);
+ }
- if (max_connections != 0)
- f.reset (new mysql::connection_pool_factory (max_connections));
+#if defined(DB_ID_MYSQL)
+ auto_ptr<mysql::connection_factory> f;
- return auto_ptr<database> (
- new mysql::database (
- ops.user (),
- ops.password_specified () ? &ops.password () : 0,
- ops.database (),
- ops.host (),
- ops.port (),
- ops.socket_specified () ? &ops.socket () : 0,
- 0,
- f));
-#else
- return auto_ptr<database> (0);
-#endif
- }
- catch (const cli::exception& e)
- {
- cerr << e.what () << endl;
- exit (1);
- }
+ if (max_connections != 0)
+ f.reset (new mysql::connection_pool_factory (max_connections));
- return auto_ptr<database> (0);
+ return auto_ptr<database> (new mysql::database (argc, argv, false, 0, f));
+#endif
}
diff --git a/libcommon/common/common.hxx b/libcommon/common/common.hxx
index 57069dc..2a02a12 100644
--- a/libcommon/common/common.hxx
+++ b/libcommon/common/common.hxx
@@ -14,6 +14,6 @@
#include <common/export.hxx>
LIBCOMMON_EXPORT std::auto_ptr<odb::database>
-create_database (int argc, char* argv[], std::size_t max_connections = 0);
+create_database (int& argc, char* argv[], std::size_t max_connections = 0);
#endif // LIBCOMMON_COMMON_COMMON_HXX
diff --git a/libcommon/common/makefile b/libcommon/common/makefile
index 27e0bf2..41bb776 100644
--- a/libcommon/common/makefile
+++ b/libcommon/common/makefile
@@ -5,12 +5,9 @@
include $(dir $(lastword $(MAKEFILE_LIST)))../../build/bootstrap.make
-# Options file.
-#
-cli_tun := options.cli
cxx_tun := common.cxx
-cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o) $(cli_tun:.cli=.o))
+cxx_obj := $(addprefix $(out_base)/,$(cxx_tun:.cxx=.o))
cxx_od := $(cxx_obj:.o=.o.d)
common.l := $(out_base)/common.l
@@ -23,10 +20,6 @@ clean := $(out_base)/.clean
# Import.
#
$(call import,\
- $(scf_root)/import/cli/stub.make,\
- cli: cli,cli-rules: cli_rules)
-
-$(call import,\
$(scf_root)/import/libodb/stub.make,\
l: odb.l,cpp-options: odb.l.cpp-options)
@@ -48,18 +41,6 @@ $(cxx_obj) $(cxx_od): $(common.l.cpp-options) $(out_base)/config.h
$(common.l.cpp-options): value := -I$(out_root)/libcommon -I$(src_root)/libcommon
$(common.l.cpp-options): $(odb_db.l.cpp-options) $(odb.l.cpp-options)
-genf := $(cli_tun:.cli=.hxx) $(cli_tun:.cli=.ixx) $(cli_tun:.cli=.cxx)
-gen := $(addprefix $(out_base)/,$(genf))
-
-$(gen): $(cli)
-$(gen): cli := $(cli)
-$(gen): cli_options += \
---generate-specifier \
---generate-file-scanner \
---guard-prefix LIBCOMMON_COMMON
-
-$(call include-dep,$(cxx_od),$(cxx_obj),$(gen))
-
$(out_base)/config.h: $(dcf_root)/configuration-dynamic.make
@echo '// file : libcommon/config.h' >$@
@echo '// author : automatically generated' >>$@
@@ -73,26 +54,23 @@ endif
@echo '' >>$@
@echo '#endif // LIBCOMMON_COMMON_CONFIG_H' >>$@
+$(call include-dep,$(cxx_od),$(cxx_obj),$(out_base)/config.h)
+
# Convenience alias for default target.
#
$(out_base)/: $(common.l)
# Dist.
#
-$(dist): sources_dist := $(cxx_tun)
-$(dist): export sources := $(sources_dist) $(cli_tun:.cli=.cxx)
-$(dist): headers_dist = $(subst $(src_base)/,,$(shell find $(src_base) \
+$(dist): export sources := $(cxx_tun)
+$(dist): export headers = $(subst $(src_base)/,,$(shell find $(src_base) \
-name '*.hxx' -o -name '*.ixx' -o -name '*.txx'))
-$(dist): gen_headers := $(cli_tun:.cli=.hxx) $(cli_tun:.cli=.ixx)
-$(dist): export headers = $(sort $(headers_dist) $(gen_headers))
-$(dist): gen_dist := $(gen)
-$(dist): data_dist := $(cli_tun) config.h.in
+$(dist): data_dist := config.h.in
$(dist): export extra_dist := $(data_dist) $(call vc9projs,libcommon) \
$(call vc10projs,libcommon)
-$(dist): $(gen)
- $(call dist-data,$(sources_dist) $(headers_dist) $(data_dist))
- $(call dist-data,$(gen_dist))
+$(dist):
+ $(call dist-data,$(sources) $(headers) $(data_dist))
$(call meta-automake)
$(call meta-vc9projs,libcommon)
$(call meta-vc10projs,libcommon)
@@ -103,7 +81,6 @@ $(clean): $(common.l).o.clean \
$(common.l.cpp-options).clean \
$(addsuffix .cxx.clean,$(cxx_obj)) \
$(addsuffix .cxx.clean,$(cxx_od)) \
- $(addprefix $(out_base)/,$(cli_tun:.cli=.cxx.cli.clean))
$(call message,rm $$1,rm -f $$1,$(out_base)/config.h)
# Generated .gitignore.
@@ -111,7 +88,7 @@ $(clean): $(common.l).o.clean \
ifeq ($(out_base),$(src_base))
$(common.l): | $(out_base)/.gitignore
-$(out_base)/.gitignore: files := config.h $(genf)
+$(out_base)/.gitignore: files := config.h
$(clean): $(out_base)/.gitignore.clean
$(call include,$(bld_root)/git/gitignore.make)
@@ -124,7 +101,6 @@ $(call include,$(bld_root)/meta/vc9proj.make)
$(call include,$(bld_root)/meta/vc10proj.make)
$(call include,$(bld_root)/meta/automake.make)
-$(call include,$(cli_rules))
$(call include,$(bld_root)/cxx/cxx-d.make)
$(call include,$(bld_root)/cxx/cxx-o.make)
$(call include,$(bld_root)/cxx/o-l.make)
diff --git a/libcommon/common/options.cli b/libcommon/common/options.cli
deleted file mode 100644
index b5db026..0000000
--- a/libcommon/common/options.cli
+++ /dev/null
@@ -1,58 +0,0 @@
-// file : libcommon/common/options.cli
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : Copyright (c) 2009-2010 Code Synthesis Tools CC
-// license : GNU GPL v2; see accompanying LICENSE file
-
-include <string>;
-
-namespace cli
-{
- class mysql_options
- {
- bool --help {"Print usage information and exit."};
-
- std::string --user
- {
- "<name>",
- "MySQL database user."
- };
-
- std::string --password
- {
- "<str>",
- "MySQL database password"
- };
-
- std::string --database
- {
- "<name>",
- "MySQL database name."
- };
-
- std::string --host
- {
- "<addr>",
- "MySQL database host name or address (localhost by default)."
- };
-
- unsigned int --port = 0
- {
- "<integer>",
- "MySQL database port number."
- };
-
- std::string --socket
- {
- "<name>",
- "MySQL database socket name."
- };
-
- std::string --options-file
- {
- "<file>",
- "Read additional options from <file>. Each option appearing on a separate
- line optionally followed by space and an option value. Empty lines and
- lines starting with \cb{#} are ignored."
- };
- };
-}