kumquat-buildroot/package/odb/0007-Switch-to-C-11-get-rid-of-auto_ptr-use.patch
Adam Duskett b2266009be package/odb: new package
ODB is an open-source, cross-platform, and cross-database
object-relational mapping (ORM) system for C++. It allows you to
persist C++ objects to a relational database without having to deal
with tables, columns, or SQL and without manually writing any mapping
code.

ODB supports MySQL, SQLite, PostgreSQL, Oracle, and Microsoft SQL
Server relational databases as well as C++98/03 and C++11 language
standards.  It also comes with optional profiles for Boost and Qt
which allow you to seamlessly use value types, containers, and smart
pointers from these libraries in your persistent C++ classes.

This package is used for auto-generating ODB specific header files
into useable code that can be linked against a seperate libodb and a
specific libodb database library.  As such, it is only needed as a
host program and is not user selectable.

Signed-off-by: Adam Duskett <aduskett@gmail.com>
[Kamel: Fix incorrect odb license]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
[Thomas: add patch fixing gcc10 build, add references to upstream
commits]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
2020-07-12 12:44:43 +02:00

352 lines
12 KiB
Diff

From c5bea9562929c6b55ca208a530ae80033eeb1614 Mon Sep 17 00:00:00 2001
From: Boris Kolpackov <boris@codesynthesis.com>
Date: Tue, 7 Nov 2017 10:37:53 +0200
Subject: [PATCH] Switch to C++11, get rid of auto_ptr use
[Upstream: 6e374de9ae2f2978f2fca3390aba4ea3f72bfade]
Signed-off-by: Kamel Bouhara <kamel.bouhara@bootlin.com>
---
odb/Makefile.am | 5 +++++
odb/context.cxx | 4 ++--
odb/context.hxx | 4 ++--
odb/generator.cxx | 18 +++++++++---------
odb/options.cli | 4 ++--
odb/parser.cxx | 14 ++++++++++----
odb/parser.hxx | 7 ++++---
odb/plugin.cxx | 10 +++++-----
odb/processor.cxx | 6 +++---
odb/validator.cxx | 2 +-
10 files changed, 43 insertions(+), 31 deletions(-)
diff --git a/odb/Makefile.am b/odb/Makefile.am
index 2f01398..d9e83d7 100644
--- a/odb/Makefile.am
+++ b/odb/Makefile.am
@@ -9,6 +9,11 @@ plugin_LTLIBRARIES = odb.la
AM_CPPFLAGS = -I'$(top_builddir)' -I'$(top_srcdir)'
+# Note: not passed by libtool when linking odb.so. Seems to be harmless for
+# now.
+#
+AM_CXXFLAGS = -std=c++0x
+
EXTRA_DIST = common-query.hxx common.hxx context.hxx context.ixx cxx-lexer.hxx cxx-token.hxx diagnostics.hxx emitter.hxx features.hxx gcc-fwd.hxx gcc.hxx generate.hxx generator.hxx instance.hxx location.hxx lookup.hxx option-functions.hxx option-parsers.hxx option-types.hxx options.hxx options.ixx parser.hxx pragma.hxx processor.hxx profile.hxx relational/common-query.hxx relational/common.hxx relational/common.txx relational/context.hxx relational/context.ixx relational/generate.hxx relational/header.hxx relational/inline.hxx relational/model.hxx relational/mssql/common.hxx relational/mssql/context.hxx relational/mysql/common.hxx relational/mysql/context.hxx relational/oracle/common.hxx relational/oracle/context.hxx relational/pgsql/common.hxx relational/pgsql/context.hxx relational/processor.hxx relational/schema-source.hxx relational/schema.hxx relational/source.hxx relational/sqlite/common.hxx relational/sqlite/context.hxx relational/validator.hxx semantics.hxx semantics/class-template.hxx semantics/class.hxx semantics/derived.hxx semantics/elements.hxx semantics/elements.ixx semantics/enum.hxx semantics/fundamental.hxx semantics/namespace.hxx semantics/relational.hxx semantics/relational/changelog.hxx semantics/relational/changeset.hxx semantics/relational/column.hxx semantics/relational/deferrable.hxx semantics/relational/elements.hxx semantics/relational/elements.txx semantics/relational/foreign-key.hxx semantics/relational/index.hxx semantics/relational/key.hxx semantics/relational/model.hxx semantics/relational/name.hxx semantics/relational/primary-key.hxx semantics/relational/table.hxx semantics/template.hxx semantics/union-template.hxx semantics/union.hxx semantics/unit.hxx sql-lexer.hxx sql-lexer.ixx sql-token.hxx sql-token.ixx traversal.hxx traversal/class-template.hxx traversal/class.hxx traversal/derived.hxx traversal/elements.hxx traversal/enum.hxx traversal/fundamental.hxx traversal/namespace.hxx traversal/relational.hxx traversal/relational/changelog.hxx traversal/relational/changeset.hxx traversal/relational/column.hxx traversal/relational/elements.hxx traversal/relational/foreign-key.hxx traversal/relational/index.hxx traversal/relational/key.hxx traversal/relational/model.hxx traversal/relational/primary-key.hxx traversal/relational/table.hxx traversal/template.hxx traversal/union-template.hxx traversal/union.hxx traversal/unit.hxx validator.hxx version.hxx options.cli
# Plugin.
diff --git a/odb/context.cxx b/odb/context.cxx
index d62fa88..87f1c32 100644
--- a/odb/context.cxx
+++ b/odb/context.cxx
@@ -564,14 +564,14 @@ namespace
};
}
-auto_ptr<context>
+unique_ptr<context>
create_context (ostream& os,
semantics::unit& unit,
options const& ops,
features& f,
semantics::relational::model* m)
{
- auto_ptr<context> r;
+ unique_ptr<context> r;
switch (ops.database ()[0])
{
diff --git a/odb/context.hxx b/odb/context.hxx
index 351bc61..10de237 100644
--- a/odb/context.hxx
+++ b/odb/context.hxx
@@ -13,7 +13,7 @@
#include <stack>
#include <vector>
#include <string>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <ostream>
#include <cstddef> // std::size_t
#include <iostream>
@@ -1691,7 +1691,7 @@ private:
// Create concrete database context.
//
-std::auto_ptr<context>
+std::unique_ptr<context>
create_context (std::ostream&,
semantics::unit&,
options const&,
diff --git a/odb/generator.cxx b/odb/generator.cxx
index 6aa5151..266b75f 100644
--- a/odb/generator.cxx
+++ b/odb/generator.cxx
@@ -4,7 +4,7 @@
#include <cctype> // std::toupper, std::is{alpha,upper,lower}
#include <string>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <iomanip>
#include <fstream>
#include <sstream>
@@ -141,7 +141,7 @@ generate (options const& ops,
if (gen_schema)
{
- auto_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, fts, 0));
switch (db)
{
@@ -471,7 +471,7 @@ generate (options const& ops,
//
if (gen_cxx)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (hxx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -581,7 +581,7 @@ generate (options const& ops,
//
if (gen_cxx)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (ixx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -641,7 +641,7 @@ generate (options const& ops,
//
if (gen_cxx && (db != database::common || md == multi_database::dynamic))
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (cxx, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -734,7 +734,7 @@ generate (options const& ops,
//
if (gen_sep_schema)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (sch, unit, ops, fts, model.get ()));
sloc_filter sloc (ctx->os);
@@ -799,7 +799,7 @@ generate (options const& ops,
//
if (gen_sql_schema)
{
- auto_ptr<context> ctx (
+ unique_ptr<context> ctx (
create_context (sql, unit, ops, fts, model.get ()));
switch (db)
@@ -865,7 +865,7 @@ generate (options const& ops,
//
{
ofstream& mig (*mig_pre[i]);
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
switch (db)
{
@@ -908,7 +908,7 @@ generate (options const& ops,
//
{
ofstream& mig (*mig_post[i]);
- auto_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
+ unique_ptr<context> ctx (create_context (mig, unit, ops, fts, 0));
switch (db)
{
diff --git a/odb/options.cli b/odb/options.cli
index cf278cb..c994975 100644
--- a/odb/options.cli
+++ b/odb/options.cli
@@ -211,10 +211,10 @@ class options
\cb{db pointer} pragma will use this pointer by default. The value
of this option can be \cb{*} which denotes the raw pointer and is
the default, or qualified name of a smart pointer class template,
- for example, \cb{std::auto_ptr}. In the latter case, the ODB compiler
+ for example, \cb{std::shared_ptr}. In the latter case, the ODB compiler
constructs the object or view pointer by adding a single template
argument of the object or view type to the qualified name, for example
- \cb{std::auto_ptr<object>}. The ODB runtime uses object and view
+ \cb{std::shared_ptr<object>}. The ODB runtime uses object and view
pointers to return, and, in case of objects, pass and cache
dynamically allocated instances of object and view types.
diff --git a/odb/parser.cxx b/odb/parser.cxx
index 927063b..30e45af 100644
--- a/odb/parser.cxx
+++ b/odb/parser.cxx
@@ -26,7 +26,7 @@ public:
impl (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
- auto_ptr<unit>
+ unique_ptr<unit>
parse (tree global_scope, path const& main_file);
private:
@@ -728,10 +728,10 @@ impl (options const& ops,
{
}
-auto_ptr<unit> parser::impl::
+unique_ptr<unit> parser::impl::
parse (tree global_scope, path const& main_file)
{
- auto_ptr<unit> u (new unit (main_file));
+ unique_ptr<unit> u (new unit (main_file));
u->insert (global_namespace, *u);
process_named_pragmas (global_namespace, *u);
@@ -2263,6 +2263,12 @@ fq_scope (tree decl)
// parser
//
+parser::
+~parser ()
+{
+ // Needs parser::impl definition.
+}
+
parser::
parser (options const& ops,
loc_pragmas& lp,
@@ -2272,7 +2278,7 @@ parser (options const& ops,
{
}
-auto_ptr<unit> parser::
+unique_ptr<unit> parser::
parse (tree global_scope, path const& main_file)
{
return impl_->parse (global_scope, main_file);
diff --git a/odb/parser.hxx b/odb/parser.hxx
index 80e4aa4..648337f 100644
--- a/odb/parser.hxx
+++ b/odb/parser.hxx
@@ -7,7 +7,7 @@
#include <odb/gcc.hxx>
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <odb/pragma.hxx>
#include <odb/options.hxx>
@@ -18,9 +18,10 @@ class parser
public:
class failed {};
+ ~parser ();
parser (options const&, loc_pragmas&, ns_loc_pragmas&, decl_pragmas&);
- std::auto_ptr<semantics::unit>
+ std::unique_ptr<semantics::unit>
parse (tree global_scope, semantics::path const& main_file);
private:
@@ -31,7 +32,7 @@ private:
private:
class impl;
- std::auto_ptr<impl> impl_;
+ std::unique_ptr<impl> impl_;
};
#endif // ODB_PARSER_HXX
diff --git a/odb/plugin.cxx b/odb/plugin.cxx
index 779faed..0fac632 100644
--- a/odb/plugin.cxx
+++ b/odb/plugin.cxx
@@ -8,7 +8,7 @@
#include <sys/types.h> // stat
#include <sys/stat.h> // stat
-#include <memory> // std::auto_ptr
+#include <memory> // std::unique_ptr
#include <string>
#include <vector>
#include <cstring> // std::strcpy, std::strstr
@@ -39,7 +39,7 @@ using cutl::fs::invalid_path;
typedef vector<path> paths;
int plugin_is_GPL_compatible;
-auto_ptr<options const> options_;
+unique_ptr<options const> options_;
paths profile_paths_;
path file_; // File being compiled.
paths inputs_; // List of input files in at-once mode or just file_.
@@ -222,7 +222,7 @@ gate_callback (void*, void*)
// Parse the GCC tree to semantic graph.
//
parser p (*options_, loc_pragmas_, ns_loc_pragmas_, decl_pragmas_);
- auto_ptr<unit> u (p.parse (global_namespace, file_));
+ unique_ptr<unit> u (p.parse (global_namespace, file_));
features f;
@@ -377,14 +377,14 @@ plugin_init (plugin_name_args* plugin_info, plugin_gcc_version*)
oi[2].arg = &pd;
cli::argv_file_scanner scan (argc, &argv[0], oi, 3);
- auto_ptr<options> ops (
+ unique_ptr<options> ops (
new options (scan, cli::unknown_mode::fail, cli::unknown_mode::fail));
// Process options.
//
process_options (*ops);
- options_ = ops;
+ options_ = move (ops);
pragma_db_ = db;
pragma_multi_ = options_->multi_database ();
}
diff --git a/odb/processor.cxx b/odb/processor.cxx
index bea3624..c787e0d 100644
--- a/odb/processor.cxx
+++ b/odb/processor.cxx
@@ -120,8 +120,8 @@ namespace
// both the wrapper type and the wrapped type must be const.
// To see why, consider these possibilities:
//
- // auto_ptr<const T> - can modify by setting a new pointer
- // const auto_ptr<T> - can modify by changing the pointed-to value
+ // unique_ptr<const T> - can modify by setting a new pointer
+ // const unique_ptr<T> - can modify by changing the pointed-to value
//
if (const_type (m.type ()) &&
!(id (m) || version (m) || m.count ("inverse")))
@@ -3086,7 +3086,7 @@ process (options const& ops,
{
try
{
- auto_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
+ unique_ptr<context> ctx (create_context (cerr, unit, ops, f, 0));
// Common processing.
//
diff --git a/odb/validator.cxx b/odb/validator.cxx
index aac52e4..196386c 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -1516,7 +1516,7 @@ validate (options const& ops,
if (!valid)
throw validator_failed ();
- auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
+ unique_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
if (pass == 1)
{
--
2.25.0