From df91c16103fba06a4016f76dedb7edaeb4a13e60 Mon Sep 17 00:00:00 2001 From: Cary Phillips Date: Mon, 28 Aug 2023 10:43:47 -0700 Subject: [PATCH] OpenEXRConfig.h.in uses version extracted from openexr_version.h (#1527) * OpenEXRConfig.h.in uses version extracted from openexr_version.h The logic was already in place to extract the version from `openexr_version.h`, so the `.in` file just needed to reference the proper CMake variables. This also duplicates the `OpenEXR_VERSION_*` settings to `OPENEXR_VERSION_*`. Signed-off-by: Cary Phillips * bazel Signed-off-by: Cary Phillips * comment Signed-off-by: Cary Phillips * fix formatting of core version test error message Signed-off-by: Cary Phillips * fix extra comparison test Signed-off-by: Cary Phillips --------- Signed-off-by: Cary Phillips --- BUILD.bazel | 3 +++ CMakeLists.txt | 8 ++++---- cmake/OpenEXRConfig.h.in | 21 +++++++++++++-------- src/lib/OpenEXRCore/base.c | 1 + src/test/OpenEXRCoreTest/CMakeLists.txt | 2 +- src/test/OpenEXRCoreTest/base_units.cpp | 18 +++++++++--------- 6 files changed, 31 insertions(+), 22 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 98923b9616..b51a6abe57 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -54,6 +54,9 @@ expand_template( "@OPENEXR_PACKAGE_NAME@": "OpenEXR 3.2.0", "@OPENEXR_VERSION_EXTRA@": "", "@OPENEXR_VERSION@": "3.2.0", + "@OPENEXR_VERSION_MAJOR@": "3", + "@OPENEXR_VERSION_MINOR@": "2", + "@OPENEXR_VERSION_PATCH@": "0", "#cmakedefine OPENEXR_ENABLE_API_VISIBILITY": "#define OPENEXR_ENABLE_API_VISIBILITY", "#cmakedefine OPENEXR_HAVE_LARGE_STACK 1": "/* #undef OPENEXR_HAVE_LARGE_STACK */", }, diff --git a/CMakeLists.txt b/CMakeLists.txt index 02453a4498..5a97330051 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -21,13 +21,13 @@ endif() file(READ "src/lib/OpenEXRCore/openexr_version.h" VERSION_H) string(REGEX MATCH "VERSION_MAJOR ([0-9]*)" _ ${VERSION_H}) -set(VER_MAJ ${CMAKE_MATCH_1}) +set(OPENEXR_VERSION_MAJOR ${CMAKE_MATCH_1}) string(REGEX MATCH "VERSION_MINOR ([0-9]*)" _ ${VERSION_H}) -set(VER_MIN ${CMAKE_MATCH_1}) +set(OPENEXR_VERSION_MINOR ${CMAKE_MATCH_1}) string(REGEX MATCH "VERSION_PATCH ([0-9]*)" _ ${VERSION_H}) -set(VER_PCH ${CMAKE_MATCH_1}) +set(OPENEXR_VERSION_PATCH ${CMAKE_MATCH_1}) -project(OpenEXR VERSION ${VER_MAJ}.${VER_MIN}.${VER_PCH} LANGUAGES C CXX) +project(OpenEXR VERSION ${OPENEXR_VERSION_MAJOR}.${OPENEXR_VERSION_MINOR}.${OPENEXR_VERSION_PATCH} LANGUAGES C CXX) set(OPENEXR_VERSION_RELEASE_TYPE "-dev" CACHE STRING "Extra version tag string for OpenEXR build, such as -dev, -beta1, etc.") diff --git a/cmake/OpenEXRConfig.h.in b/cmake/OpenEXRConfig.h.in index 9227aebf40..808d241860 100644 --- a/cmake/OpenEXRConfig.h.in +++ b/cmake/OpenEXRConfig.h.in @@ -8,14 +8,19 @@ #pragma once -/// @TODO get the version from the header files. -/// due to the structure of the cmake configuration steps, -/// it's not obvious how to structure things for this to work. -/// so for now, just hardcode the version here. -//#include -#define OPENEXR_VERSION_MAJOR 3 -#define OPENEXR_VERSION_MINOR 2 -#define OPENEXR_VERSION_PATCH 0 +// +// The OpenEXR release version is defined officially in +// src/lib/OpenEXRCore/openexr_version.h, but CMake doesn't readily allow +// that to be included here, so duplicate the settings for +// backwards-compatibility with applications that may expect to get the +// defines from this include. +// + +#ifndef INCLUDED_OPENEXR_VERSION_H +#define OPENEXR_VERSION_MAJOR @OpenEXR_VERSION_MAJOR@ +#define OPENEXR_VERSION_MINOR @OpenEXR_VERSION_MINOR@ +#define OPENEXR_VERSION_PATCH @OpenEXR_VERSION_PATCH@ +#endif // // Options / configuration based on O.S. / compiler diff --git a/src/lib/OpenEXRCore/base.c b/src/lib/OpenEXRCore/base.c index 7d5e04233a..513e73ea2c 100644 --- a/src/lib/OpenEXRCore/base.c +++ b/src/lib/OpenEXRCore/base.c @@ -5,6 +5,7 @@ #include "openexr_base.h" #include "openexr_errors.h" +#include "openexr_version.h" /**************************************/ diff --git a/src/test/OpenEXRCoreTest/CMakeLists.txt b/src/test/OpenEXRCoreTest/CMakeLists.txt index 082abde8b3..f16f2eb085 100644 --- a/src/test/OpenEXRCoreTest/CMakeLists.txt +++ b/src/test/OpenEXRCoreTest/CMakeLists.txt @@ -27,7 +27,7 @@ target_compile_definitions(OpenEXRCoreTest PRIVATE COMP_MAJ=${OpenEXR_VERSION_MAJOR} COMP_MIN=${OpenEXR_VERSION_MINOR} COMP_PATCH=${OpenEXR_VERSION_PATCH} - COMP_EXTRA="\\"${OPENEXR_VERSION_RELEASE_TYPE}\\"" + COMP_EXTRA="${OPENEXR_VERSION_RELEASE_TYPE}" ) set_target_properties(OpenEXRCoreTest PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" diff --git a/src/test/OpenEXRCoreTest/base_units.cpp b/src/test/OpenEXRCoreTest/base_units.cpp index dca8cc15d1..394557d12e 100644 --- a/src/test/OpenEXRCoreTest/base_units.cpp +++ b/src/test/OpenEXRCoreTest/base_units.cpp @@ -32,21 +32,21 @@ testBase (const std::string& tempdir) exr_get_library_version (&major, &minor, &patch, &extra); if (major != COMP_MAJ || minor != COMP_MIN || patch != COMP_PATCH || - !strcmp (extra, compextra)) + strcmp (extra, compextra)) { - std::cerr << "ERROR testing library, wrong library version: " << major + std::cerr << "ERROR testing library, wrong library version: '" << major << "." << minor << "." << patch; - if (extra[0] != '\0') std::cerr << "-" << extra; - std::cerr << " vs compiled in " << COMP_MAJ << "." << COMP_MIN << "." + if (extra[0] != '\0') std::cerr << extra; + std::cerr << "' vs compiled in '" << COMP_MAJ << "." << COMP_MIN << "." << COMP_PATCH; - if (compextra[0] != '\0') std::cerr << "-" << compextra; - std::cerr << std::endl; + if (compextra[0] != '\0') std::cerr << compextra; + std::cerr << "'" << std::endl; EXRCORE_TEST (false); } - std::cout << "Testing OpenEXR library version: " << major << "." << minor << "." + std::cout << "Testing OpenEXR library version: '" << major << "." << minor << "." << patch; - if (extra[0] != '\0') std::cout << "-" << extra; - std::cout << std::endl; + if (extra[0] != '\0') std::cout << extra; + std::cout << "'" << std::endl; exr_get_library_version (NULL, &minor, &patch, &extra); exr_get_library_version (&major, NULL, &patch, &extra);