[arch-commits] Commit in sqlheavy/trunk (PKGBUILD sqlheavy-no-utils.patch)
Maxime Gauduin
alucryd at nymeria.archlinux.org
Tue Apr 22 08:15:28 UTC 2014
Date: Tuesday, April 22, 2014 @ 10:15:28
Author: alucryd
Revision: 109944
upgpkg: sqlheavy 1:0.1.1-1
Added:
sqlheavy/trunk/sqlheavy-no-utils.patch
Modified:
sqlheavy/trunk/PKGBUILD
-------------------------+
PKGBUILD | 28 +-
sqlheavy-no-utils.patch | 624 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 640 insertions(+), 12 deletions(-)
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2014-04-21 23:21:49 UTC (rev 109943)
+++ PKGBUILD 2014-04-22 08:15:28 UTC (rev 109944)
@@ -3,32 +3,36 @@
# Contributor : sebikul <sebikul at gmail.com>
pkgname=sqlheavy
-pkgver=0.2.0.7ae6112
+pkgver=0.1.1
pkgrel=1
+epoch=1
pkgdesc="GObject SQLite wrapper"
arch=('i686' 'x86_64')
-url="https://code.google.com/p/sqlheavy/"
-license=('LGPL')
+url='https://code.google.com/p/sqlheavy/'
+license=('LGPL2.1')
depends=('gtk2' 'sqlite3')
-makedepends=('git' 'gobject-introspection' 'vala')
-source=('git://gitorious.org/sqlheavy/sqlheavy.git')
-sha256sums=('SKIP')
+makedepends=('gobject-introspection' 'vala')
+source=("http://sqlheavy.googlecode.com/files/${pkgname}-${pkgver}.tar.xz"
+ "${pkgname}-no-utils.patch")
+sha256sums=('e8689f5fd4e0baf98eada2b3811262bb99877c2e8586fd21ad2a7ad3acc59031'
+ '57956925990bf8fb3b75e8e7dff5038d803c0c171013d7401474a5490afd7960')
-pkgver() {
- cd ${pkgname}
+prepare() {
+ cd ${pkgname}-${pkgver}
- printf "0.2.0.%s" "$(git rev-parse --short HEAD)"
+ patch -Np1 -i ../${pkgname}-no-utils.patch
}
build() {
- cd ${pkgname}
+ cd ${pkgname}-${pkgver}
- ./autogen.sh --prefix='/usr' --disable-static
+ autoreconf -vif
+ ./configure --prefix='/usr' --disable-static
make
}
package() {
- cd ${pkgname}
+ cd ${pkgname}-${pkgver}
make DESTDIR="${pkgdir}" install
rm -rf "${pkgdir}"/usr/share/man
Added: sqlheavy-no-utils.patch
===================================================================
--- sqlheavy-no-utils.patch (rev 0)
+++ sqlheavy-no-utils.patch 2014-04-22 08:15:28 UTC (rev 109944)
@@ -0,0 +1,624 @@
+diff --git a/Makefile.am b/Makefile.am
+index 6a4c487..bb8e475 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -4,7 +4,6 @@ SUBDIRS = \
+ sqlheavy \
+ gtk \
+ examples \
+- utils \
+ docs \
+ data \
+ $(NULL)
+diff --git a/configure.ac b/configure.ac
+index 73753c9..46de092 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -69,11 +69,6 @@ AC_SUBST(GMODULE_LIBS)
+ PKG_CHECK_MODULES(SQLITE3, sqlite3 >= $SQLITE3_REQUIRED)
+ AC_SUBST(SQLITE3_CFLAGS)
+ AC_SUBST(SQLITE3_LIBS)
+-VALA_PACKAGE=libvala-0.16
+-PKG_CHECK_MODULES(VALA, $VALA_PACKAGE >= $VALA_REQUIRED)
+-AC_SUBST(VALA_PACKAGE)
+-AC_SUBST(VALA_CFLAGS)
+-AC_SUBST(VALA_LIBS)
+ PKG_CHECK_MODULES(GTK, gtk+-2.0 >= $GTK_REQUIRED)
+ GTK_PACKAGE=gtk+-2.0
+ AC_SUBST(GTK_PACKAGE)
+@@ -114,6 +109,5 @@ AC_CONFIG_FILES([Makefile
+ gtk/sqlheavygtk-$SQLHEAVY_API_VERSION.deps
+ sqlheavy/Makefile
+ sqlheavy-$SQLHEAVY_API_VERSION.pc
+- sqlheavygtk-$SQLHEAVY_API_VERSION.pc
+- utils/Makefile])
++ sqlheavygtk-$SQLHEAVY_API_VERSION.pc])
+ AC_OUTPUT
+diff --git a/utils/Makefile.am b/utils/Makefile.am
+deleted file mode 100644
+index 2ac208c..0000000
+--- a/utils/Makefile.am
++++ /dev/null
+@@ -1,31 +0,0 @@
+-NULL =
+-
+-LDADD = \
+- $(top_builddir)/sqlheavy/libsqlheavy$(SQLHEAVY_API_VERSION).la \
+- $(GIO_LIBS) \
+- $(GLIB_LIBS) \
+- $(GMODULE_LIBS) \
+- $(SQLITE3_LIBS) \
+- $(VALA_LIBS) \
+- $(NULL)
+-
+-bin_PROGRAMS = sqlheavy-gen-orm
+-
+-VALAFLAGS = \
+- --vapidir $(top_srcdir)/sqlheavy \
+- --pkg $(VALA_PACKAGE) \
+- --pkg sqlheavy- at SQLHEAVY_API_VERSION@ \
+- $(NULL)
+-
+-AM_CFLAGS = \
+- -I$(top_srcdir)/sqlheavy \
+- $(GIO_CFLAGS) \
+- $(GLIB_CFLAGS) \
+- $(GMODULE_CFLAGS) \
+- $(SQLITE3_CFLAGS) \
+- $(VALA_CFLAGS) \
+- $(NULL)
+-
+-sqlheavy_gen_orm_SOURCES = \
+- sqlheavy-gen-orm.vala \
+- $(NULL)
+diff --git a/utils/sqlheavy-gen-orm.vala b/utils/sqlheavy-gen-orm.vala
+deleted file mode 100644
+index ceaac3b..0000000
+--- a/utils/sqlheavy-gen-orm.vala
++++ /dev/null
+@@ -1,542 +0,0 @@
+-namespace SQLHeavy {
+- public errordomain GeneratorError {
+- CONFIGURATION,
+- METADATA,
+- SYMBOL_RESOLVER,
+- DATABASE,
+- SELECTOR
+- }
+-
+- public class Generator : GLib.Object {
+- [CCode (array_length = false, array_null_terminated = true)]
+- static string[] sources;
+- [CCode (array_length = false, array_null_terminated = true)]
+- static string[] vapi_directories;
+- [CCode (array_length = false, array_null_terminated = true)]
+- static string[] packages;
+- static string metadata_location;
+- static string output_location;
+- static bool write_properties;
+-
+- private Vala.CodeContext context = new Vala.CodeContext ();
+- private GLib.SList<string> databases = new GLib.SList<string> ();
+-
+- const GLib.OptionEntry[] options = {
+- { "metadata", 'm', 0, OptionArg.FILENAME, ref metadata_location, "Load metadata from FILE", "FILE..." },
+- { "vapidir", 0, 0, OptionArg.FILENAME_ARRAY, ref vapi_directories, "Look for package bindings in DIRECTORY", "DIRECTORY..." },
+- { "pkg", 0, 0, OptionArg.STRING_ARRAY, ref packages, "Include binding for PACKAGE", "PACKAGE..." },
+- { "output", 'o', 0, OptionArg.FILENAME, ref output_location, "Output to FILE", "FILE..." },
+- { "properties", 'p', 0, GLib.OptionArg.NONE, ref write_properties, "Write properties instead of methods", null },
+- { "", 0, 0, OptionArg.FILENAME_ARRAY, ref sources, "SQLite databases", "DATABASE..." },
+- { null }
+- };
+-
+- private Vala.HashMap<string, Vala.HashMap <string, string>> cache =
+- new Vala.HashMap<string, Vala.HashMap <string, string>> (GLib.str_hash, GLib.str_equal);
+- private Vala.HashMap<string, Vala.HashMap <string, string>> wildcard_cache =
+- new Vala.HashMap<string, Vala.HashMap <string, string>> (GLib.str_hash, GLib.str_equal);
+-
+- private Vala.HashMap <string, string> get_symbol_properties (string symbol) {
+- var map = this.cache.get (symbol);
+- if ( map != null )
+- return map;
+-
+- map = new Vala.HashMap<string,string> (GLib.str_hash, GLib.str_equal, GLib.str_equal);
+- foreach ( string selector in this.wildcard_cache.get_keys () ) {
+- if ( GLib.PatternSpec.match_simple (selector, symbol) ) {
+- var wmap = this.wildcard_cache.get (selector);
+- foreach ( string key in wmap.get_keys () )
+- map.set (key, wmap.get (key));
+- }
+- }
+-
+- this.cache.set (symbol, map);
+- return map;
+- }
+-
+- private void set_symbol_property (string symbol, string key, string value) {
+- this.get_symbol_properties (symbol).set (key, value);
+- }
+-
+- private string? get_symbol_property (string symbol, string key) {
+- return this.get_symbol_properties (symbol).get (key);
+- }
+-
+- private string get_symbol_name (string symbol) {
+- string? sym = this.get_symbol_property (symbol, "name");
+- if ( sym != null )
+- return sym;
+-
+- int sym_t = 3;
+- bool tb = true, sb = true, tf = true;
+- GLib.StringBuilder name = new GLib.StringBuilder.sized (symbol.length * 2);
+- for ( sym = symbol ; ; sym = sym.offset (1) ) {
+- var c = sym.get_char_validated ();
+- if ( c <= 0 )
+- break;
+-
+- if ( sb ) {
+- if ( c == '@' ) {
+- sym_t = 1;
+- continue;
+- } else if ( c == '%' ) {
+- sym_t = 2;
+- continue;
+- }
+- }
+-
+- if ( c == '_' ) {
+- tb = true;
+- tf = true;
+- continue;
+- } else if ( c == '/' ) {
+- sym_t = int.min (3, sym_t + 1);
+- tf = tb = sb = true;
+- name.truncate (0);
+- continue;
+- }
+-
+- if ( c.isupper () && !tb ) {
+- if ( sym_t == 3 )
+- name.append_c ('_');
+- tb = true;
+- tf = false;
+- name.append_unichar (sym_t == 3 ? c.tolower () : c.toupper ());
+- continue;
+- } else if ( c.islower () && tb ) {
+- if ( tf && sym_t != 3 )
+- name.append_unichar (c.toupper ());
+- else if ( tf && !sb && sym_t == 3 ) {
+- name.append_c ('_');
+- name.append_unichar (c);
+- }
+- else
+- name.append_unichar (c);
+- tb = tf = false;
+- continue;
+- }
+-
+- sb = false;
+- name.append_unichar (tb ? (sym_t == 3 ? c.tolower () : c.toupper ()) : c.tolower ());
+- tf = false;
+- }
+-
+- this.set_symbol_property (symbol, "name", name.str);
+- return name.str;
+- }
+-
+- public bool symbol_is_hidden (string symbol) {
+- var p = this.get_symbol_property (symbol, "hidden");
+- return p != null && (p == "1" || p == "true" || p == "yes");
+- }
+-
+- private static Vala.DataType type_from_string (string datatype) {
+- bool is_array = false;
+- var internal_datatype = datatype;
+- Vala.UnresolvedSymbol? symbol = null;
+-
+- if ( datatype.has_suffix ("[]") ) {
+- internal_datatype = internal_datatype.substring (0, -2);
+- is_array = true;
+- }
+-
+- foreach ( unowned string m in internal_datatype.split (".") )
+- symbol = new Vala.UnresolvedSymbol (symbol, m);
+-
+- var data_type = new Vala.UnresolvedType.from_symbol (symbol);
+- if ( is_array )
+- return new Vala.ArrayType (data_type, 1, null);
+- else
+- return data_type;
+- }
+-
+- private Vala.DataType? get_data_type (string symbol) {
+- string? name = this.get_symbol_property (symbol, "type");
+-
+- return name == null ? null : type_from_string (name);
+- }
+-
+- private void parse_field (SQLHeavy.Table table, int field, Vala.Class cl, Vala.SwitchStatement signals, Vala.SourceReference source_reference) throws GeneratorError, SQLHeavy.Error {
+- var db = table.queryable.database;
+- var db_symbol = GLib.Path.get_basename (db.filename).split (".", 2)[0];
+- var symbol = @"@$(GLib.Path.get_basename (db_symbol))/$(table.name)/$(table.field_name (field))";
+- var name = this.get_symbol_name (symbol);
+-
+- if ( this.symbol_is_hidden (symbol) )
+- return;
+-
+- var data_type = this.get_data_type (symbol);
+- if ( data_type == null ) {
+- var affinity = table.field_affinity (field).down ().split (" ");
+-
+- if ( affinity[0] == "integer" )
+- affinity[0] = "int";
+- else if ( affinity[0] == "text" ||
+- affinity[0].has_prefix ("varchar") ||
+- affinity[0].has_prefix ("char") )
+- affinity[0] = "string";
+- else if ( affinity[0] == "blob" )
+- affinity[0] = "uint8[]";
+- else if ( affinity[0] == "timestamp" ||
+- affinity[0] == "datetime" )
+- affinity[0] = "time_t";
+-
+- data_type = type_from_string (affinity[0]);
+- }
+-
+- var data_type_get = data_type.copy ();
+- data_type_get.value_owned = true;
+-
+- var switch_section = new Vala.SwitchSection (source_reference);
+- signals.add_section (switch_section);
+- switch_section.add_label (new Vala.SwitchLabel (new Vala.StringLiteral (@"\"$(name)\"", source_reference), source_reference));
+- Vala.MethodCall emit_changed_notify;
+-
+- if ( !write_properties ) {
+- var changed_signal = new Vala.Signal (@"$(name)_changed", new Vala.VoidType (source_reference), source_reference);
+- changed_signal.access = Vala.SymbolAccessibility.PUBLIC;
+- cl.add_signal (changed_signal);
+- emit_changed_notify = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this"), @"$(name)_changed", source_reference), source_reference);
+-
+- {
+- var get_method = new Vala.Method (@"get_$(name)", data_type_get, source_reference);
+- cl.add_method (get_method);
+- get_method.access = Vala.SymbolAccessibility.PUBLIC;
+- get_method.add_error_type (type_from_string ("SQLHeavy.Error"));
+-
+- var block = new Vala.Block (source_reference);
+- var call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this"), @"get_$(data_type_get.to_string ())", source_reference), source_reference);
+- call.add_argument (new Vala.StringLiteral (@"\"$(table.field_name (field))\"", source_reference));
+- block.add_statement (new Vala.ReturnStatement (call, source_reference));
+-
+- get_method.body = block;
+- }
+-
+- {
+- var set_method = new Vala.Method (@"set_$(name)", new Vala.VoidType (source_reference), source_reference);
+- set_method.add_parameter (new Vala.Parameter ("value", data_type, source_reference));
+- cl.add_method (set_method);
+- set_method.access = Vala.SymbolAccessibility.PUBLIC;
+- set_method.add_error_type (type_from_string ("SQLHeavy.Error"));
+-
+- var block = new Vala.Block (source_reference);
+- var call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this"), @"set_$(data_type.to_string ())", source_reference), source_reference);
+- call.add_argument (new Vala.StringLiteral (@"\"$(table.field_name (field))\"", source_reference));
+- block.add_statement (new Vala.ExpressionStatement (call, source_reference));
+-
+- set_method.body = block;
+- }
+- } else {
+- Vala.PropertyAccessor get_accessor, set_accessor;
+- emit_changed_notify = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this", source_reference), "notify_property", source_reference), source_reference);
+- emit_changed_notify.add_argument (new Vala.StringLiteral ("\"" + name.replace ("_", "-") + "\"", source_reference));
+- {
+- var block = new Vala.Block (source_reference);
+- var try_block = new Vala.Block (source_reference);
+- var catch_block = new Vala.Block (source_reference);
+- var try_stmt = new Vala.TryStatement (try_block, null, source_reference);
+-
+- var call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this"), @"get_$(data_type_get.to_string ())", source_reference), source_reference);
+- call.add_argument (new Vala.StringLiteral (@"\"$(table.field_name (field))\"", source_reference));
+- try_block.add_statement (new Vala.ReturnStatement (call, source_reference));
+-
+- var error_call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("GLib"), "error", source_reference), source_reference);
+- error_call.add_argument (new Vala.StringLiteral (@"\"Unable to retrieve `$(name)': %s\"", source_reference));
+- error_call.add_argument (new Vala.MemberAccess (new Vala.MemberAccess (null, "e"), "message", source_reference));
+- catch_block.add_statement (new Vala.ExpressionStatement (error_call, source_reference));
+-
+- var anr = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("GLib", source_reference), "assert_not_reached", source_reference));
+- catch_block.add_statement (new Vala.ExpressionStatement (anr, source_reference));
+-
+- try_stmt.add_catch_clause (new Vala.CatchClause (type_from_string ("SQLHeavy.Error"), "e", catch_block, source_reference));
+- block.add_statement (try_stmt);
+-
+- get_accessor = new Vala.PropertyAccessor (true, false, false, data_type_get, block, source_reference);
+- }
+-
+- {
+- var block = new Vala.Block (source_reference);
+- var try_block = new Vala.Block (source_reference);
+- var catch_block = new Vala.Block (source_reference);
+- var try_stmt = new Vala.TryStatement (try_block, null, source_reference);
+-
+- var call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this", source_reference), @"set_$(data_type_get.to_string ())", source_reference), source_reference);
+- call.add_argument (new Vala.StringLiteral (@"\"$(table.field_name (field))\"", source_reference));
+- call.add_argument (new Vala.MemberAccess (null, "value", source_reference));
+- try_block.add_statement (new Vala.ExpressionStatement (call, source_reference));
+-
+- var error_call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("GLib"), "error", source_reference), source_reference);
+- error_call.add_argument (new Vala.StringLiteral (@"\"Unable to set `$(name)': %s\"", source_reference));
+- error_call.add_argument (new Vala.MemberAccess (new Vala.MemberAccess (null, "e"), "message", source_reference));
+- catch_block.add_statement (new Vala.ExpressionStatement (error_call, source_reference));
+-
+- try_stmt.add_catch_clause (new Vala.CatchClause (type_from_string ("SQLHeavy.Error"), "e", catch_block, source_reference));
+- block.add_statement (try_stmt);
+-
+- set_accessor = new Vala.PropertyAccessor (false, true, false, data_type, block, source_reference);
+- }
+-
+- var prop = new Vala.Property (name, data_type, get_accessor, set_accessor, source_reference);
+- prop.access = Vala.SymbolAccessibility.PUBLIC;
+- cl.add_property (prop);
+- }
+-
+- switch_section.add_statement (new Vala.ExpressionStatement (emit_changed_notify, source_reference));
+- switch_section.add_statement (new Vala.BreakStatement (source_reference));
+- }
+-
+- private void parse_table (SQLHeavy.Table table, Vala.Namespace ns, Vala.SourceReference source_reference) throws GeneratorError, SQLHeavy.Error {
+- var db = table.queryable.database;
+- var db_symbol = GLib.Path.get_basename (db.filename).split (".", 2)[0];
+- var symbol = @"@$(GLib.Path.get_basename (db_symbol))/$(table.name)";
+- var symbol_name = this.get_symbol_name (symbol);
+-
+- if ( this.symbol_is_hidden (symbol) )
+- return;
+-
+- var cl = ns.scope.lookup (symbol_name) as Vala.Class;
+-
+- if ( cl == null ) {
+- cl = new Vala.Class (symbol_name, source_reference);
+- cl.access = Vala.SymbolAccessibility.PUBLIC;
+- ns.add_class (cl);
+- }
+-
+- cl.add_base_type (type_from_string ("SQLHeavy.Row"));
+-
+- Vala.SwitchStatement signals_switch;
+- {
+- var register_notify = new Vala.Method ("emit_change_notification", new Vala.VoidType ());
+- register_notify.access = Vala.SymbolAccessibility.PRIVATE;
+- register_notify.add_parameter (new Vala.Parameter ("field", type_from_string ("int")));
+-
+- var block = new Vala.Block (source_reference);
+- var try_block = new Vala.Block (source_reference);
+- var catch_block = new Vala.Block (source_reference);
+- var try_stmt = new Vala.TryStatement (try_block, null, source_reference);
+-
+- var field_name = new Vala.LocalVariable (type_from_string ("string"), "field_name", new Vala.StringLiteral ("null"), source_reference);
+- block.add_statement (new Vala.DeclarationStatement (field_name, source_reference));
+-
+- block.add_statement (try_stmt);
+- var get_field_name = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("this"), "field_name"));
+- get_field_name.add_argument (new Vala.MemberAccess (null, "field"));
+- try_block.add_statement (new Vala.ExpressionStatement (new Vala.Assignment (new Vala.StringLiteral ("field_name"), get_field_name)));
+-
+- var warn_call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.StringLiteral ("GLib"), "warning"), source_reference);
+- warn_call.add_argument (new Vala.StringLiteral ("\"" + "Unknown field: %d" + "\"", source_reference));
+- warn_call.add_argument (new Vala.MemberAccess (null, "field", source_reference));
+- catch_block.add_statement (new Vala.ExpressionStatement (warn_call, source_reference));
+- catch_block.add_statement (new Vala.ReturnStatement (null, source_reference));
+- try_stmt.add_catch_clause (new Vala.CatchClause (type_from_string ("SQLHeavy.Error"), "e", catch_block, source_reference));
+-
+- signals_switch = new Vala.SwitchStatement (new Vala.StringLiteral ("field_name"), source_reference);
+- block.add_statement (signals_switch);
+- register_notify.body = block;
+-
+- cl.add_method (register_notify);
+- }
+-
+- var con = new Vala.Constructor (source_reference);
+- con.body = new Vala.Block (source_reference);
+-
+- var conn_call = new Vala.MethodCall (new Vala.MemberAccess (new Vala.MemberAccess (new Vala.StringLiteral ("this"), "field_changed", source_reference), "connect", source_reference), source_reference);
+- conn_call.add_argument (new Vala.MemberAccess (new Vala.StringLiteral ("this"), "emit_change_notification", source_reference));
+-
+- con.body.add_statement (new Vala.ExpressionStatement (conn_call, source_reference));
+- cl.constructor = con;
+-
+- for ( var field = 0 ; field < table.field_count ; field++ ) {
+- this.parse_field (table, field, cl, signals_switch, source_reference);
+- }
+- }
+-
+- private void parse_database (SQLHeavy.Database db) throws GeneratorError {
+- var symbol = "@".concat (GLib.Path.get_basename (db.filename).split (".", 2)[0]);
+- var symbol_name = this.get_symbol_name (symbol);
+- Vala.Namespace? ns = this.context.root.scope.lookup (symbol_name) as Vala.Namespace;
+-
+- Vala.SourceFile source_file = new Vala.SourceFile (this.context, Vala.SourceFileType.NONE, db.filename);
+- Vala.SourceReference source_reference = new Vala.SourceReference (source_file);
+-
+- if ( ns == null ) {
+- ns = new Vala.Namespace (symbol_name, source_reference);
+- this.context.root.add_namespace (ns);
+- }
+-
+- if ( this.symbol_is_hidden (symbol) )
+- return;
+-
+- try {
+- var tables = db.get_tables ();
+- foreach ( unowned SQLHeavy.Table table in tables.get_values () ) {
+- this.parse_table (table, ns, source_reference);
+- }
+- } catch ( SQLHeavy.Error e ) {
+- throw new GeneratorError.DATABASE ("Database error: %s", e.message);
+- }
+- }
+-
+- public void run () throws GeneratorError {
+- if ( output_location == null ) {
+- GLib.stderr.printf ("You must supply an output location\n");
+- return;
+- }
+-
+- var parser = new Vala.Parser ();
+- parser.parse (this.context);
+-
+- foreach ( unowned string dbfile in this.databases ) {
+- SQLHeavy.Database db;
+- try {
+- db = new SQLHeavy.Database (dbfile, SQLHeavy.FileMode.READ);
+- } catch ( SQLHeavy.Error e ) {
+- throw new GeneratorError.CONFIGURATION ("Unable to open database: %s", e.message);
+- }
+- this.parse_database (db);
+- }
+-
+- var resolver = new Vala.SymbolResolver ();
+- resolver.resolve (context);
+-
+- if (context.report.get_errors () > 0)
+- throw new GeneratorError.SYMBOL_RESOLVER ("Error resolving symbols.");
+-
+- context.analyzer.analyze (context);
+-
+- var code_writer = new Vala.CodeWriter (Vala.CodeWriterType.DUMP);
+- code_writer.write_file (this.context, output_location);
+- }
+-
+- private static string parse_selector (string selector, out bool wildcard) throws GeneratorError {
+- wildcard = false;
+- string[] real_selector = new string[3];
+- var segments = selector.split ("/", 3);
+-
+- int pos = 0;
+- for ( int seg = 0 ; seg < segments.length ; seg++ ) {
+- var first_char = segments[seg].get_char ();
+-
+- if ( first_char == '%' || first_char == '@' ) {
+- int dest_pos;
+- if ( first_char == '%' ) {
+- segments[seg] = segments[seg].offset (1);
+- dest_pos = 1;
+- }
+- else
+- dest_pos = 0;
+-
+- while ( pos < dest_pos ) {
+- wildcard = true;
+- real_selector[pos] = "*";
+- pos++;
+- }
+- } else if ( pos == 0 && first_char != '*' ) {
+- wildcard = true;
+- real_selector[0] = "*";
+- real_selector[1] = "*";
+- pos = 2;
+- }
+-
+- if ( segments[seg] == "*" )
+- wildcard = true;
+-
+- if ( pos > 2 || real_selector[pos] != null )
+- throw new GeneratorError.SELECTOR ("Invalid selector (%s).", selector);
+- real_selector[pos] = segments[seg];
+- pos++;
+- }
+-
+- return string.joinv ("/", real_selector);
+- }
+-
+- private void parse_metadata () throws GeneratorError, GLib.KeyFileError {
+- var metadata = new GLib.KeyFile ();
+- metadata.load_from_file (metadata_location, GLib.KeyFileFlags.NONE);
+-
+- foreach ( unowned string group in metadata.get_groups () ) {
+- bool is_wildcard;
+- var selector = parse_selector (group, out is_wildcard);
+-
+- var cache = is_wildcard ? this.wildcard_cache : this.cache;
+- var properties = cache.get (selector);
+- if ( properties == null ) {
+- properties = new Vala.HashMap<string, string> (GLib.str_hash, GLib.str_equal, GLib.str_equal);
+- cache.set (selector, properties);
+- }
+-
+- foreach ( unowned string key in metadata.get_keys (group) )
+- properties.set (key, metadata.get_string (group, key));
+- }
+- }
+-
+- public void configure () throws GeneratorError {
+- if ( metadata_location != null ) {
+- try {
+- this.parse_metadata ();
+- } catch ( GLib.KeyFileError e ) {
+- throw new GeneratorError.CONFIGURATION ("Unable to load metadata file: %s", e.message);
+- } catch ( GLib.FileError e ) {
+- throw new GeneratorError.CONFIGURATION ("Unable to load metadata file: %s", e.message);
+- }
+- }
+-
+- this.context.profile = Vala.Profile.GOBJECT;
+- Vala.CodeContext.push (this.context);
+-
+- // Default packages
+- this.context.add_external_package ("glib-2.0");
+- this.context.add_external_package ("gobject-2.0");
+- this.context.add_external_package ("sqlheavy-%s".printf (SQLHeavy.Version.api ()));
+-
+- foreach ( unowned string pkg in packages ) {
+- this.context.add_external_package (pkg);
+- }
+-
+- foreach ( unowned string source in sources ) {
+- if ( source.has_suffix (".vala") ) {
+- if ( GLib.FileUtils.test (source, GLib.FileTest.EXISTS) )
+- this.context.add_source_file (new Vala.SourceFile (this.context, Vala.SourceFileType.NONE, source));
+- else
+- throw new GeneratorError.CONFIGURATION (@"Source file '$(source)' does not exist.");
+- } else {
+- this.databases.prepend (source);
+- }
+- }
+- }
+-
+- private static int main (string[] args) {
+- try {
+- var opt_context = new GLib.OptionContext ("- SQLHeavy ORM Generator");
+- opt_context.set_help_enabled (true);
+- opt_context.add_main_entries (options, null);
+- opt_context.set_summary ("This tool will generate a Vala file which provides an object for each\ntable in the specified database(s), each of which extends the\nSQLHeavyRow class.");
+- opt_context.set_description ("Copyright 2010 Evan Nemerson.\nReleased under versions 2.1 and 3 of the LGPL.\n\nFor more information, or to report a bug, see\n<http://code.google.com/p/sqlheavy>");
+-
+- opt_context.parse (ref args);
+- } catch ( GLib.OptionError e ) {
+- GLib.stdout.puts (@"$(e.message)\n");
+- GLib.stdout.puts (@"Run '$(args[0]) --help' to see a full list of available command line options.\n");
+- return 1;
+- }
+-
+- if ( sources == null ) {
+- GLib.stderr.puts ("No databases specified.\n");
+- return 1;
+- }
+-
+- var generator = new Generator ();
+- try {
+- generator.configure ();
+- generator.run ();
+- } catch ( GeneratorError e ) {
+- GLib.stderr.puts (@"Error: $(e.message)\n");
+- GLib.stdout.puts (@"Run '$(args[0]) --help' to see a full list of available command line options.\n");
+- return 1;
+- }
+-
+- return 0;
+- }
+- }
+-}
+-
+--
+1.7.1
+
More information about the arch-commits
mailing list