aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2024-08-01 15:33:56 +0200
committerMarvin W <git@larma.de>2025-01-12 20:00:51 +0100
commit613cb5e2d7c3f1469f4f91b86fa982eda472465b (patch)
treeea1315a2c1d48bcc91589aa3cee130eb1d96d533
parenta63b5ccb9a791d78ad7f5811f414ae8dab0c4f15 (diff)
downloaddino-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.build11
-rw-r--r--libdino/src/version.vala.in5
-rw-r--r--libdino/version.py65
-rw-r--r--meson.build2
-rw-r--r--xmpp-vala/src/module/tls.vala96
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; }
- }
-}