From 4dd113ac7bde4f25e2de1a45d0d9a394e4e6bfed Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Mon, 13 Jul 2020 00:18:29 -0400 Subject: [PATCH] Add git version --- lib/gtp/node.c | 3 +- meson.build | 15 ++- meson_options.txt | 19 ++++ misc/git-version-gen | 227 -------------------------------------- misc/meson-vcs-tag.sh | 22 ++++ src/amf/meson.build | 2 +- src/ausf/meson.build | 2 +- src/hss/meson.build | 2 +- src/meson.build | 4 - src/mme/meson.build | 2 +- src/nrf/meson.build | 2 +- src/pcrf/meson.build | 2 +- src/pgw/meson.build | 2 +- src/pgw/pgw-s5c-handler.c | 3 +- src/sgw/meson.build | 2 +- src/sgw/sgw-gtp-path.c | 3 +- src/sgw/sgw-s11-handler.c | 12 +- src/smf/meson.build | 2 +- src/udm/meson.build | 2 +- src/udr/meson.build | 2 +- src/upf/meson.build | 2 +- src/version.h.in | 1 + tests/app/meson.build | 4 +- 23 files changed, 80 insertions(+), 257 deletions(-) create mode 100644 meson_options.txt delete mode 100755 misc/git-version-gen create mode 100755 misc/meson-vcs-tag.sh create mode 100644 src/version.h.in diff --git a/lib/gtp/node.c b/lib/gtp/node.c index cb20b48c2..3801bcb8b 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 9674556f4..2864a6118 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 000000000..816f0669f --- /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 0e254f4be..000000000 --- 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 000000000..5dc95fa8c --- /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 85214eb18..62fe73395 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 97271e84b..96ae45b0c 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 9051adc24..d9a537121 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 9c7e37bdf..7e3638064 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 ca6a5edf1..b41591ede 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 57ac0377b..dee051a43 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 e265e8730..d190d05cc 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 e5ce833a4..8bfacb960 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 0413e1fdd..bea512132 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 21121f672..84d79d818 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 79936c0f7..7c3ccad50 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 2f57520b3..2ea4dcbb8 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 8f1911a44..af6a26647 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 cdab3e909..50034b6c8 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 c1782f6ec..e26e1e5ed 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 05cdfa846..f43ae7a47 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 000000000..c4075c3bc --- /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 8d7f441a3..9c9d92988 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])