meson.build 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. # Invercargill-Sql library build configuration
  2. gio_dep = dependency('gio-2.0')
  3. dependencies = [
  4. glib_dep,
  5. gobject_dep,
  6. gio_dep,
  7. invercargill_dep,
  8. sqlite_dep,
  9. libpq_dep
  10. ]
  11. # Interface sources
  12. sources = files('sql-error.vala')
  13. sources += files('connection-flags.vala')
  14. sources += files('interfaces/connection.vala')
  15. sources += files('interfaces/command.vala')
  16. sources += files('interfaces/transaction.vala')
  17. # Connection string factory
  18. sources += files('connection-string.vala')
  19. sources += files('connection-factory.vala')
  20. sources += files('dialect-factory.vala')
  21. sources += files('providers/connection-provider.vala')
  22. sources += files('providers/sqlite-provider.vala')
  23. sources += files('providers/postgres-provider.vala')
  24. # SQLite implementation sources
  25. sources += files('sqlite/sqlite-connection.vala')
  26. sources += files('sqlite/sqlite-command.vala')
  27. sources += files('sqlite/sqlite-result-enumerable.vala')
  28. sources += files('sqlite/sqlite-transaction.vala')
  29. sources += files('sqlite/sqlite-elements.vala')
  30. sources += files('sqlite/sqlite-drop-constraint.vala')
  31. # PostgreSQL implementation sources
  32. sources += files('postgres/postgres-connection.vala')
  33. sources += files('postgres/postgres-command.vala')
  34. sources += files('postgres/postgres-result-enumerable.vala')
  35. sources += files('postgres/postgres-transaction.vala')
  36. sources += files('postgres/postgres-elements.vala')
  37. # ORM sources
  38. sources += files('orm/column-type.vala')
  39. sources += files('orm/column-definition.vala')
  40. sources += files('orm/index-definition.vala')
  41. sources += files('orm/table-schema.vala')
  42. sources += files('orm/entity-mapper.vala')
  43. sources += files('orm/entity-mapper-builder.vala')
  44. sources += files('orm/type-provider.vala')
  45. sources += files('orm/type-registry.vala')
  46. sources += files('orm/query.vala')
  47. sources += files('orm/entity-query.vala')
  48. sources += files('orm/orm-session.vala')
  49. # Projection sources
  50. sources += files('orm/projections/projection-errors.vala')
  51. sources += files('orm/projections/projection-definition.vala')
  52. sources += files('orm/projections/selection-types.vala')
  53. sources += files('orm/projections/aggregate-analyzer.vala')
  54. sources += files('orm/projections/join-condition-analyzer.vala')
  55. sources += files('orm/projections/variable-translator.vala')
  56. sources += files('orm/projections/friendly-name-resolver.vala')
  57. sources += files('orm/projections/projection-builder.vala')
  58. sources += files('orm/projections/projection-sql-builder.vala')
  59. sources += files('orm/projections/projection-mapper.vala')
  60. sources += files('orm/projections/projection-query.vala')
  61. # Dialect sources
  62. sources += files('dialects/sql-dialect.vala')
  63. sources += files('dialects/sqlite-dialect.vala')
  64. sources += files('dialects/postgres-dialect.vala')
  65. # Expression sources
  66. sources += files('expressions/expression-to-sql-visitor.vala')
  67. # Migration sources
  68. sources += files('migrations/schema-operations.vala')
  69. sources += files('migrations/column-builder.vala')
  70. sources += files('migrations/foreign-key-builder.vala')
  71. sources += files('migrations/index-builder.vala')
  72. sources += files('migrations/table-builder.vala')
  73. sources += files('migrations/alter-table-builder.vala')
  74. sources += files('migrations/migration.vala')
  75. sources += files('migrations/migration-builder.vala')
  76. sources += files('migrations/migration-runner.vala')
  77. sources += files('migrations/dependency.vala')
  78. # Build shared library
  79. invercargill_sql = shared_library('invercargill-sql', sources,
  80. dependencies: dependencies,
  81. c_args: libpq_compat_args,
  82. install: true,
  83. vala_gir: 'invercargill_sql-1.0.gir',
  84. install_dir: [true, true, true, true]
  85. )
  86. # Create dependency for downstream projects
  87. invercargill_sql_dep = declare_dependency(
  88. link_with: invercargill_sql,
  89. include_directories: include_directories('.')
  90. )
  91. # Generate pkg-config file
  92. pkg = import('pkgconfig')
  93. pkg.generate(invercargill_sql,
  94. version: '0.1',
  95. name: 'invercargill-sql'
  96. )
  97. # Generate GObject introspection typelib
  98. g_ir_compiler = find_program('g-ir-compiler')
  99. custom_target('invercargill-sql typelib',
  100. command: [g_ir_compiler, '--shared-library=libinvercargill-sql.so', '--output', '@OUTPUT@', meson.current_build_dir() / 'invercargill_sql-1.0.gir'],
  101. output: 'invercargill-sql-1.0.typelib',
  102. depends: invercargill_sql,
  103. install: true,
  104. install_dir: get_option('libdir') / 'girepository-1.0'
  105. )
  106. # Test executable
  107. test_exe = executable('basic-test', 'tests/basic-test.vala',
  108. dependencies: [dependencies, invercargill_sql_dep],
  109. link_with: invercargill_sql
  110. )
  111. test('Basic SQL tests', test_exe)
  112. # ORM test executable
  113. orm_test_exe = executable('orm-test', ['tests/orm-test.vala', 'tests/test-backend.vala'],
  114. dependencies: [dependencies, invercargill_sql_dep],
  115. link_with: invercargill_sql
  116. )
  117. test('ORM tests', orm_test_exe)
  118. # SQLite integration test executable
  119. sqlite_test_exe = executable('sqlite-test', 'tests/sqlite-test.vala',
  120. dependencies: [dependencies, invercargill_sql_dep],
  121. link_with: invercargill_sql
  122. )
  123. test('SQLite integration tests', sqlite_test_exe)
  124. # Migration test executable
  125. migration_test_exe = executable('migration-test', ['tests/migration-test.vala', 'tests/test-backend.vala'],
  126. dependencies: [dependencies, invercargill_sql_dep],
  127. link_with: invercargill_sql
  128. )
  129. test('Migration tests', migration_test_exe)
  130. # Projection test executable
  131. projection_test_exe = executable('projection-test', ['tests/projection-test.vala', 'tests/test-backend.vala'],
  132. dependencies: [dependencies, invercargill_sql_dep],
  133. link_with: invercargill_sql
  134. )
  135. test('Projection tests', projection_test_exe)
  136. # PostgreSQL live integration test executable
  137. postgres_test_exe = executable('postgres-test', 'tests/postgres-test.vala',
  138. dependencies: [dependencies, invercargill_sql_dep],
  139. link_with: invercargill_sql
  140. )
  141. # Runs only against a reachable server; the wrapper exits 77 (skip)
  142. # when ensure-postgres.sh cannot bring a local server up.
  143. pg_test_runner = find_program('../scripts/run-postgres-tests.sh')
  144. test('PostgreSQL integration tests', pg_test_runner,
  145. is_parallel: false,
  146. args: postgres_test_exe
  147. )
  148. # Dual-backend variants: the ORM, migration and projection suites run
  149. # unchanged over PostgreSQL when PG_TEST_CONN is set (see
  150. # scripts/run-postgres-tests.sh); the wrapper skips (exit 77) when no
  151. # server is reachable, so default builds stay green.
  152. test('PostgreSQL ORM tests', pg_test_runner,
  153. is_parallel: false,
  154. args: orm_test_exe
  155. )
  156. test('PostgreSQL migration tests', pg_test_runner,
  157. is_parallel: false,
  158. args: migration_test_exe
  159. )
  160. test('PostgreSQL projection tests', pg_test_runner,
  161. is_parallel: false,
  162. args: projection_test_exe
  163. )