diff options
author | Marvin W <git@larma.de> | 2024-08-01 15:33:56 +0200 |
---|---|---|
committer | Marvin W <git@larma.de> | 2025-01-12 20:00:51 +0100 |
commit | 613cb5e2d7c3f1469f4f91b86fa982eda472465b (patch) | |
tree | ea1315a2c1d48bcc91589aa3cee130eb1d96d533 | |
parent | a63b5ccb9a791d78ad7f5811f414ae8dab0c4f15 (diff) | |
download | dino-613cb5e2d7c3f1469f4f91b86fa982eda472465b.tar.gz dino-613cb5e2d7c3f1469f4f91b86fa982eda472465b.zip |
Meson: Adjust version generation to match CMake
and be compatible with vala-language-server
-rw-r--r-- | libdino/meson.build | 11 | ||||
-rw-r--r-- | libdino/src/version.vala.in | 5 | ||||
-rw-r--r-- | libdino/version.py | 65 | ||||
-rw-r--r-- | meson.build | 2 | ||||
-rw-r--r-- | xmpp-vala/src/module/tls.vala | 96 |
5 files changed, 55 insertions, 124 deletions
diff --git a/libdino/meson.build b/libdino/meson.build index 85487d48..f88cbb06 100644 --- a/libdino/meson.build +++ b/libdino/meson.build @@ -1,18 +1,11 @@ # 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()] +command = [prog_python, files('version.py'), version_file, '--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) +version_vala = vcs_tag(command: command, input: 'src/version.vala.in', output: 'version.vala', replace_string: '%VERSION%') # libdino dependencies = [ diff --git a/libdino/src/version.vala.in b/libdino/src/version.vala.in new file mode 100644 index 00000000..2711d4a6 --- /dev/null +++ b/libdino/src/version.vala.in @@ -0,0 +1,5 @@ +namespace Dino { + +public const string VERSION = "%VERSION%"; + +} diff --git a/libdino/version.py b/libdino/version.py index d34db6a8..dfbadb76 100644 --- a/libdino/version.py +++ b/libdino/version.py @@ -1,36 +1,65 @@ import argparse import subprocess -VERSION_VALA = """\ -namespace Dino {{ +import re -public const string VERSION = "{}"; -}} -""" - -def compute_version(file, git_repo, git): +def compute_version_from_file(file): try: with open(file) as f: - return f.read().strip() + version_from_file = f.read().strip() + if version_from_file != "": + if version_from_file.startswith("RELEASE "): + return version_from_file[8:].strip() + if version_from_file.startswith("PRERELEASE "): + return version_from_file[11:].strip() + return version_from_file except FileNotFoundError: pass - return subprocess.check_output([git, "describe", "--tags"], cwd=git_repo, text=True).strip() + return None + + +def compute_version_from_git(git_repo, git): + try: + git_release_tag = subprocess.check_output([git, "describe", "--tags", "--abbrev=0"], + cwd=git_repo, text=True).strip() + if re.match("^v?([0-9]+[.]?[0-9]*[.]?[0-9]*)(-[.0-9A-Za-z-]+)?([+][.0-9A-Za-z-]+)?$", git_release_tag) is None: + return None + git_describe = subprocess.check_output([git, "describe", "--tags"], cwd=git_repo, text=True).strip() + if git_release_tag == git_describe: + return git_release_tag + matches = re.match("^.*-([0-9]+)-g([0-9a-f]+)$", git_describe) + if matches is None: + return None + git_tag_offset = matches.groups()[0] + git_commit_hash = matches.groups()[1] + git_commit_time = subprocess.check_output([git, "show", "--format=%cd", "--date=format:%Y%m%d", "-s"], + cwd=git_repo, text=True).strip() + return "%s~git%s.%s.%s" % (git_release_tag, git_tag_offset, git_commit_time, git_commit_hash) + except subprocess.CalledProcessError: + pass + return None + + +def compute_version(file, git_repo, git): + version_from_file = compute_version_from_file(file) + if version_from_file is not None: + return version_from_file + version_from_git = compute_version_from_git(git_repo, git) + if version_from_git is not None: + return version_from_git + return "" -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") + p.add_argument("version_file", metavar="VERSION_FILE", + help="Use this file's contents as version if the file exists") 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) + version = compute_version(args.version_file, args.git_repo, args.git) + print(version) + if __name__ == "__main__": main() diff --git a/meson.build b/meson.build index 2a904c2c..4d3ab0ff 100644 --- a/meson.build +++ b/meson.build @@ -1,4 +1,4 @@ -project('xmpp-vala', 'c', 'cpp', 'vala') +project('Dino', 'c', 'cpp', 'vala', license: 'GPL-3.0', license_files: 'LICENSE') fs = import('fs') gnome = import('gnome') diff --git a/xmpp-vala/src/module/tls.vala b/xmpp-vala/src/module/tls.vala deleted file mode 100644 index 1b8a5411..00000000 --- a/xmpp-vala/src/module/tls.vala +++ /dev/null @@ -1,96 +0,0 @@ -namespace Xmpp.Tls { - private const string NS_URI = "urn:ietf:params:xml:ns:xmpp-tls"; - - public class Module : XmppStreamNegotiationModule { - public static ModuleIdentity<Module> IDENTITY = new ModuleIdentity<Module>(NS_URI, "tls_module"); - - public signal void invalid_certificate(TlsCertificate peer_cert, TlsCertificateFlags errors); - public bool require { get; set; default = true; } - public bool server_supports_tls = false; - public bool server_requires_tls = false; - public SocketConnectable? identity = null; - - public override void attach(XmppStream stream) { - stream.received_features_node.connect(this.received_features_node); - stream.received_nonza.connect(this.received_nonza); - } - - public override void detach(XmppStream stream) { - stream.received_features_node.disconnect(this.received_features_node); - stream.received_nonza.disconnect(this.received_nonza); - } - - private void received_nonza(XmppStream stream, StanzaNode node) { - if (node.ns_uri == NS_URI && node.name == "proceed") { - try { - StartTlsXmppStream? tls_xmpp_stream = stream as StartTlsXmppStream; - var io_stream = tls_xmpp_stream.get_stream(); - if (io_stream == null) return; - var conn = TlsClientConnection.new(io_stream, identity); - tls_xmpp_stream.reset_stream(conn); - - conn.accept_certificate.connect(on_invalid_certificate); - var flag = stream.get_flag(Flag.IDENTITY); - flag.peer_certificate = conn.get_peer_certificate(); - flag.finished = true; - } catch (Error e) { - stderr.printf("Failed to start TLS: %s\n", e.message); - } - } - } - - private void received_features_node(XmppStream stream) { - if (stream.has_flag(Flag.IDENTITY)) return; - if (stream.is_setup_needed()) return; - - var starttls = stream.features.get_subnode("starttls", NS_URI); - if (starttls != null) { - server_supports_tls = true; - if (starttls.get_subnode("required") != null || stream.features.get_all_subnodes().size == 1) { - server_requires_tls = true; - } - if (server_requires_tls || require) { - stream.write(new StanzaNode.build("starttls", NS_URI).add_self_xmlns()); - } - if (identity == null) { - identity = new NetworkService("xmpp-client", "tcp", stream.remote_name.to_string()); - } - stream.add_flag(new Flag()); - } - } - - public bool on_invalid_certificate(TlsCertificate peer_cert, TlsCertificateFlags errors) { - string error_str = ""; - foreach (var f in new TlsCertificateFlags[]{TlsCertificateFlags.UNKNOWN_CA, TlsCertificateFlags.BAD_IDENTITY, - TlsCertificateFlags.NOT_ACTIVATED, TlsCertificateFlags.EXPIRED, TlsCertificateFlags.REVOKED, - TlsCertificateFlags.INSECURE, TlsCertificateFlags.GENERIC_ERROR, TlsCertificateFlags.VALIDATE_ALL}) { - if (f in errors) { - error_str += @"$(f), "; - } - } - warning(@"Tls Certificate Errors: $(error_str)"); - invalid_certificate(peer_cert, errors); - return false; - } - - public override bool mandatory_outstanding(XmppStream stream) { - return require && (!stream.has_flag(Flag.IDENTITY) || !stream.get_flag(Flag.IDENTITY).finished); - } - - public override bool negotiation_active(XmppStream stream) { - return stream.has_flag(Flag.IDENTITY) && !stream.get_flag(Flag.IDENTITY).finished; - } - - public override string get_ns() { return NS_URI; } - public override string get_id() { return IDENTITY.id; } - } - - public class Flag : XmppStreamFlag { - public static FlagIdentity<Flag> IDENTITY = new FlagIdentity<Flag>(NS_URI, "tls"); - public TlsCertificate? peer_certificate; - public bool finished { get; set; default=false; } - - public override string get_ns() { return NS_URI; } - public override string get_id() { return IDENTITY.id; } - } -} |