diff options
| author | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-09-11 23:03:51 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi.dcr@tutanota.com> | 2023-10-09 14:08:59 +0200 |
| commit | be7e0c2d5689d962fd2424e60ed21062d0674e95 (patch) | |
| tree | f3b5fc213f7cb832e31f4877db0abf9e2c908930 /libdino | |
| parent | 1cc99a640fe694c1545eb2ecc01311f7bad26aed (diff) | |
Backport Meson build support
Meson builds have better integration with Vala. For example, Meson
handles incremental compilation of Vala source files better than
CMake.
Limitations:
As done with CMake builds, gresource.xml should be compiled. Now, it has
been generated from a CMake build and manually copied into the source
tree.
Diffstat (limited to 'libdino')
| -rw-r--r-- | libdino/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | libdino/meson.build | 82 | ||||
| -rw-r--r-- | libdino/src/application.vala | 1 | ||||
| -rw-r--r-- | libdino/src/plugin/registry.vala | 16 | ||||
| -rw-r--r-- | libdino/version.py | 36 |
5 files changed, 134 insertions, 10 deletions
diff --git a/libdino/CMakeLists.txt b/libdino/CMakeLists.txt index 6c120346..67979ae0 100644 --- a/libdino/CMakeLists.txt +++ b/libdino/CMakeLists.txt @@ -6,8 +6,15 @@ find_packages(LIBDINO_PACKAGES REQUIRED GObject ) +file(WRITE ${CMAKE_CURRENT_LIST_DIR}/version.vala + "namespace Dino { + public const string VERSION = \"v${PROJECT_VERSION}\"; + }" +) + vala_precompile(LIBDINO_VALA_C SOURCES + version.vala src/application.vala src/dbus/login1.vala @@ -90,7 +97,7 @@ DEPENDS ${CMAKE_BINARY_DIR}/exports/dino_i18n.h ) -add_definitions(${VALA_CFLAGS} -DDINO_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}" -DG_LOG_DOMAIN="libdino" -DDINO_VERSION=\"${PROJECT_VERSION}\") +add_definitions(${VALA_CFLAGS} -DDINO_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}" -DG_LOG_DOMAIN="libdino") add_library(libdino SHARED ${LIBDINO_VALA_C} ${CMAKE_BINARY_DIR}/exports/dino_i18n.h) add_dependencies(libdino dino-vapi) target_link_libraries(libdino xmpp-vala qlite ${LIBDINO_PACKAGES} m) diff --git a/libdino/meson.build b/libdino/meson.build new file mode 100644 index 00000000..2521bccd --- /dev/null +++ b/libdino/meson.build @@ -0,0 +1,82 @@ +# version_vala +dot_git = meson.current_source_dir() / '../.git' +version_file = meson.current_source_dir() / '../VERSION' +command = [prog_python, files('version.py'), version_file, '@OUTPUT@', '--git-repo', meson.current_source_dir()] +if prog_git.found() + command += ['--git', prog_git] +endif +depend_files = [] +if fs.exists(dot_git) + depend_files += [dot_git] +endif +if fs.exists(version_file) + depend_files += [version_file] +endif +version_vala = custom_target('libdino_version_vala', command: command, output: 'version.vala', depend_files: depend_files) + +# libdino +dependencies = [ + dep_gdk_pixbuf, + dep_gee, + dep_gio, + dep_glib, + dep_gmodule, + dep_qlite, + dep_xmpp_vala +] +sources = files( + 'src/application.vala', + 'src/dbus/login1.vala', + 'src/dbus/notifications.vala', + 'src/dbus/upower.vala', + 'src/entity/account.vala', + 'src/entity/call.vala', + 'src/entity/conversation.vala', + 'src/entity/encryption.vala', + 'src/entity/file_transfer.vala', + 'src/entity/message.vala', + 'src/entity/settings.vala', + 'src/plugin/interfaces.vala', + 'src/plugin/loader.vala', + 'src/plugin/registry.vala', + 'src/service/avatar_manager.vala', + 'src/service/blocking_manager.vala', + 'src/service/call_store.vala', + 'src/service/call_state.vala', + 'src/service/call_peer_state.vala', + 'src/service/calls.vala', + 'src/service/chat_interaction.vala', + 'src/service/connection_manager.vala', + 'src/service/content_item_store.vala', + 'src/service/conversation_manager.vala', + 'src/service/counterpart_interaction_manager.vala', + 'src/service/database.vala', + 'src/service/entity_capabilities_storage.vala', + 'src/service/entity_info.vala', + 'src/service/file_manager.vala', + 'src/service/file_transfer_storage.vala', + 'src/service/jingle_file_transfers.vala', + 'src/service/message_correction.vala', + 'src/service/message_processor.vala', + 'src/service/message_storage.vala', + 'src/service/module_manager.vala', + 'src/service/muc_manager.vala', + 'src/service/notification_events.vala', + 'src/service/presence_manager.vala', + 'src/service/registration.vala', + 'src/service/roster_manager.vala', + 'src/service/search_processor.vala', + 'src/service/stream_interactor.vala', + 'src/service/util.vala', + 'src/util/display_name.vala', + 'src/util/util.vala', + 'src/util/weak_map.vala', +) +sources += [version_vala] +c_args = [ + '-DDINO_SYSTEM_LIBDIR_NAME="@0@"'.format(get_option('prefix') / get_option('libdir')), + '-DDINO_SYSTEM_PLUGIN_DIR="@0@"'.format(get_option('prefix') / get_option('plugindir')), + '-DG_LOG_DOMAIN="libdino"', +] +lib_dino = library('dino', sources, c_args: c_args, include_directories: include_directories('src'), dependencies: dependencies) +dep_dino = declare_dependency(link_with: lib_dino, include_directories: include_directories('.', 'src')) diff --git a/libdino/src/application.vala b/libdino/src/application.vala index aaec4a11..048a88ff 100644 --- a/libdino/src/application.vala +++ b/libdino/src/application.vala @@ -2,7 +2,6 @@ using Dino.Entities; namespace Dino { -extern const string VERSION; public string get_version() { return VERSION; } public string get_short_version() { if (!VERSION.contains("~")) return VERSION; diff --git a/libdino/src/plugin/registry.vala b/libdino/src/plugin/registry.vala index e28c4de7..c75fbefe 100644 --- a/libdino/src/plugin/registry.vala +++ b/libdino/src/plugin/registry.vala @@ -3,14 +3,14 @@ using Gee; namespace Dino.Plugins { public class Registry { - internal ArrayList<EncryptionListEntry> encryption_list_entries = new ArrayList<EncryptionListEntry>(); - internal HashMap<string, CallEncryptionEntry> call_encryption_entries = new HashMap<string, CallEncryptionEntry>(); - internal ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>(); - internal ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>(); - internal Map<string, TextCommand> text_commands = new HashMap<string, TextCommand>(); - internal Gee.List<ConversationAdditionPopulator> conversation_addition_populators = new ArrayList<ConversationAdditionPopulator>(); - internal Gee.List<NotificationPopulator> notification_populators = new ArrayList<NotificationPopulator>(); - internal Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => { + public ArrayList<EncryptionListEntry> encryption_list_entries = new ArrayList<EncryptionListEntry>(); + public HashMap<string, CallEncryptionEntry> call_encryption_entries = new HashMap<string, CallEncryptionEntry>(); + public ArrayList<AccountSettingsEntry> account_settings_entries = new ArrayList<AccountSettingsEntry>(); + public ArrayList<ContactDetailsProvider> contact_details_entries = new ArrayList<ContactDetailsProvider>(); + public Map<string, TextCommand> text_commands = new HashMap<string, TextCommand>(); + public Gee.List<ConversationAdditionPopulator> conversation_addition_populators = new ArrayList<ConversationAdditionPopulator>(); + public Gee.List<NotificationPopulator> notification_populators = new ArrayList<NotificationPopulator>(); + public Gee.Collection<ConversationTitlebarEntry> conversation_titlebar_entries = new Gee.TreeSet<ConversationTitlebarEntry>((a, b) => { return (int)(a.order - b.order); }); public VideoCallPlugin? video_call_plugin; diff --git a/libdino/version.py b/libdino/version.py new file mode 100644 index 00000000..d34db6a8 --- /dev/null +++ b/libdino/version.py @@ -0,0 +1,36 @@ +import argparse +import subprocess +VERSION_VALA = """\ +namespace Dino {{ + +public const string VERSION = "{}"; + +}} +""" + +def compute_version(file, git_repo, git): + try: + with open(file) as f: + return f.read().strip() + except FileNotFoundError: + pass + return subprocess.check_output([git, "describe", "--tags"], cwd=git_repo, text=True).strip() + +def generate_version_vala(version): + if "\\" in version or "\"" in version: + raise ValueError(f"invalid version {version!r}") + return VERSION_VALA.format(version) + +def main(): + p = argparse.ArgumentParser(description="Compute the Dino version") + p.add_argument("--git-repo", help="Path to checked out git repository") + p.add_argument("--git", help="Path to git executable", default="git") + p.add_argument("version_file", metavar="VERSION_FILE", help="Use this file's contents as version if the file exists") + p.add_argument("output", metavar="OUTPUT", help="Vala file to output to") + args = p.parse_args() + out = generate_version_vala(compute_version(args.version_file, args.git_repo, args.git)) + with open(args.output, "w") as f: + f.write(out) + +if __name__ == "__main__": + main() |
