test: Add consistency checks for the `PNG_LIBPNG_VER*` numbers
Trigger a compile-time error in pngtest.c if there is any disagreement
among `PNG_LIBPNG_VER`, `PNG_LIBPNG_VER_MAJOR`, `PNG_LIBPNG_VER_MINOR`,
etc.
diff --git a/pngtest.c b/pngtest.c
index dd9c232..601cd8b 100644
--- a/pngtest.c
+++ b/pngtest.c
@@ -45,8 +45,19 @@
#include "png.h"
-/* KEEPME in libpng-1.6.x */
-#define STDERR stdout
+/* Generate a compiler error if there is an old png.h in the search path. */
+typedef png_libpng_version_1_6_43_git Your_png_h_is_not_version_1_6_43_git;
+
+/* Ensure that all version numbers in png.h are consistent with one another. */
+#if (PNG_LIBPNG_VER != PNG_LIBPNG_VER_MAJOR * 10000 + \
+ PNG_LIBPNG_VER_MINOR * 100 + \
+ PNG_LIBPNG_VER_RELEASE) || \
+ (PNG_LIBPNG_VER_SONUM != PNG_LIBPNG_VER_MAJOR * 10 + \
+ PNG_LIBPNG_VER_MINOR) || \
+ (PNG_LIBPNG_VER_DLLNUM != PNG_LIBPNG_VER_MAJOR * 10 + \
+ PNG_LIBPNG_VER_MINOR)
+# error "Inconsistent version numbers in png.h"
+#endif
/* In version 1.6.1, we added support for the configure test harness, which
* uses 77 to indicate a skipped test. On the other hand, in cmake build tests,
@@ -58,7 +69,6 @@
# define SKIP 0
#endif
-
/* Known chunks that exist in pngtest.png must be supported, or pngtest will
* fail simply as a result of re-ordering them. This may be fixed in the next
* generation of libpng.
@@ -93,6 +103,11 @@
typedef FILE * png_FILE_p;
#endif
+/* This hack was introduced for historical reasons, and we are
+ * still keeping it in libpng-1.6.x for compatibility reasons.
+ */
+#define STDERR stdout
+
#ifndef PNG_DEBUG
# define PNG_DEBUG 0
#endif
@@ -1786,12 +1801,11 @@
fprintf(STDERR, " NOTE: libpng compiled for max 64k, zlib not\n");
#endif
- if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING))
+ if (strcmp(png_libpng_ver, PNG_LIBPNG_VER_STRING) != 0)
{
- fprintf(STDERR,
- "Warning: versions are different between png.h and png.c\n");
- fprintf(STDERR, " png.h version: %s\n", PNG_LIBPNG_VER_STRING);
- fprintf(STDERR, " png.c version: %s\n\n", png_libpng_ver);
+ fprintf(STDERR, "Warning: mismatching versions of png.h and png.c\n");
+ fprintf(STDERR, " png.h version string: %s\n", PNG_LIBPNG_VER_STRING);
+ fprintf(STDERR, " png.c version string: %s\n\n", png_libpng_ver);
++ierror;
}
@@ -2088,6 +2102,3 @@
return SKIP;
}
#endif
-
-/* Generate a compiler error if there is an old png.h in the search path. */
-typedef png_libpng_version_1_6_43_git Your_png_h_is_not_version_1_6_43_git;