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 <[email protected]> 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-@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 +
