core: move version strings to a separate file
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 13 Jul 2010 17:59:26 +0000 (19:59 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Tue, 13 Jul 2010 19:03:37 +0000 (21:03 +0200)
- moved version strings to variables (instead of macros) and in a
separate file (ver.c). This will require re-compiling only one
small file  and re-linking on version or repository changes (e.g.
new commit or local uncommitted changes), instead of recompiling
main.c and core_cmd.c.
- more detailed info about the repository state is now available via
 repo_hash (hash of the top commit) and repo_state (dirty or "").
- the core.version rpc reports now directly the version number
(complete with repository hash and state), without prefixing it
with "Server:", e.g.:
    ser 3.0.99-dev1 (i386/linux) dd9681-dirty
instead of
    Server: ser (3.0.99-dev1 (i386/freebsd)) d89437-dirty

Makefile
core_cmd.c
main.c
modules_k/kex/mi_core.c
sr_module.h
ver.c [new file with mode: 0644]
ver.h [new file with mode: 0644]
ver_defs.h [moved from version.h with 98% similarity]

index b3fa651..516b294 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -491,12 +491,11 @@ modules_search_path=$(subst $(space),:,$(strip\
                #                               $(addprefix $(modules_target),$(modules_dirs))))
 
 # special depends for main.o
-main.d main.o: autover.h
 main.o: DEFS+=-DMODS_DIR='"$(modules_search_path)"'
 
 
-#special depends for core_cmd.o
-core_cmd.d core_cmd.o: autover.h
+#special depends for ver.c
+ver.d ver.o: autover.h
 
 include Makefile.shared
 
@@ -564,10 +563,14 @@ repo_ver=$(shell  RV=`git rev-parse --verify --short=6 HEAD 2>/dev/null`;\
                                                        ; git diff-index --name-only HEAD 2>/dev/null | \
                                                                grep -v Makefile`" &&\
                                                RV="$$RV"-dirty; echo "$$RV")
+repo_hash=$(subst -dirty,,$(repo_ver))
+repo_state=$(patsubst %-dirty,dirty,$(repo_ver))
 autover_h_dep=.git $(filter-out $(auto_gen), $(sources)) cfg.y cfg.lex
 else
 # else if .git/ does not exist
 repo_ver=
+repo_hash="unknown"
+repo_state=
 autover_h_dep=
 endif
 
@@ -579,6 +582,8 @@ autover.h: $(autover_h_dep)
        @echo " */" >>$@
        @echo "" >>$@
        @echo "#define REPO_VER \"$(repo_ver)\"" >>$@
+       @echo "#define REPO_HASH \"$(repo_hash)\"" >>$@
+       @echo "#define REPO_STATE \"$(repo_state)\"" >>$@
 
 .PHONY: all
 all: $(NAME) every-module
index b049af9..589908d 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-/*!
- * \file
- * \brief SIP-router core :: 
- * \ingroup core
- * Module: \ref core
+/** core rpcs.
+ * @file core_cmd.c
+ * @ingroup core
  */
 
 
 #include <time.h>
 #include <sys/types.h>
 #include <signal.h>
-#include "autover.h"
+#include "ver.h"
 #include "mem/mem.h"
 #include "mem/shm_mem.h"
 #include "sr_module.h"
@@ -336,7 +334,7 @@ static const char* core_version_doc[] = {
 
 static void core_version(rpc_t* rpc, void* c)
 {
-       rpc->add(c, "s", SERVER_HDR " " REPO_VER );
+       rpc->add(c, "s", full_version);
 }
 
 
diff --git a/main.c b/main.c
index 7d28bcd..8f71731 100644 (file)
--- a/main.c
+++ b/main.c
  * 2008-08-08  sctp support (andrei)
  * 2008-08-19  -l support for mmultihomed addresses/addresses lists
  *                (e.g. -l (eth0, 1.2.3.4, foo.bar) ) (andrei)
- *  2010-04-19 added daemon_status_fd pipe to communicate the parent process with
-               the main process in daemonize mode, so the parent process can return
              the proper exit status code (ibc)
+ *  2010-04-19 added daemon_status_fd pipe to communicate the parent process
+ *             with the main process in daemonize mode, so the parent process
*             can return the proper exit status code (ibc)
  */
 
-/*!
- * \file
- * \brief SIP-router core :: 
- * \ingroup core
- * Module: \ref core
+/** main file (init, daemonize, startup) 
+ * @file main.c
+ * @ingroup core
+ * Module: core
  */
 
-/*! \defgroup core SIP-router core
- *
- * This modules implements a SIP server with a module interface
- * for extendability.
+/*! @defgroup core SIP-router core
  *
+ * sip router core part.
  */
 
 #include <stdio.h>
 #ifdef DEBUG_DMALLOC
 #include <dmalloc.h>
 #endif
-#include "autover.h"
-#include "version.h"
+#include "ver.h"
 
 /* define SIG_DEBUG by default */
 #ifdef NO_SIG_DEBUG
 #define SIG_DEBUG
 #endif
 
-static char id[]="@(#) $Id$";
-static char* version=SER_FULL_VERSION " " REPO_VER;
-static char* flags=SER_COMPILE_FLAGS;
-char compiled[]= __TIME__ " " __DATE__ ;
 
 
 static char help_msg[]= "\
@@ -1688,7 +1680,7 @@ int main(int argc, char** argv)
        opterr = 0;
        while((c=getopt(argc,argv,options))!=-1) {
                if (c == 'h' || (optarg && strcmp(optarg, "-h") == 0)) {
-                       printf("version: %s\n", version);
+                       printf("version: %s\n", full_version);
                        printf("%s",help_msg);
                        exit(0);
                        break;
@@ -1724,8 +1716,8 @@ int main(int argc, char** argv)
                                        default_core_cfg.debug++;
                                        break;
                        case 'V':
-                                       printf("version: %s\n", version);
-                                       printf("flags: %s\n", flags );
+                                       printf("version: %s\n", full_version);
+                                       printf("flags: %s\n", ver_flags );
                                        print_ct_constants();
 #ifdef USE_SCTP
                                        tmp=malloc(256);
@@ -1733,9 +1725,9 @@ int main(int argc, char** argv)
                                                printf("sctp unsupported socket options: %s\n", tmp);
                                        if (tmp) free(tmp);
 #endif
-                                       printf("%s\n",id);
-                                       printf("%s compiled on %s with %s\n", __FILE__,
-                                                       compiled, COMPILER );
+                                       printf("id: %s\n", ver_id);
+                                       printf("compiled on %s with %s\n",
+                                                       ver_compiled_time, ver_compiler );
 
                                        exit(0);
                                        break;
index 157d9f4..241b0b6 100644 (file)
@@ -47,7 +47,7 @@
 #include "../../pt.h"
 #include "../../mem/mem.h"
 #include "../../lib/kmi/mi.h"
-#include "../../version.h"
+#include "../../ver.h"
 #include "../../cfg/cfg.h"
 #include "../../cfg/cfg_ctx.h"
 
@@ -139,12 +139,8 @@ static struct mi_root *mi_version(struct mi_root *cmd, void *param)
        if (node==0) 
                goto error;
 
-#ifndef KAMAILIO_COMPILE_FLAGS
-#define KAMAILIO_COMPILE_FLAGS SER_COMPILE_FLAGS
-#endif
-
-       node = add_mi_node_child( rpl, 0, MI_SSTR("Flags"), KAMAILIO_COMPILE_FLAGS,
-                       sizeof(KAMAILIO_COMPILE_FLAGS)-1);
+       node = add_mi_node_child( rpl, 0, MI_SSTR("Flags"), (char*)ver_flags,
+                               strlen(ver_flags));
        if (node==0) 
                goto error;     
        
index b055c88..d098f78 100644 (file)
@@ -61,7 +61,7 @@
 #include <dlfcn.h>
 
 #include "parser/msg_parser.h" /* for sip_msg */
-#include "version.h"
+#include "ver_defs.h"
 #include "rpc.h"
 #include "route_struct.h"
 #include "route.h"
diff --git a/ver.c b/ver.c
new file mode 100644 (file)
index 0000000..80f1b26
--- /dev/null
+++ b/ver.c
@@ -0,0 +1,46 @@
+/* 
+ * $Id$
+ * 
+ * Copyright (C) 2010 iptelorg GmbH
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+/** version strings.
+ * @file ver.c
+ * @ingroup: core
+ */
+/*
+ * History:
+ * --------
+ *  2010-07-13  initial version (andrei)
+*/
+
+#include "ver_defs.h"
+#include "autover.h" /* REPO_VER, REPO_STATE */
+
+
+const char full_version[] = SER_FULL_VERSION " " REPO_VER;
+const char ver_id[] = REPO_HASH " " REPO_STATE;
+const char ver_compiled_time[] =  __TIME__ " " __DATE__ ;
+const char ver_compiler[] = COMPILER;
+
+const char ver_flags[] = SER_COMPILE_FLAGS;
+
+/** hash-state. */
+const char repo_ver[] = REPO_VER;
+/** git hash. */
+const char repo_hash[] = REPO_HASH;
+/** state of the repository: dirty (uncommited changes) or "" */
+const char repo_state[] = REPO_STATE;
+
+/* vi: set ts=4 sw=4 tw=79:ai:cindent: */
diff --git a/ver.h b/ver.h
new file mode 100644 (file)
index 0000000..ba036f3
--- /dev/null
+++ b/ver.h
@@ -0,0 +1,43 @@
+/* 
+ * $Id$
+ * 
+ * Copyright (C) 2010 iptelorg GmbH
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+/** version strings.
+ * @file ver.h
+ * @ingroup: core
+ */
+/*
+ * History:
+ * --------
+ *  2010-07-13  initial version (andrei)
+*/
+
+#ifndef __ver_h
+#define __ver_h
+
+extern const char full_version[];
+extern const char ver_id[];
+extern const char ver_compiled_time[];
+extern const char ver_compiler[];
+extern const char ver_flags[];
+extern const char repo_ver[];
+extern const char repo_hash[];
+extern const char repo_state[];
+
+
+#endif /*__ver_h*/
+
+/* vi: set ts=4 sw=4 tw=79:ai:cindent: */
similarity index 98%
rename from version.h
rename to ver_defs.h
index 1c60539..e6eb391 100644 (file)
--- a/version.h
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-/*!
- * \file
- * \brief SIP-router core :: version and compile flag macros
- * \ingroup core
- *
- * Module: \ref core
+/** compile flags and other version related defines.
+ * @file ver_defs.h
+ * @ingroup core
  */
 
 #ifndef version_h