summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2014-10-09 21:08:16 +0200
committerSlávek Banko <slavek.banko@axis.cz>2014-10-09 21:08:16 +0200
commitb34c4d8c337aba6d7d44dfd58087ebd6e2d143e3 (patch)
tree1f28011425bdb7a577ad23d91d0007b9f215e17d
parente76fc32e0582f8bc801fb2c253dc826fb61873ec (diff)
downloadtdegraphics-b34c4d8c337aba6d7d44dfd58087ebd6e2d143e3.tar.gz
tdegraphics-b34c4d8c337aba6d7d44dfd58087ebd6e2d143e3.zip
Add support for lcms2
-rw-r--r--ksvg/ConfigureChecks.cmake21
-rw-r--r--ksvg/configure.in.in92
-rw-r--r--ksvg/impl/SVGColorProfileElementImpl.cc12
-rw-r--r--ksvg/impl/SVGColorProfileElementImpl.h11
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, <lcms/lcms.h>, [The correct header])
+KDE_CHECK_HEADER(lcms2.h,have_lcms2_header='yes',,)
+if test "$have_lcms2_header" = 'yes'; then
+ AC_DEFINE(LCMS_HEADER, <lcms2.h>, [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, <lcms.h>, [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.h>, [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/lcms.h>, [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