From ba0c271774f56259874dffbe15f44313f9d6e954 Mon Sep 17 00:00:00 2001 From: Mickael Savinaud Date: Wed, 21 Sep 2011 10:01:54 +0000 Subject: [PATCH] Enhance the support of endianess with cmake and inside the code (credit to Winfried) --- CHANGES | 3 +++ CMakeLists.txt | 4 +++- applications/codec/convert.c | 2 +- applications/codec/image_to_j2k.c | 2 +- applications/codec/j2k_dump.c | 2 +- applications/codec/j2k_to_image.c | 1 + libopenjpeg/cio.h | 32 ++++++++++++------------------- opj_configh.cmake.in | 7 +------ 8 files changed, 23 insertions(+), 30 deletions(-) diff --git a/CHANGES b/CHANGES index 031b2270..13040582 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,9 @@ What's New for OpenJPEG ! : changed + : added +September 21, 2011 ++ [mickael] Enhance the support of endianess with cmake and inside the code (credit to Winfried) + September 20, 2011 * [mickael] WIP: fixed build issues with MJ2 option ON * [mickael] WIP: fixed build issues with JPWL option ON diff --git a/CMakeLists.txt b/CMakeLists.txt index 1af3a073..bc048b2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,12 +39,13 @@ SET(OPENJPEG_LIBRARY_PROPERTIES SOVERSION "${OPENJPEG_VERSION_MAJOR}" ) - +# -------------------------------------------------------------------------- # Path to additional CMake modules SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake ${CMAKE_MODULE_PATH}) +# -------------------------------------------------------------------------- # On Visual Studio 8 MS deprecated C. This removes all 1.276E1265 security # warnings IF(WIN32) @@ -108,6 +109,7 @@ ENDIF(NOT OPENJPEG_INSTALL_PACKAGE_DIR) #----------------------------------------------------------------------------- # Test for some required system information. +# For example this macro test the endianness (CMAKE_WORDS_BIGENDIAN) INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityC.cmake) #----------------------------------------------------------------------------- diff --git a/applications/codec/convert.c b/applications/codec/convert.c index fae8b131..d9510b14 100644 --- a/applications/codec/convert.c +++ b/applications/codec/convert.c @@ -94,7 +94,7 @@ struct tga_header static unsigned short get_ushort(unsigned short val) { -#ifdef ORDER_BIGENDIAN +#ifdef OPJ_BIG_ENDIAN return( ((val & 0xff) << 8) + (val >> 8) ); #else return( val ); diff --git a/applications/codec/image_to_j2k.c b/applications/codec/image_to_j2k.c index 4ab7445b..feb9ce89 100644 --- a/applications/codec/image_to_j2k.c +++ b/applications/codec/image_to_j2k.c @@ -29,6 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +#include "opj_config.h" #include #include @@ -49,7 +50,6 @@ #define _strnicmp strncasecmp #endif /* _WIN32 */ -#include "opj_config.h" #include "openjpeg.h" #include "opj_getopt.h" #include "convert.h" diff --git a/applications/codec/j2k_dump.c b/applications/codec/j2k_dump.c index b33d24cf..4ee93e8a 100644 --- a/applications/codec/j2k_dump.c +++ b/applications/codec/j2k_dump.c @@ -24,6 +24,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +#include "opj_config.h" #include #include @@ -44,7 +45,6 @@ #define _strnicmp strncasecmp #endif /* _WIN32 */ -#include "opj_config.h" #include "openjpeg.h" #include "j2k.h" #include "jp2.h" diff --git a/applications/codec/j2k_to_image.c b/applications/codec/j2k_to_image.c index 85bca04c..a20ac69b 100644 --- a/applications/codec/j2k_to_image.c +++ b/applications/codec/j2k_to_image.c @@ -29,6 +29,7 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +#include "opj_config.h" #include #include diff --git a/libopenjpeg/cio.h b/libopenjpeg/cio.h index ed95d5cd..d98aa861 100644 --- a/libopenjpeg/cio.h +++ b/libopenjpeg/cio.h @@ -89,27 +89,19 @@ void cio_skip(opj_cio_t *cio, int n); /* ----------------------------------------------------------------------- */ #if defined(OPJ_BIG_ENDIAN) - #if !defined(OPJ_LITTLE_ENDIAN) - #define opj_write_bytes opj_write_bytes_BE - #define opj_read_bytes opj_read_bytes_BE - #define opj_write_double opj_write_double_BE - #define opj_read_double opj_read_double_BE - #define opj_write_float opj_write_float_BE - #define opj_read_float opj_read_float_BE - #else - #error "Either BIG_ENDIAN or LITTLE_ENDIAN must be #defined, but not both." - #endif + #define opj_write_bytes opj_write_bytes_BE + #define opj_read_bytes opj_read_bytes_BE + #define opj_write_double opj_write_double_BE + #define opj_read_double opj_read_double_BE + #define opj_write_float opj_write_float_BE + #define opj_read_float opj_read_float_BE #else - #if defined(OPJ_LITTLE_ENDIAN) - #define opj_write_bytes opj_write_bytes_LE - #define opj_read_bytes opj_read_bytes_LE - #define opj_write_double opj_write_double_LE - #define opj_read_double opj_read_double_LE - #define opj_write_float opj_write_float_LE - #define opj_read_float opj_read_float_LE - #else - #error "Either BIG_ENDIAN or LITTLE_ENDIAN must be #defined, but not none." - #endif + #define opj_write_bytes opj_write_bytes_LE + #define opj_read_bytes opj_read_bytes_LE + #define opj_write_double opj_write_double_LE + #define opj_read_double opj_read_double_LE + #define opj_write_float opj_write_float_LE + #define opj_read_float opj_read_float_LE #endif diff --git a/opj_configh.cmake.in b/opj_configh.cmake.in index 6da59ddd..55977fa8 100644 --- a/opj_configh.cmake.in +++ b/opj_configh.cmake.in @@ -20,9 +20,4 @@ #cmakedefine HAVE_LCMS1_H @HAVE_LCMS1_H@ #cmakedefine HAVE_LCMS2_H @HAVE_LCMS2_H@ -#cmakedefine CMAKE_WORDS_BIGENDIAN -#ifdef CMAKE_WORDS_BIGENDIAN - #define OPJ_BIG_ENDIAN -#else - #define OPJ_LITTLE_ENDIAN -#endif +#cmakedefine OPJ_BIG_ENDIAN @CMAKE_WORDS_BIGENDIAN@ \ No newline at end of file