Move library version number from configure.ac to libusb/version.h
authorPeter Stuge <peter@stuge.se>
Mon, 9 May 2011 06:12:24 +0000 (08:12 +0200)
committerPeter Stuge <peter@stuge.se>
Mon, 13 Jun 2011 20:06:30 +0000 (22:06 +0200)
This is neccessary to support native MS builds. The Windows resource
file libusb/libusb-1.0.rc must include the release version, which was
previously only available after configure had run and had substituted
the numbers into a generated libusb/libusb-1.0.rc file.

The version atoms are now stored as CPP style #defines in libusb/version.h
so that the .rc no longer needs to be generated but can simply include the
header file and access the version information directly.

The m4 macro LU_DEFINE_VERSION_ATOM() was added to configure.ac to get
version atoms from libusb/version.h for use in AC_INIT(). The macro
handles C and C++ style comments in version.h, but can easily be made
to fail by obscuring the file. Please don't do that.

Tested with MinGW using autoconf, and manual compile of libusb-1.0.rc
using RC.EXE Version 5.2.3690.0 from Visual C++ 2005 Express Edition.

configure.ac
libusb/libusb-1.0.rc [moved from libusb/libusb-1.0.rc.in with 64% similarity]
libusb/version.h [new file with mode: 0644]

index b805b23..bf2875e 100644 (file)
@@ -1,12 +1,17 @@
-m4_define(LIBUSB_MAJOR, [1])
-m4_define(LIBUSB_MINOR, [0])
-m4_define(LIBUSB_MICRO, [8])
+dnl These m4 macros are whitespace sensitive and break if moved around much.
+m4_define([LU_VERSION_H], m4_include([libusb/version.h]))
+m4_define([LU_DEFINE_VERSION_ATOM],
+       [m4_define([$1], m4_bregexp(LU_VERSION_H,
+       [^#define\s*$1\s*\([0-9]*\).*], [\1]))])
+dnl The m4_bregexp() returns (only) the numbers following the #define named
+dnl in the first macro parameter. m4_define() then defines the name for use
+dnl in AC_INIT().
 
-AC_INIT([libusb], LIBUSB_MAJOR.LIBUSB_MINOR.LIBUSB_MICRO, [libusb-devel@lists.sourceforge.net], [libusb], [http://www.libusb.org/])
+LU_DEFINE_VERSION_ATOM([LIBUSB_MAJOR])
+LU_DEFINE_VERSION_ATOM([LIBUSB_MINOR])
+LU_DEFINE_VERSION_ATOM([LIBUSB_MICRO])
 
-AC_SUBST([LIBUSB_VERSION_MAJOR], [LIBUSB_MAJOR])
-AC_SUBST([LIBUSB_VERSION_MINOR], [LIBUSB_MINOR])
-AC_SUBST([LIBUSB_VERSION_MICRO], [LIBUSB_MICRO])
+AC_INIT([libusb], LIBUSB_MAJOR[.]LIBUSB_MINOR[.]LIBUSB_MICRO, [libusb-devel@lists.sourceforge.net], [libusb], [http://www.libusb.org/])
 
 # Library versioning
 # These numbers should be tweaked on every release. Read carefully:
@@ -188,7 +193,6 @@ AC_SUBST(LTLDFLAGS)
 AC_CONFIG_FILES([libusb-1.0.pc])
 AC_CONFIG_FILES([Makefile])
 AC_CONFIG_FILES([libusb/Makefile])
-AC_CONFIG_FILES([libusb/libusb-1.0.rc])
 AC_CONFIG_FILES([examples/Makefile])
 AC_CONFIG_FILES([doc/Makefile])
 AC_CONFIG_FILES([doc/doxygen.cfg])
similarity index 64%
rename from libusb/libusb-1.0.rc.in
rename to libusb/libusb-1.0.rc
index 81d46ce..58933b5 100644 (file)
@@ -7,9 +7,24 @@
  */
 #include "winresrc.h"
 
+#include "version.h"
+#ifndef LIBUSB_VERSIONSTRING
+#define LU_STR(s) #s
+#define LU_XSTR(s) LU_STR(s)
+#if LIBUSB_NANO > 0
+#define LIBUSB_VERSIONSTRING \
+       LU_XSTR(LIBUSB_MAJOR) "." LU_XSTR(LIBUSB_MINOR) "." \
+       LU_XSTR(LIBUSB_MICRO) "." LU_XSTR(LIBUSB_NANO) "\0"
+#else
+#define LIBUSB_VERSIONSTRING \
+       LU_XSTR(LIBUSB_MAJOR) "." LU_XSTR(LIBUSB_MINOR) "." \
+       LU_XSTR(LIBUSB_MICRO) "\0"
+#endif
+#endif
+
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION @LIBUSB_VERSION_MAJOR@,@LIBUSB_VERSION_MINOR@,@LIBUSB_VERSION_MICRO@,0
- PRODUCTVERSION @LIBUSB_VERSION_MAJOR@,@LIBUSB_VERSION_MINOR@,@LIBUSB_VERSION_MICRO@,0
+ FILEVERSION LIBUSB_MAJOR,LIBUSB_MINOR,LIBUSB_MICRO,LIBUSB_NANO
+ PRODUCTVERSION LIBUSB_MAJOR,LIBUSB_MINOR,LIBUSB_MICRO,LIBUSB_NANO
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -27,14 +42,14 @@ BEGIN
                        VALUE "Comments", "\0"
                        VALUE "CompanyName", "libusb.org\0"
                        VALUE "FileDescription", "C library for writing portable USB drivers in userspace\0"
-                       VALUE "FileVersion", "@PACKAGE_VERSION@"
+                       VALUE "FileVersion", LIBUSB_VERSIONSTRING
                        VALUE "InternalName", "libusb\0"
                        VALUE "LegalCopyright", "See individual source files, GNU LGPL v2.1 or later.\0"
                        VALUE "LegalTrademarks", "http://www.gnu.org/licenses/lgpl-2.1.html\0"
                        VALUE "OriginalFilename", "libusb-1.0.dll\0"
                        VALUE "PrivateBuild", "\0"
                        VALUE "ProductName", "libusb-1.0\0"
-                       VALUE "ProductVersion", "@PACKAGE_VERSION@"
+                       VALUE "ProductVersion", LIBUSB_VERSIONSTRING
                        VALUE "SpecialBuild", "\0"
                END
        END
diff --git a/libusb/version.h b/libusb/version.h
new file mode 100644 (file)
index 0000000..ec45a32
--- /dev/null
@@ -0,0 +1,14 @@
+/* This file is parsed by m4 and windres and RC.EXE so please keep it simple. */
+#ifndef LIBUSB_MAJOR
+#define LIBUSB_MAJOR 1
+#endif
+#ifndef LIBUSB_MINOR
+#define LIBUSB_MINOR 0
+#endif
+#ifndef LIBUSB_MICRO
+#define LIBUSB_MICRO 8
+#endif
+/* LIBUSB_NANO may be used for Windows internal versioning. 0 means unused. */
+#ifndef LIBUSB_NANO
+#define LIBUSB_NANO 0
+#endif