]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - version.c
Introduce version.c to limit recompilation on version changes.
[paraslash.git] / version.c
diff --git a/version.c b/version.c
new file mode 100644 (file)
index 0000000..d2df481
--- /dev/null
+++ b/version.c
@@ -0,0 +1,76 @@
+#include "para.h"
+
+/** \file version.h Macros for printing the version string. */
+
+#include "git-version.h"
+
+/**
+ * Get the raw git version string
+ *
+ * \return The string generated by the GIT-VERSION-GEN script. It is passed
+ * as a preprocessor define during compilation.
+ */
+const char *version_git(void)
+{
+       return GIT_VERSION;
+}
+
+/**
+ * Get the version string for an executable.
+ *
+ * \param pfx The program name (without the leading "para_").
+ *
+ * \return A statically allocated string which contains the program name, the
+ * git version and the codename. It must not be freed by the caller.
+ */
+const char *version_single_line(const char *pfx)
+{
+       static char buf[100];
+       snprintf(buf, sizeof(buf) - 1,
+               "para_%s " GIT_VERSION " (" CODENAME ")", pfx);
+       return buf;
+}
+
+/**
+ * Get the full version text.
+ *
+ * \param pfx See \ref version_single_line().
+ *
+ * \return A string containing the same text as returned by \ref
+ * version_single_line(), augmented by additional build information, a
+ * copyright text and the email address of the author.
+ *
+ * Like \ref version_single_line(), this string is stored in a statically
+ * allocated buffer and must not be freed.
+ */
+const char *version_text(const char *pfx)
+{
+       static char buf[512];
+
+       snprintf(buf, sizeof(buf) - 1, "%s\n"
+               "built: " BUILD_DATE ", " UNAME_RS ", " CC_VERSION "\n"
+               "Copyright (C) 2013 Andre Noll\n"
+               "This is free software with ABSOLUTELY NO WARRANTY."
+               " See COPYING for details.\n"
+               "Report bugs to <maan@systemlinux.org>.\n",
+               version_single_line(pfx)
+       );
+       return buf;
+}
+
+/**
+ * Print the version text and exit successfully.
+ *
+ * \param pfx See \ref version_single_line().
+ * \param flag Whether --version was given.
+ *
+ * If \a flag is false, this function does nothing. Otherwise it prints the
+ * full version text as returned by \ref version_text() and exits successfully.
+ */
+void version_handle_flag(const char *pfx, bool flag)
+{
+       if (!flag)
+               return;
+       printf("%s", version_text(pfx));
+       exit(EXIT_SUCCESS);
+}