diff --git a/lib/gtp/node.c b/lib/gtp/node.c
index cb20b48c21..3801bcb8b5 100644
--- a/lib/gtp/node.c
+++ b/lib/gtp/node.c
@@ -97,8 +97,7 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
return node;
}
-ogs_gtp_node_t *ogs_gtp_node_add_by_addr(
- ogs_list_t *list, ogs_sockaddr_t *addr)
+ogs_gtp_node_t *ogs_gtp_node_add_by_addr(ogs_list_t *list, ogs_sockaddr_t *addr)
{
ogs_gtp_node_t *gnode = NULL;
ogs_sockaddr_t *new = NULL;
diff --git a/meson.build b/meson.build
index 9674556f4f..2864a6118b 100644
--- a/meson.build
+++ b/meson.build
@@ -16,9 +16,6 @@
# along with this program. If not, see .
project('open5gs', 'c',
-# Ubuntu 18.04 does not support.
-#
-# version : run_command('misc/git-version-gen', '@0@/.tarball-version'.format(meson.source_root()), check : true).stdout().strip(),
version : '1.3.0',
license : 'AGPL-3.0-or-later',
meson_version : '>= 0.43.0',
@@ -111,6 +108,18 @@ add_project_arguments(
cc.get_supported_arguments(possible_cc_flags),
language : 'c')
+vcs_tagger = [meson.source_root() + '/misc/meson-vcs-tag.sh',
+ meson.source_root(),
+ get_option('version-tag'),
+ meson.project_version()]
+
+version_h = vcs_tag(
+ input : 'src/version.h.in',
+ output : 'version.h',
+ command: vcs_tagger)
+
+versiondep = declare_dependency(sources: version_h)
+
subdir('configs')
subdir('lib')
subdir('src')
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000000..816f0669f0
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2019 by Sukchan Lee
+
+# This file is part of Open5GS.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+option('version-tag', type : 'string',
+ description : 'override the git version string')
diff --git a/misc/git-version-gen b/misc/git-version-gen
deleted file mode 100755
index 0e254f4bef..0000000000
--- a/misc/git-version-gen
+++ /dev/null
@@ -1,227 +0,0 @@
-#!/bin/sh
-# Print a version string.
-scriptversion=2017-09-13.06; # UTC
-
-# Copyright (C) 2007-2017 Free Software Foundation, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see .
-
-# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
-# It may be run two ways:
-# - from a git repository in which the "git describe" command below
-# produces useful output (thus requiring at least one signed tag)
-# - from a non-git-repo directory containing a .tarball-version file, which
-# presumes this script is invoked like "./git-version-gen .tarball-version".
-
-# In order to use intra-version strings in your project, you will need two
-# separate generated version string files:
-#
-# .tarball-version - present only in a distribution tarball, and not in
-# a checked-out repository. Created with contents that were learned at
-# the last time autoconf was run, and used by git-version-gen. Must not
-# be present in either $(srcdir) or $(builddir) for git-version-gen to
-# give accurate answers during normal development with a checked out tree,
-# but must be present in a tarball when there is no version control system.
-# Therefore, it cannot be used in any dependencies. GNUmakefile has
-# hooks to force a reconfigure at distribution time to get the value
-# correct, without penalizing normal development with extra reconfigures.
-#
-# .version - present in a checked-out repository and in a distribution
-# tarball. Usable in dependencies, particularly for files that don't
-# want to depend on config.h but do want to track version changes.
-# Delete this file prior to any autoconf run where you want to rebuild
-# files to pick up a version string change; and leave it stale to
-# minimize rebuild time after unrelated changes to configure sources.
-#
-# As with any generated file in a VC'd directory, you should add
-# /.version to .gitignore, so that you don't accidentally commit it.
-# .tarball-version is never generated in a VC'd directory, so needn't
-# be listed there.
-#
-# Use the following line in your configure.ac, so that $(VERSION) will
-# automatically be up-to-date each time configure is run (and note that
-# since configure.ac no longer includes a version string, Makefile rules
-# should not depend on configure.ac for version updates).
-#
-# AC_INIT([GNU project],
-# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
-# [bug-project@example])
-#
-# Then use the following lines in your Makefile.am, so that .version
-# will be present for dependencies, and so that .version and
-# .tarball-version will exist in distribution tarballs.
-#
-# EXTRA_DIST = $(top_srcdir)/.version
-# BUILT_SOURCES = $(top_srcdir)/.version
-# $(top_srcdir)/.version:
-# echo $(VERSION) > $@-t && mv $@-t $@
-# dist-hook:
-# echo $(VERSION) > $(distdir)/.tarball-version
-
-
-me=$0
-
-version="git-version-gen $scriptversion
-
-Copyright 2011 Free Software Foundation, Inc.
-There is NO warranty. You may redistribute this software
-under the terms of the GNU General Public License.
-For more information about these matters, see the files named COPYING."
-
-usage="\
-Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
-Print a version string.
-
-Options:
-
- --prefix PREFIX prefix of git tags (default 'v')
- --fallback VERSION
- fallback version to use if \"git --version\" fails
-
- --help display this help and exit
- --version output version information and exit
-
-Running without arguments will suffice in most cases."
-
-prefix=v
-fallback=
-
-while test $# -gt 0; do
- case $1 in
- --help) echo "$usage"; exit 0;;
- --version) echo "$version"; exit 0;;
- --prefix) shift; prefix=${1?};;
- --fallback) shift; fallback=${1?};;
- -*)
- echo "$0: Unknown option '$1'." >&2
- echo "$0: Try '--help' for more information." >&2
- exit 1;;
- *)
- if test "x$tarball_version_file" = x; then
- tarball_version_file="$1"
- elif test "x$tag_sed_script" = x; then
- tag_sed_script="$1"
- else
- echo "$0: extra non-option argument '$1'." >&2
- exit 1
- fi;;
- esac
- shift
-done
-
-if test "x$tarball_version_file" = x; then
- echo "$usage"
- exit 1
-fi
-
-tag_sed_script="${tag_sed_script:-s/x/x/}"
-
-nl='
-'
-
-# Avoid meddling by environment variable of the same name.
-v=
-v_from_git=
-
-# First see if there is a tarball-only version file.
-# then try "git describe", then default.
-if test -f $tarball_version_file
-then
- v=`cat $tarball_version_file` || v=
- case $v in
- *$nl*) v= ;; # reject multi-line output
- [0-9]*) ;;
- *) v= ;;
- esac
- test "x$v" = x \
- && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
-fi
-
-if test "x$v" != x
-then
- : # use $v
-# Otherwise, if there is at least one git commit involving the working
-# directory, and "git describe" output looks sensible, use that to
-# derive a version string.
-elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
- && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
- || git describe --abbrev=4 HEAD 2>/dev/null` \
- && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
- && case $v in
- $prefix[0-9]*) ;;
- *) (exit 1) ;;
- esac
-then
- # Is this a new git that lists number of commits since the last
- # tag or the previous older version that did not?
- # Newer: v6.10-77-g0f8faeb
- # Older: v6.10-g0f8faeb
- vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
- case $vprefix in
- *-*) : git describe is probably okay three part flavor ;;
- *)
- : git describe is older two part flavor
- # Recreate the number of commits and rewrite such that the
- # result is the same as if we were using the newer version
- # of git describe.
- vtag=`echo "$v" | sed 's/-.*//'`
- commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
- || { commit_list=failed;
- echo "$0: WARNING: git rev-list failed" 1>&2; }
- numcommits=`echo "$commit_list" | wc -l`
- v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
- test "$commit_list" = failed && v=UNKNOWN
- ;;
- esac
-
- # Change the penultimate "-" to ".", for version-comparing tools.
- # Remove the "g" to save a byte.
- v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
- v_from_git=1
-elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
- v=UNKNOWN
-else
- v=$fallback
-fi
-
-v=`echo "$v" |sed "s/^$prefix//"`
-
-# Test whether to append the "-dirty" suffix only if the version
-# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
-# or if it came from .tarball-version.
-if test "x$v_from_git" != x; then
- # Don't declare a version "dirty" merely because a timestamp has changed.
- git update-index --refresh > /dev/null 2>&1
-
- dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
- case "$dirty" in
- '') ;;
- *) # Append the suffix only if there isn't one already.
- case $v in
- *-dirty) ;;
- *) v="$v-dirty" ;;
- esac ;;
- esac
-fi
-
-# Omit the trailing newline, so that m4_esyscmd can use the result directly.
-printf %s "$v"
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC0"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/misc/meson-vcs-tag.sh b/misc/meson-vcs-tag.sh
new file mode 100755
index 0000000000..5dc95fa8c1
--- /dev/null
+++ b/misc/meson-vcs-tag.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -eu
+set -o pipefail
+
+dir="$1"
+tag="$2"
+fallback="$3"
+
+if [ -n "$tag" ]; then
+ echo "$tag"
+ exit 0
+fi
+
+# Apparently git describe has a bug where it always considers the work-tree
+# dirty when invoked with --git-dir (even though 'git status' is happy). Work
+# around this issue by cd-ing to the source directory.
+cd "$dir"
+# Check that we have either .git/ (a normal clone) or a .git file (a work-tree)
+# and that we don't get confused if a tarball is extracted in a higher-level
+# git repository.
+[ -e .git ] && git describe --abbrev=7 --dirty=+ 2>/dev/null | sed 's/^v//' || echo "$fallback"
diff --git a/src/amf/meson.build b/src/amf/meson.build
index 85214eb18f..62fe733955 100644
--- a/src/amf/meson.build
+++ b/src/amf/meson.build
@@ -80,6 +80,6 @@ executable('open5gs-amfd',
sources : amf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/amf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libamf_dep,
+ dependencies : [versiondep, libamf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/ausf/meson.build b/src/ausf/meson.build
index 97271e84bb..96ae45b0cc 100644
--- a/src/ausf/meson.build
+++ b/src/ausf/meson.build
@@ -58,6 +58,6 @@ executable('open5gs-ausfd',
sources : ausf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/ausf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libausf_dep,
+ dependencies : [versiondep, libausf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/hss/meson.build b/src/hss/meson.build
index 9051adc24e..d9a5371216 100644
--- a/src/hss/meson.build
+++ b/src/hss/meson.build
@@ -43,6 +43,6 @@ executable('open5gs-hssd',
sources : hss_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/hss.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libhss_dep,
+ dependencies : [versiondep, libhss_dep],
install_rpath : libdir,
install : true)
diff --git a/src/meson.build b/src/meson.build
index 9c7e37bdf9..7e36380645 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -17,10 +17,6 @@
srcinc = include_directories('.')
-version_conf = configuration_data()
-version_conf.set_quoted('OPEN5GS_VERSION', meson.project_version())
-configure_file(output : 'version.h', configuration : version_conf)
-
subdir('mme')
subdir('hss')
subdir('sgw')
diff --git a/src/mme/meson.build b/src/mme/meson.build
index ca6a5edf15..b41591ede4 100644
--- a/src/mme/meson.build
+++ b/src/mme/meson.build
@@ -103,6 +103,6 @@ executable('open5gs-mmed',
sources : mme_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/mme.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libmme_dep,
+ dependencies : [versiondep, libmme_dep],
install_rpath : libdir,
install : true)
diff --git a/src/nrf/meson.build b/src/nrf/meson.build
index 57ac0377b1..dee051a430 100644
--- a/src/nrf/meson.build
+++ b/src/nrf/meson.build
@@ -53,6 +53,6 @@ executable('open5gs-nrfd',
sources : nrf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/nrf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libnrf_dep,
+ dependencies : [versiondep, libnrf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/pcrf/meson.build b/src/pcrf/meson.build
index e265e87307..d190d05cc9 100644
--- a/src/pcrf/meson.build
+++ b/src/pcrf/meson.build
@@ -50,6 +50,6 @@ executable('open5gs-pcrfd',
sources : pcrf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/pcrf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libpcrf_dep,
+ dependencies : [versiondep, libpcrf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/pgw/meson.build b/src/pgw/meson.build
index e5ce833a4b..8bfacb960b 100644
--- a/src/pgw/meson.build
+++ b/src/pgw/meson.build
@@ -80,6 +80,6 @@ executable('open5gs-pgwd',
sources : pgw_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/pgw.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libpgw_dep,
+ dependencies : [versiondep, libpgw_dep],
install_rpath : libdir,
install : true)
diff --git a/src/pgw/pgw-s5c-handler.c b/src/pgw/pgw-s5c-handler.c
index 0413e1fdd1..bea5121328 100644
--- a/src/pgw/pgw-s5c-handler.c
+++ b/src/pgw/pgw-s5c-handler.c
@@ -297,7 +297,8 @@ void pgw_s5c_handle_create_bearer_response(
ogs_config()->parameter.prefer_ipv4);
ogs_assert(sgw);
- rv = ogs_gtp_connect(pgw_self()->gtpu_sock, pgw_self()->gtpu_sock6, sgw);
+ rv = ogs_gtp_connect(
+ pgw_self()->gtpu_sock, pgw_self()->gtpu_sock6, sgw);
ogs_assert(rv == OGS_OK);
}
/* Setup GTP Node */
diff --git a/src/sgw/meson.build b/src/sgw/meson.build
index 21121f6722..84d79d8188 100644
--- a/src/sgw/meson.build
+++ b/src/sgw/meson.build
@@ -50,6 +50,6 @@ executable('open5gs-sgwd',
sources : sgw_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/sgw.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libsgw_dep,
+ dependencies : [versiondep, libsgw_dep],
install_rpath : libdir,
install : true)
diff --git a/src/sgw/sgw-gtp-path.c b/src/sgw/sgw-gtp-path.c
index 79936c0f75..7c3ccad50c 100644
--- a/src/sgw/sgw-gtp-path.c
+++ b/src/sgw/sgw-gtp-path.c
@@ -85,8 +85,7 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
e = sgw_event_new(SGW_EVT_S11_MESSAGE);
gnode = ogs_gtp_node_find_by_addr(&sgw_self()->mme_s11_list, &from);
if (!gnode) {
- gnode = ogs_gtp_node_add_by_addr(
- &sgw_self()->mme_s11_list, &from);
+ gnode = ogs_gtp_node_add_by_addr(&sgw_self()->mme_s11_list, &from);
ogs_assert(gnode);
gnode->sock = data;
}
diff --git a/src/sgw/sgw-s11-handler.c b/src/sgw/sgw-s11-handler.c
index 2f57520b30..2ea4dcbb8b 100644
--- a/src/sgw/sgw-s11-handler.c
+++ b/src/sgw/sgw-s11-handler.c
@@ -162,7 +162,8 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact,
ogs_config()->parameter.prefer_ipv4);
ogs_assert(pgw);
- rv = ogs_gtp_connect(sgw_self()->gtpc_sock, sgw_self()->gtpc_sock6, pgw);
+ rv = ogs_gtp_connect(
+ sgw_self()->gtpc_sock, sgw_self()->gtpc_sock6, pgw);
ogs_assert(rv == OGS_OK);
}
/* Setup GTP Node */
@@ -187,7 +188,8 @@ void sgw_s11_handle_create_session_request(ogs_gtp_xact_t *s11_xact,
ogs_assert(req->user_location_information.len == decoded);
memcpy(&bearer->tai.plmn_id, &uli.tai.plmn_id, sizeof(uli.tai.plmn_id));
bearer->tai.tac = uli.tai.tac;
- memcpy(&bearer->e_cgi.plmn_id, &uli.e_cgi.plmn_id, sizeof(uli.e_cgi.plmn_id));
+ memcpy(&bearer->e_cgi.plmn_id,
+ &uli.e_cgi.plmn_id, sizeof(uli.e_cgi.plmn_id));
bearer->e_cgi.cell_id = uli.e_cgi.cell_id;
message->h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE;
@@ -293,7 +295,8 @@ void sgw_s11_handle_modify_bearer_request(ogs_gtp_xact_t *s11_xact,
ogs_config()->parameter.prefer_ipv4);
ogs_assert(enb);
- rv = ogs_gtp_connect(sgw_self()->gtpu_sock, sgw_self()->gtpu_sock6, enb);
+ rv = ogs_gtp_connect(
+ sgw_self()->gtpu_sock, sgw_self()->gtpu_sock6, enb);
ogs_assert(rv == OGS_OK);
}
@@ -557,7 +560,8 @@ void sgw_s11_handle_create_bearer_response(ogs_gtp_xact_t *s11_xact,
ogs_config()->parameter.prefer_ipv4);
ogs_assert(enb);
- rv = ogs_gtp_connect(sgw_self()->gtpu_sock, sgw_self()->gtpu_sock6, enb);
+ rv = ogs_gtp_connect(
+ sgw_self()->gtpu_sock, sgw_self()->gtpu_sock6, enb);
ogs_assert(rv == OGS_OK);
}
/* Setup GTP Node */
diff --git a/src/smf/meson.build b/src/smf/meson.build
index 8f1911a440..af6a266470 100644
--- a/src/smf/meson.build
+++ b/src/smf/meson.build
@@ -123,6 +123,6 @@ executable('open5gs-smfd',
sources : smf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/smf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libsmf_dep,
+ dependencies : [versiondep, libsmf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/udm/meson.build b/src/udm/meson.build
index cdab3e909c..50034b6c87 100644
--- a/src/udm/meson.build
+++ b/src/udm/meson.build
@@ -58,6 +58,6 @@ executable('open5gs-udmd',
sources : udm_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/udm.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libudm_dep,
+ dependencies : [versiondep, libudm_dep],
install_rpath : libdir,
install : true)
diff --git a/src/udr/meson.build b/src/udr/meson.build
index c1782f6ecf..e26e1e5edf 100644
--- a/src/udr/meson.build
+++ b/src/udr/meson.build
@@ -54,6 +54,6 @@ executable('open5gs-udrd',
sources : udr_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/udr.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libudr_dep,
+ dependencies : [versiondep, libudr_dep],
install_rpath : libdir,
install : true)
diff --git a/src/upf/meson.build b/src/upf/meson.build
index 05cdfa8468..f43ae7a478 100644
--- a/src/upf/meson.build
+++ b/src/upf/meson.build
@@ -85,6 +85,6 @@ executable('open5gs-upfd',
sources : upf_sources,
c_args : '-DDEFAULT_CONFIG_FILENAME="@0@/upf.yaml"'.format(open5gs_sysconfdir),
include_directories : srcinc,
- dependencies : libupf_dep,
+ dependencies : [versiondep, libupf_dep],
install_rpath : libdir,
install : true)
diff --git a/src/version.h.in b/src/version.h.in
new file mode 100644
index 0000000000..c4075c3bcb
--- /dev/null
+++ b/src/version.h.in
@@ -0,0 +1 @@
+#define OPEN5GS_VERSION "@VCS_TAG@"
diff --git a/tests/app/meson.build b/tests/app/meson.build
index 8d7f441a3e..9c9d92988f 100644
--- a/tests/app/meson.build
+++ b/tests/app/meson.build
@@ -56,7 +56,7 @@ executable('epc',
sources : [testepc_sources],
c_args : libtestepc_cc_args,
include_directories : srcinc,
- dependencies : [libtestepc_dep])
+ dependencies : [versiondep, libtestepc_dep])
libtest5gc_cc_args = '-DDEFAULT_CONFIG_FILENAME="@0@/configs/5gc.yaml"'.format(meson.build_root())
@@ -85,4 +85,4 @@ executable('5gc',
sources : [test5gc_sources],
c_args : libtest5gc_cc_args,
include_directories : srcinc,
- dependencies : [libtest5gc_dep])
+ dependencies : [versiondep, libtest5gc_dep])