From b34c4d8c337aba6d7d44dfd58087ebd6e2d143e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Thu, 9 Oct 2014 21:08:16 +0200 Subject: Add support for lcms2 --- ksvg/ConfigureChecks.cmake | 21 +++++--- ksvg/configure.in.in | 92 +++++++++++++++++---------------- ksvg/impl/SVGColorProfileElementImpl.cc | 12 ++--- ksvg/impl/SVGColorProfileElementImpl.h | 11 +++- 4 files changed, 77 insertions(+), 59 deletions(-) diff --git a/ksvg/ConfigureChecks.cmake b/ksvg/ConfigureChecks.cmake index 72a9a6b2..e3c3893a 100644 --- a/ksvg/ConfigureChecks.cmake +++ b/ksvg/ConfigureChecks.cmake @@ -10,16 +10,21 @@ ################################################# # lcms -check_include_file( lcms.h HAVE_LCMS_H ) -if( HAVE_LCMS_H ) - set( LCMS_HEADER "lcms.h" CACHE INTERNAL "" FORCE ) -endif( ) +check_include_file( lcms2.h HAVE_LCMS2_H ) +if( HAVE_LCMS2_H ) + set( LCMS_HEADER "lcms2.h" CACHE INTERNAL "" FORCE ) + set( LCMS_LIBRARY lcms2 ) +else( HAVE_LCMS2_H ) + check_include_file( lcms.h HAVE_LCMS_H ) + if( HAVE_LCMS_H ) + set( LCMS_HEADER "lcms.h" CACHE INTERNAL "" FORCE ) + set( LCMS_LIBRARY lcms ) + endif( HAVE_LCMS_H ) +endif( HAVE_LCMS2_H ) if( LCMS_HEADER ) - check_library_exists( lcms VEC3init "" HAVE_LCMS ) + check_library_exists( ${LCMS_LIBRARY} cmsOpenProfileFromFile "" HAVE_LCMS ) endif( ) -if( HAVE_LCMS ) - set( LCMS_LIBRARY lcms ) -else( ) +if( NOT HAVE_LCMS ) tde_message_fatal( "lcms is required, but was not found on your system" ) endif( ) diff --git a/ksvg/configure.in.in b/ksvg/configure.in.in index 5643818e..7a19195b 100644 --- a/ksvg/configure.in.in +++ b/ksvg/configure.in.in @@ -113,52 +113,56 @@ fi # Check for lcms have_lcms_header='no' -KDE_CHECK_HEADER(lcms/lcms.h,have_lcms_header='yes',,) -if test "$have_lcms_header" = 'yes' -then - LCMS_LIBS='-llcms' - AC_DEFINE(LCMS_HEADER, , [The correct header]) +KDE_CHECK_HEADER(lcms2.h,have_lcms2_header='yes',,) +if test "$have_lcms2_header" = 'yes'; then + AC_DEFINE(LCMS_HEADER, , [LCMS header]) else - # Alternative! Debian does it this way... - KDE_CHECK_HEADER(lcms.h,have_lcms_header='yes',,) - if test "$have_lcms_header" = 'yes' - then - LCMS_LIBS='-llcms' - AC_DEFINE(LCMS_HEADER, , [The correct header]) - - # Try to find the full path of lcms.h - for a in $includedir $prefix/include /usr/include /usr/local/include $kde_extra_includes; do - for b in lcms.h lcms/lcms.h ; do - if test -d "$a" && test -f "$a/$b" ; then - LCMSHDR="$a/$b" - fi - done - done - # Check if lcms.h was found. If not then it means that we didn't search - # the right dirs since the kde check already found a usable lcms.h - if test -n "$LCMSHDR" ; then - # Get lcms version - lcms_ver_line=`cat $LCMSHDR | grep '^// Version' ` - if test -z "$lcms_ver_line" ; then - # Some versions of lcms have the version in /* */ - lcms_ver_line=`cat $LCMSHDR | grep '^/\* Version' ` - fi - lcms_ver=`echo "$lcms_ver_line" | head -n 1 | cut -d ' ' -f 3 ` - - # Get major and minor version numbers - lcms_var_maj=`echo $lcms_ver | cut -d . -f 1` - - # Some versions have a character attached to the end of minor version - lcms_var_min=`echo $lcms_ver | cut -d . -f 2 | sed 's,[^0-9],,g'` - - if test "$lcms_var_maj" -gt 1 || test "$lcms_var_min" -lt 9 ; then - LCMS_LIBS='' - fi - fi - else - LCMS_LIBS='' - fi + KDE_CHECK_HEADER(lcms.h,have_lcms_header='yes',,) + if test "$have_lcms_header" = 'yes'; then + AC_DEFINE(LCMS_HEADER, , [LCMS header]) else KDE_CHECK_HEADER(lcms/lcms.h,have_lcms_header='yes',,) + if test "$have_lcms_header" = 'yes'; then + AC_DEFINE(LCMS_HEADER, , [LCMS header]) + fi + fi +fi + +LCMS_LIBS='' +have_lcms='no' +saved_libs=$LIBS +saved_cflags="$CFLAGS" +saved_ldflags="$LDFLAGS" +CFLAGS="$CFLAGS $all_includes -I/usr/include/tqt" +LDFLAGS="$LDFLAGS $all_libraries" +if test "$have_lcms2_header" = 'yes'; then + LIBS="$LIBS -llcms2" + AC_TRY_LINK([ +#define inline __inline /* gcc is in ansi mode */ +#include LCMS_HEADER +#if LCMS_VERSION < 112 +choke! +#endif +], [ +cmsOpenProfileFromFile("foo", "r"); +], + [LCMS_LIBS='-llcms2'; have_lcms='yes']) +else + if test "$have_lcms_header" = 'yes'; then + LIBS="$LIBS -llcms" + AC_TRY_LINK([ +#define inline __inline /* gcc is in ansi mode */ +#include LCMS_HEADER +#if LCMS_VERSION < 112 +choke! +#endif +], [ +cmsOpenProfileFromFile("foo", "r"); +], + [LCMS_LIBS='-llcms'; have_lcms='yes']) + fi fi +LIBS=$saved_libs +CFLAGS=$saved_cflags +LDFLAGS=$saved_ldflags if test -z "$LCMS_LIBS"; then DO_NOT_COMPILE="$DO_NOT_COMPILE ksvg" diff --git a/ksvg/impl/SVGColorProfileElementImpl.cc b/ksvg/impl/SVGColorProfileElementImpl.cc index 0aa91e52..f59e7c23 100644 --- a/ksvg/impl/SVGColorProfileElementImpl.cc +++ b/ksvg/impl/SVGColorProfileElementImpl.cc @@ -205,13 +205,13 @@ bool SVGColorProfileElementImpl::loadColorProfile() m_hInput = cmsOpenProfileFromFile(open.latin1(), "r"); m_hOutput = cmsCreate_sRGBProfile(); - unsigned int dwIn = BYTES_SH(2) | CHANNELS_SH(_cmsChannelsOf(m_inputColorSpace)); - unsigned int dwOut = BYTES_SH(2) | CHANNELS_SH(_cmsChannelsOf(m_outputColorSpace)); + unsigned int dwIn = BYTES_SH(2) | CHANNELS_SH(cmsChannelsOf(m_inputColorSpace)); + unsigned int dwOut = BYTES_SH(2) | CHANNELS_SH(cmsChannelsOf(m_outputColorSpace)); if(m_renderingIntent != RENDERING_INTENT_AUTO) - m_hTrans = cmsCreateTransform(m_hInput, dwIn, m_hOutput, dwOut, m_renderingIntent - 2, cmsFLAGS_NOTPRECALC); + m_hTrans = cmsCreateTransform(m_hInput, dwIn, m_hOutput, dwOut, m_renderingIntent - 2, cmsFLAGS_NOOPTIMIZE); else - m_hTrans = cmsCreateTransform(m_hInput, dwIn, m_hOutput, dwOut, cmsTakeRenderingIntent(m_hInput), cmsFLAGS_NOTPRECALC); + m_hTrans = cmsCreateTransform(m_hInput, dwIn, m_hOutput, dwOut, cmsGetHeaderRenderingIntent(m_hInput), cmsFLAGS_NOOPTIMIZE); m_inputColorSpace = cmsGetColorSpace(m_hInput); m_outputColorSpace = cmsGetColorSpace(m_hOutput); @@ -237,7 +237,7 @@ TQRgb SVGColorProfileElementImpl::correctPixel(float r, float g, float b) return tqRgb(0, 0, 0); } - unsigned short input[MAXCHANNELS], output[MAXCHANNELS]; + unsigned short input[cmsMAXCHANNELS], output[cmsMAXCHANNELS]; input[0] = ((unsigned int) r) * 257; input[1] = ((unsigned int) g) * 257; @@ -245,7 +245,7 @@ TQRgb SVGColorProfileElementImpl::correctPixel(float r, float g, float b) cmsDoTransform(m_hTrans, input, output, 1); - if(m_outputColorSpace == icSigRgbData) + if(m_outputColorSpace == cmsSigRgbData) return tqRgb(output[0] / 257, output[1] / 257, output[2] / 257); return tqRgb(0, 0, 0); diff --git a/ksvg/impl/SVGColorProfileElementImpl.h b/ksvg/impl/SVGColorProfileElementImpl.h index db4f322e..7c4f884f 100644 --- a/ksvg/impl/SVGColorProfileElementImpl.h +++ b/ksvg/impl/SVGColorProfileElementImpl.h @@ -28,6 +28,15 @@ #undef QT_VERSION // Needed for 1.08 *grml* #include LCMS_HEADER +#if LCMS_VERSION < 2000 +#define cmsColorSpaceSignature icColorSpaceSignature +#define cmsChannelsOf _cmsChannelsOf +#define cmsFLAGS_NOOPTIMIZE cmsFLAGS_NOTPRECALC +#define cmsGetHeaderRenderingIntent cmsTakeRenderingIntent +#define cmsMAXCHANNELS MAXCHANNELS +#define cmsSigRgbData icSigRgbData +#endif + #include "SVGElementImpl.h" #include "SVGURIReferenceImpl.h" @@ -74,7 +83,7 @@ private: cmsHTRANSFORM m_hTrans; int m_intent; - icColorSpaceSignature m_inputColorSpace, m_outputColorSpace; + cmsColorSpaceSignature m_inputColorSpace, m_outputColorSpace; public: KSVG_GET -- cgit v1.2.3